17.07.2008, 07:41 | #1 |
Участник
|
Координаты формы на рабочем поле MDAX 4.0
Уважаемые специалисты. Подскажите пож-та, как определить реальные координаты скажем lef/top формы, если она размещена системой автоматически. Если задать ее координаты в свойствах, то это получается, но при работе в авт. режиме-нет. Это нужно для возможных размещений подчиненных форм типа диалог\инфо не где либо, а на работающей форме. Спасибо.
|
|
17.07.2008, 09:24 | #2 |
Участник
|
Если только найти нужное окно с помощью WinAPI::FindWindow, а потом получить его координаты с помощью WinAPI::GetWindowPos. Думаю должно получиться
|
|
17.07.2008, 09:31 | #3 |
Участник
|
Цитата:
Если именно "над формой", то сейчас диалог так и показыается "над активной формой". Скорее всего, ваша хотелка вызвана тем, что вы работаете с DAX4 и выше, вы программист, копилируете класс, во время компиляции автоматически открывается окно "Сообщения компилятора", это окно становится активным, диалог рисуется над этим окном, а не над вашим. Если так, то перестаньте заниматься ерундой. У пользователей такой ситуации не должно возникать. Если ваша хотелка вызвана тем, что вы вручную в коде управляете фокусом и активным окном, то опять же перестаньте заниматься ерундой - правильно работайте с фокусом. В стандартном функционале диалог показываеется НАД активным окном. |
|
17.07.2008, 09:33 | #4 |
Пенсионер
|
Цитата:
Сообщение от pwp
Уважаемые специалисты. Подскажите пож-та, как определить реальные координаты скажем lef/top формы, если она размещена системой автоматически. Если задать ее координаты в свойствах, то это получается, но при работе в авт. режиме-нет. Это нужно для возможных размещений подчиненных форм типа диалог\инфо не где либо, а на работающей форме. Спасибо.
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
17.07.2008, 09:33 | #5 |
Модератор
|
Зачем Вам это понадобилось?
Вы раньшк на Delphi программировали? С Уважением, Георгий |
|
17.07.2008, 10:40 | #6 |
Developer
|
Действительно, зачем такое могло понадобиться?
А в АХ4 функции X++: formRun.design().leftValue(); formRun.design().topValue(); |
|
17.07.2008, 11:10 | #7 |
Участник
|
Спасибо.
To Lucky13 & blokva - попробую, похоже должно сработать. Хотелось бы общаться с фунциями Х++ без WinApi, но уж если никак ..... To Georg Nordic : на Delphi нет, есть неб. опыт на Java To vallys : это работает если в свойствах формы установлено не auto, я же писал. To mazzy : Да , я неправ, конечно НАД работающей формой. Вопрос о компиляции не стоит, это выполнение формы. Я сам в окнах разберусь, а клиенту хотелось бы дать новое окно ближе к активной форме, а лучше на ней. <В стандартном функционале диалог показываеется НАД активным окном.> - это я заметил, хотелось бы этим и другими окнами (похожим на диалог) управлять. То ALL : спасибо еще раз. |
|
17.07.2008, 11:21 | #8 |
Developer
|
Ну значит в четверке эти функции уже не работают... точнее не так работают (в тройке работают независимо от значений leftMode и topMode). Поэтому и спросил. Спасибо за ответ. Значит если программировать на тройке с учетом апгрейда до четверки, то функции leftValue и topValue без параметров использовать не рекомендуется... Ох, что-то здесь не так...
|
|
17.07.2008, 11:40 | #9 |
Модератор
|
Нет, я без претензий. Просто не ведитесь на такие "хотелки" клиента.
Потом проблем не оберешься. Система должна решать поставленную задачу. С Уважением, Георгий |
|
17.07.2008, 12:49 | #10 |
Пенсионер
|
Цитата:
DAX 4.0.2503.284
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
17.07.2008, 12:50 | #11 |
Пенсионер
|
Цитата:
Сообщение от vallys
Ну значит в четверке эти функции уже не работают... точнее не так работают (в тройке работают независимо от значений leftMode и topMode). Поэтому и спросил. Спасибо за ответ. Значит если программировать на тройке с учетом апгрейда до четверки, то функции leftValue и topValue без параметров использовать не рекомендуется... Ох, что-то здесь не так...
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
17.07.2008, 16:22 | #12 |
Участник
|
Цитата:
Сообщение от vallys
Ну значит в четверке эти функции уже не работают... точнее не так работают (в тройке работают независимо от значений leftMode и topMode). Поэтому и спросил. Спасибо за ответ. Значит если программировать на тройке с учетом апгрейда до четверки, то функции leftValue и topValue без параметров использовать не рекомендуется... Ох, что-то здесь не так...
formRun.design()...... я пробовал, извлечь координаты, вышло только тогда, когда явно их устанавливал в свойствах (а это не годится). Может что и накосячил, с литературой худо. Так что делать вывод что что то не работает в 4.0 рано. Еще раз попробую и доложу. Цитата:
Сообщение от blokva
Странно но у меня работает даже если в свойствах Design формы координаты стоят "Auto
Цитата:
Сообщение от blokva
.....Просто не ведитесь на такие "хотелки" клиента....
Спасибо за содействие. |
|
17.07.2008, 16:42 | #13 |
Участник
|
Цитата:
Форма RHRMOrderTransList1 public class FormRun extends ObjectRun { RHRMJournalType orderType; // типы приказов ……………………. Form f; ComExcelDocument_RU doc; int itop,ileft; } Метод Run формы RHRMOrderTransList1 : public void run() { super(); f = this.form(); itop = f.design().topValue(); ileft = f.design().leftValue(); info (int2str(itop)+"/"+int2str(ileft)+"/"+f.name()); } Выдача из Run : Информация: 0/0/RHRMOrderTransList1 И все время нули !!!! А когда в свойствах формы явные координаты - то они и здесь выводятся ! |
|
17.07.2008, 17:51 | #14 |
Участник
|
Ну ведь сказали уже как делать:
Цитата:
public void init()
{ container rect; ; super(); rect = WinApi::getWindowRect(element.hWnd()); info(strfmt("%1 %2 %3 %4", conpeek(rect, 1), conpeek(rect, 2), conpeek(rect, 3), conpeek(rect, 4))); } Цитата:
Хотелось бы общаться с фунциями
Х++ без WinApi
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
17.07.2008, 19:03 | #15 |
Участник
|
|
|
18.07.2008, 08:29 | #16 |
Пенсионер
|
Цитата:
Вы не смогли бы привести код ?
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ Последний раз редактировалось blokva; 18.07.2008 в 08:32. |
|
|
За это сообщение автора поблагодарили: pwp (1). |
18.07.2008, 10:13 | #17 |
Участник
|
-------------------------------------------------------------------------------------
Вместе с Вашим кодом и WinApi : public void run() { container rect; ; super(); rect = WinApi::getWindowRect(element.hWnd()); info(strfmt("%1 %2 %3 %4", conpeek(rect, 1), conpeek(rect, 2), conpeek(rect, 3), conpeek(rect, 4))); info ('BLOKVA.run='+int2str(this.design().topValue())+'/'+int2str(this.design().leftValue())); // почему не работает этот код ? f = this.form(); itop = f.design().topValue(); ileft = f.design().leftValue(); info ('f=this.form()-'+int2str(itop)+"/"+int2str(ileft)+"/"+f.name()); } -------------Не получается скопировать из окна инфо, перепишу : 280 286 1093 619 - это через WinApi forum.run = 190/19 f=this.form()- 0/0/RHRMOrderTransList1 --------------------------------------------------------- Ваш код работает, а который накопал я нет.Вроде они почти одинаковы.В чем дело? Кстати, через WinApi данные похуже, т.к. они не учитывают, по моему, меню слева. |
|
18.07.2008, 11:06 | #18 |
Участник
|
Какие же они одинаковые - this.form.design имеет тип FormBuildDesign, а this.design - FormDesign. То что у этих классов есть одинаковые свойства не значит что они будут возвращать одинаковые значения.
|
|
|
За это сообщение автора поблагодарили: pwp (1). |
18.07.2008, 13:19 | #19 |
Пенсионер
|
Цитата:
И еще, кто-то на форуме говорил или еще где-то слышал, что "вживую" надо работать только с объектами классов в которых есть волшебное сочетание "Build" при прочих равных
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ Последний раз редактировалось blokva; 18.07.2008 в 13:26. |
|
18.07.2008, 15:42 | #20 |
Участник
|
Цитата:
Кстати, через WinApi данные похуже, т.к. они не учитывают, по моему, меню слева.
getWindowRect - взять экранные координаты окна (абсолютные). getClientRect - взять координаты относительно родительского окна (видимо как раз то, что аксапта возвращает). ClientToScreen, ScreenToClient - переводы координат из одних в другие (относительные в абсолютные и наоборот).
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|