![]() |
#3 |
Участник
|
![]()
Если других 'человеческих' вариантов не предложат, то можно попробовать 'поиграть' правым выравниваением формы средствами WinAPI.
Алгоритм не сложный: получить размеры клиентской области Ax и размеры текущей формы, после этого выставить координаты формы (formDesign.leftValue) таким образом что бы форма была 'прижата' к правой границе рабочей области Ax. Обработку можно навесить на метод run(): X++: public void run() { // --> FormAlignment container rectCurForm ; container rectAxClient; int formWidth ; int formLeft ; ; // <-- FormAlignment super(); // --> FormAlignment switch( this.form().design().leftMode() ) { case FormLeft::AutoRight : case FormLeft::RightEdge : rectCurForm = WinAPI::getWindowRect( this.hWnd() ) ; rectAxClient = WinAPI::getClientRect( WinAPI::findWindowEx( infolog.hWnd(), 0, 'MDIClient', '' ) ) ; formWidth = conpeek( rectCurForm, 3 ) - conpeek( rectCurForm, 1 ) ; formLeft = conpeek( rectAxClient, 3 ) - formWidth ; this.design().leftValue( formLeft ) ; break ; } // <-- FormAlignment } X++: client static container getWindowRect(HWND _hWnd) { #define.sizeOfRectStruct(16) DLL DLL = new DLL(#UserDLL) ; DLLFunction DLLFunction = new DLLFunction(DLL,'GetWindowRect'); Binary rect = new Binary( #sizeOfRectStruct ); ; DLLFunction.arg( ExtTypes::DWord, ExtTypes::Pointer ) ; DLLFunction.returns( ExtTypes::DWord ) ; if( DLLFunction.call( _hWnd, rect ) == 0 ) return connull() ; return [ rect.dWord( #offset0 ), rect.dWord( #offset4 ), rect.dWord( #offset8 ), rect.dWord( #offset12 ) ] ; } X++: client static container getClientRect(HWND _HWND) { #define.sizeOfRectStruct(16) DLL DLL = new DLL(#UserDLL) ; DLLFunction DLLFunction = new DLLFunction(DLL,'GetClientRect'); Binary rect = new Binary( #sizeOfRectStruct ); ; DLLFunction.arg( ExtTypes::DWord, ExtTypes::Pointer ) ; DLLFunction.returns( ExtTypes::DWord ) ; if( DLLFunction.call( _hWnd, rect ) == 0 ) return connull() ; return [ rect.dWord( #offset0 ), rect.dWord( #offset4 ), rect.dWord( #offset8 ), rect.dWord( #offset12 ) ] ; } P.S. Набросал небольшой проект в качестве демонстрации (Ax 3.0 sp05 fp01 ) Последний раз редактировалось petergunn; 09.02.2009 в 12:21. |
|
|
За это сообщение автора поблагодарили: miklenew (2). |