![]() |
#1 |
Участник
|
![]()
Уважаемые специалисты. Подскажите пож-та, как определить реальные координаты скажем lef/top формы, если она размещена системой автоматически. Если задать ее координаты в свойствах, то это получается, но при работе в авт. режиме-нет. Это нужно для возможных размещений подчиненных форм типа диалог\инфо не где либо, а на работающей форме. Спасибо.
![]() |
|
![]() |
#2 |
Участник
|
Если только найти нужное окно с помощью WinAPI::FindWindow, а потом получить его координаты с помощью WinAPI::GetWindowPos. Думаю должно получиться
|
|
![]() |
#3 |
Участник
|
Цитата:
Если именно "над формой", то сейчас диалог так и показыается "над активной формой". Скорее всего, ваша хотелка вызвана тем, что вы работаете с DAX4 и выше, вы программист, копилируете класс, во время компиляции автоматически открывается окно "Сообщения компилятора", это окно становится активным, диалог рисуется над этим окном, а не над вашим. Если так, то перестаньте заниматься ерундой. У пользователей такой ситуации не должно возникать. Если ваша хотелка вызвана тем, что вы вручную в коде управляете фокусом и активным окном, то опять же перестаньте заниматься ерундой - правильно работайте с фокусом. В стандартном функционале диалог показываеется НАД активным окном. |
|
![]() |
#4 |
Пенсионер
|
Цитата:
Сообщение от pwp
![]() Уважаемые специалисты. Подскажите пож-та, как определить реальные координаты скажем lef/top формы, если она размещена системой автоматически. Если задать ее координаты в свойствах, то это получается, но при работе в авт. режиме-нет. Это нужно для возможных размещений подчиненных форм типа диалог\инфо не где либо, а на работающей форме. Спасибо.
![]()
__________________
![]() А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
![]() |
#5 |
Модератор
|
Зачем Вам это понадобилось?
Вы раньшк на Delphi программировали? С Уважением, Георгий |
|
![]() |
#6 |
Developer
|
Действительно, зачем такое могло понадобиться?
А в АХ4 функции X++: formRun.design().leftValue(); formRun.design().topValue(); |
|
![]() |
#7 |
Участник
|
Спасибо.
To Lucky13 & blokva - попробую, похоже должно сработать. Хотелось бы общаться с фунциями Х++ без WinApi, но уж если никак ..... To Georg Nordic : на Delphi нет, есть неб. опыт на Java To vallys : это работает если в свойствах формы установлено не auto, я же писал. To mazzy : Да , я неправ, конечно НАД работающей формой. Вопрос о компиляции не стоит, это выполнение формы. Я сам в окнах разберусь, а клиенту хотелось бы дать новое окно ближе к активной форме, а лучше на ней. <В стандартном функционале диалог показываеется НАД активным окном.> - это я заметил, хотелось бы этим и другими окнами (похожим на диалог) управлять. То ALL : спасибо еще раз. |
|
![]() |
#8 |
Developer
|
Ну значит в четверке эти функции уже не работают... точнее не так работают (в тройке работают независимо от значений leftMode и topMode). Поэтому и спросил. Спасибо за ответ. Значит если программировать на тройке с учетом апгрейда до четверки, то функции leftValue и topValue без параметров использовать не рекомендуется... Ох, что-то здесь не так...
|
|
![]() |
#9 |
Модератор
|
Нет, я без претензий. Просто не ведитесь на такие "хотелки" клиента.
Потом проблем не оберешься. Система должна решать поставленную задачу. С Уважением, Георгий |
|
![]() |
#10 |
Пенсионер
|
Цитата:
DAX 4.0.2503.284
__________________
![]() А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
![]() |
#11 |
Пенсионер
|
Цитата:
Сообщение от vallys
![]() Ну значит в четверке эти функции уже не работают... точнее не так работают (в тройке работают независимо от значений leftMode и topMode). Поэтому и спросил. Спасибо за ответ. Значит если программировать на тройке с учетом апгрейда до четверки, то функции leftValue и topValue без параметров использовать не рекомендуется... Ох, что-то здесь не так...
![]()
__________________
![]() А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
![]() |
#12 |
Участник
|
Цитата:
Сообщение от vallys
![]() Ну значит в четверке эти функции уже не работают... точнее не так работают (в тройке работают независимо от значений leftMode и topMode). Поэтому и спросил. Спасибо за ответ. Значит если программировать на тройке с учетом апгрейда до четверки, то функции leftValue и topValue без параметров использовать не рекомендуется... Ох, что-то здесь не так...
formRun.design()...... я пробовал, извлечь координаты, вышло только тогда, когда явно их устанавливал в свойствах (а это не годится). Может что и накосячил, с литературой худо. Так что делать вывод что что то не работает в 4.0 рано. Еще раз попробую и доложу. Цитата:
Сообщение от blokva
Странно но у меня работает даже если в свойствах Design формы координаты стоят "Auto
Цитата:
Сообщение от blokva
.....Просто не ведитесь на такие "хотелки" клиента....
Спасибо за содействие. |
|
![]() |
#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 И все время нули !!!! А когда в свойствах формы явные координаты - то они и здесь выводятся ! |
|
![]() |
#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 |
|
![]() |
#15 |
Участник
|
|
|
![]() |
#16 |
Пенсионер
|
Цитата:
Вы не смогли бы привести код ?
__________________
![]() А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ Последний раз редактировалось blokva; 18.07.2008 в 08:32. |
|
|
За это сообщение автора поблагодарили: pwp (1). |
![]() |
#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 |
Участник
|
Какие же они одинаковые - this.form.design имеет тип FormBuildDesign, а this.design - FormDesign. То что у этих классов есть одинаковые свойства не значит что они будут возвращать одинаковые значения.
|
|
|
За это сообщение автора поблагодарили: pwp (1). |
![]() |
#19 |
Пенсионер
|
Цитата:
И еще, кто-то на форуме говорил или еще где-то слышал, что "вживую" надо работать только с объектами классов в которых есть волшебное сочетание "Build" при прочих равных
__________________
![]() А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ Последний раз редактировалось blokva; 18.07.2008 в 13:26. |
|
![]() |
#20 |
Участник
|
Цитата:
Кстати, через WinApi данные похуже, т.к. они не учитывают, по моему, меню слева.
getWindowRect - взять экранные координаты окна (абсолютные). getClientRect - взять координаты относительно родительского окна (видимо как раз то, что аксапта возвращает). ClientToScreen, ScreenToClient - переводы координат из одних в другие (относительные в абсолютные и наоборот).
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|