|
12.09.2005, 15:43 | #1 |
NavAx
|
Покрасить фон Аксапты
Короче - для удобства юзверей есть задачка.
Грубо говоря - нужно установить фон окна Аксапты в определенный цвет. Есть два требования: 1. Должно позволять покрасить две разных одновременно запущенных Акспт в разные цвета. 2. Не должно быть в виде внешней .dll, .ocx и т.д. P.S. SetSysColors по понятным причинам не катит. Или катит, но как тогда ловить фокус окна? |
|
08.07.2006, 14:21 | #2 |
Пенсионер
|
Меняем стандартную иконку
Возвращаясь к теме по причине того, что периодически возникают проблеммы с "перепутыванием" открытых экземпляров...а это раздражает...оно меня раздражает (с) Жванецкий
Идея и подсказка Maximin, за что большой респект (к сожалению только 1) дополнительно к методу WinAPI::setClassLong() добавляем метод в WinGDI PHP код:
ну и собсно меняем: PHP код:
ззы: у себя я меняю автоматически при входе в опре деленный экземпляр аксапты путем указания и последующей обработки необходимой команды в поле "Startap Command" в конфигурационной утилиты. Если интересует могу рассказать как. Добавил скриншотик, как это выглядит в таскбаре, по порядку: тестовая, рабочая, локальная
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ Последний раз редактировалось blokva; 08.07.2006 в 14:34. |
|
|
За это сообщение автора поблагодарили: Antant (1). |
10.07.2006, 07:42 | #3 |
Участник
|
Пытаюсь поставить свою строку в заголовке окна в начале работы системы - не получается. Происходит какое-то обновление всего окна сразу после загрузки системы. Можете подсказать метод, который вызывается после такого обновления, чтобы название окна не менялось после того, как я его изменю.
__________________
И почему никто меня не любит? Да, я надоедливый |
|
10.07.2006, 10:46 | #4 |
Пенсионер
|
Цитата:
Сообщение от Antant
Пытаюсь поставить свою строку в заголовке окна в начале работы системы - не получается. Происходит какое-то обновление всего окна сразу после загрузки системы. Можете подсказать метод, который вызывается после такого обновления, чтобы название окна не менялось после того, как я его изменю.
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
10.07.2006, 11:03 | #5 |
Участник
|
\Classes\Info\onEventGoingIdle
X++: //Event fired by kernel when the client goes idle. //It is not fired during CTRL-Break dialog. void onEventGoingIdle() { this.operationProgressClear(); this.endLengthyOperation(true); /// if(strLwr(curUserID())!='admin') TitleChanger::changeTitle(); } X++: static void changeTitle() { #define.WM_SETTEXT(0x000C) str caption; str prefix=new Session().AOSName()+": "; int defWindowProc( int _handle, int _msg, int _wParam, str _lParam ) { int ret; DLL _DLL = new DLL('USER32'); DLLFunction _defwproc = new DLLFunction(_DLL, 'DefWindowProcA'); ; _defwproc.returns(ExtTypes:: DWord); // LRESULT _defwproc.arg(ExtTypes:: DWord); // handle window _defwproc.arg(ExtTypes:: DWord); // message _defwproc.arg(ExtTypes:: DWord); // wparm _defwproc.arg(ExtTypes::String); // lparm return _defwproc.call(_handle, _msg, _wParam, _lParam); } ; caption = winapi::getWindowText(infolog.hWnd()); if(!StrUtils::startsWith(caption, prefix)) defWindowProc(infolog.hWnd(), #WM_SETTEXT, 0, prefix + caption); } X++: // строка _s начинается на _suffix static boolean startsWith(str _s, str _prefix) { return strLen(_s)>=strLen(_prefix) && subStr(_s, 1, strLen(_prefix))==_prefix; } |
|
|
За это сообщение автора поблагодарили: blokva (1), gl00mie (1), Antant (1), Sergey Petrov (1), kpoxa (0). |
29.07.2010, 12:22 | #6 |
Участник
|
Штатно в заголовке окна клиента AX 2009 из информации о сервере показывается лишь название хоста AOS'а. Чтобы не заморачиваться с изменением иконок, отображением названия каталога с приложением и проч., захотелось видеть в заголовке название БД (схемы в случае с Oracle). Для Oracle пришлось делать отдельный метод, потому что если задать в настройках AOS некий "общий" TNS, а схему указать отдельно, то я не нашел, как ее выцепить штатными средствами. В общем, решено это все было следующим образом:
\Classes\Info\DEV_setAxWorkspaceTitle X++: /// <summary> /// выставляет более информативный и в то же время лаконичный заголовок окна рабочей области AX /// </summary> /// <param name="_hWnd"> /// дескриптор окна рабочей области, для которой нужно поменять заголовок /// </param> protected void DEV_setAxWorkspaceTitle( HWND _hWnd = this.hWnd( xInfo::currentWorkspaceNum() ) ) { xSession session; str caption; ; Debug::assert( _hWnd != 0 ); session = new xSession(); caption = strfmt( @"%1 [%2@%3: %4 %5] - [%6 - %7]", "@SYS119901", DEV_getCurrentDatabaseName(), session.AOSName(), "@SYS7115", session.sessionId(), xInfo::currentWorkspaceNum(), curext() ); WinAPI::setWindowText( _hWnd, caption ); } X++: /// <summary> /// возвращает название текущей базы (MsSQL) или схемы (Oracle) /// </summary> /// <returns> /// название базы/схемы, с которой работает AOS /// </returns> /// <exception cref="Exception::Error"> /// выбрасывается, если используемая СУБД - не Ms SQL или Oracle /// </exception> public static client server str DEV_getCurrentDatabaseName() { DatabaseId databaseId; str ret; ; ret = classFactory.globalCache().get( funcname(), '', '' ); if (ret == '') { databaseId = SqlSystem::databaseBackendId(); switch (databaseId) { case DatabaseId::Oracle : ret = DEV_getCurrentOracleSchemaName(); break; case DatabaseId::MS_Sql_Server : ret = new SqlSystem().loginDatabase(); break; default : throw error( Error::wrongUseOfFunction( funcname() ) ); } classFactory.globalCache().set( funcname(), '', ret ); } return ret; } X++: /// <summary> /// возвращает название текущей схемы в Oracle, если текущая используемая СУБД - Oracle /// </summary> /// <returns> /// название текущей схемы в Oracle /// </returns> public static server str DEV_getCurrentOracleSchemaName() { SqlStatementExecutePermission sqlStatmPerm; str sqlStatm; Statement statement; ResultSet resultSet; str ret; ; Debug::assert( SqlSystem::databaseBackendId() == DatabaseId::Oracle ); sqlStatm = @"select sys_context( 'userenv', 'current_schema' ) current_schema from dual"; sqlStatmPerm = new SqlStatementExecutePermission( sqlStatm ); sqlStatmPerm.assert(); statement = new Connection().createStatement(); // BP Deviation Documented resultSet = statement.executeQuery( sqlStatm ); if (resultSet.next()) { ret = resultSet.getString( 1 ); } CodeAccessPermission::revertAssert(); return ret; } |
|
|
За это сообщение автора поблагодарили: mazzy (2), raz (5), lev (2), aidsua (2), npokypatop (1). |
Теги |
ax2009, axapta, download, faq, winapi, база данных, внешний вид, законченный пример, иконка, интерфейс, полезное, фон |
|
|