Уже писал, но так никто и не ответил :(.
Возникла необходимость вызывать popmenu из datawindow по сочетанию клавиш.
Как найти координаты dwo относительно mdi, чтобы меню отображалось в месте
нахождения конкретного объекта с учетом номера строки?
Хотелось бы поиметь единый алгоритм для разных типов datawindow.
С уважением, Andrey. E-mail: alpha...@ukrpost.net
07/04/2004 10:15:00, Andrey Kolosov отписал(а) к All:
AK> Уже писал, но так никто и не ответил :(.
А никто наверное и не знает. :)
AK> Возникла необходимость вызывать popmenu из datawindow по сочетанию
AK> клавиш. Как найти координаты dwo относительно mdi, чтобы меню
AK> отображалось в месте нахождения конкретного объекта с учетом номера
AK> строки?
IMHO, универсального способа нет. Вариант попроще -- выводить меню в
фиксированном месте DW, особой разницы в местоположении нет, т.к. вызывается
клавиатурой. А так, берешь первую видимую строку и считаешь реальную высоту
каждой последующей до текущей. Еще надо учитывать высоту Header'а. Если есть
группы, то еще надо и их заголовки учесть, да еще и их количество. Впринципе,
объемно, но не сложно.
AK> Хотелось бы поиметь единый алгоритм для разных типов datawindow.
Hадо только для грида, да формы. С остальными толком клавиатурой и не
работают.
За сим откланиваюсь, Олег.
Вторник апрель 13 2004, а Oleg Tonkikh пишет Andrey Kolosov вот что:
OT> А никто наверное и не знает. :)
Видимо, единого алгоритма для всех типов DW действительно нет :(.
[...]
OT> IMHO, универсального способа нет. Вариант попроще -- выводить
OT> меню в фиксированном месте DW, особой разницы в местоположении нет,
OT> т.к. вызывается клавиатурой.
Однако вызывать нужно для конкретной строки и столбца.
Поэтому лучше расположить возле этого пункта.
OT> А так, берешь первую видимую строку и считаешь
OT> реальную высоту каждой последующей до текущей. Еще надо учитывать
OT> высоту Header'а. Если есть группы, то еще надо и их заголовки учесть,
OT> да еще и их количество. Впринципе, объемно, но не сложно.
Ты забыл, что еще, возможно, придется учитывать координаты листа в MDI, с
учетом тулбаров, etc...
AK>> Хотелось бы поиметь единый алгоритм для разных типов datawindow.
OT> Hадо только для грида, да формы. С остальными толком клавиатурой и не
OT> работают.
А фриформ?
Воскресенье апрель 18 2004, а Oleg Tonkikh пишет Andrey Kolosov вот что:
OT> Привет, Andrey!
OT> Hе все так плохо. Если брать редактируемые DW, то как правило, это
OT> грид или фриформ и в них нет группировок, т.е. все считается одинаково.
Группировки могут быть, особенно во фриформе.
OT>>> А так, берешь первую видимую строку и считаешь
OT>>> реальную высоту каждой последующей до текущей. Еще надо учитывать
OT>>> высоту Header'а. Если есть группы, то еще надо и их заголовки
OT>>> учесть, да еще и их количество. Впринципе, объемно, но не сложно.
AK>> Ты забыл, что еще, возможно, придется учитывать координаты листа в
AK>> MDI, с учетом тулбаров, etc...
OT> Это ерунда. Самая главная проблема -- вычислить координаты
OT> относительно DW-контрола.
Это не ерунда.
Hужно учесть, что юзер может в любой момент перетянуть тулбары, или открыть
шиты с другим количеством тулбаров, а то и просто пощелкать Ctrl+Tab.
Возможен также вариант, когда часть dw "сидит" непосредственно на MDI фрейме, а
часть расположена в шитах, кстати, в окне dw может также "плавать".
Если все это как следует отслеживать - уже заморочка :(.
PS. Было бы гораздо удобнее иметь некую функцию, находящую абсолютные
координаты текстового курсора, эдакий аналог PointerX(), PointerY().
22/04/2004 08:32:00, Andrey Kolosov отписал(а) к Oleg Tonkikh:
OT>> Hе все так плохо. Если брать редактируемые DW, то как правило,
OT>> это грид или фриформ и в них нет группировок, т.е. все считается
OT>> одинаково.
AK> Группировки могут быть, особенно во фриформе.
Hу раз они есть, то и их надо считать. Hа самом деле, не так уж и сложно,
хоть и объемный код получается. :)
AK> Это не ерунда.
AK> Hужно учесть, что юзер может в любой момент перетянуть тулбары, или
AK> открыть шиты с другим количеством тулбаров, а то и просто пощелкать
AK> Ctrl+Tab. Возможен также вариант, когда часть dw "сидит"
AK> непосредственно на MDI фрейме, а часть расположена в шитах, кстати, в
AK> окне dw может также "плавать". Если все это как следует отслеживать -
AK> уже заморочка :(.
Сейчас под рукой кода нет, но даже в хелпе написано, как надо меню
вызывать, в обоих случаях. А для определения MDI надо в Sheet'ах фрейма
поискать родительское окно, если есть, то MDI.
AK> PS. Было бы гораздо удобнее иметь некую функцию, находящую абсолютные
AK> координаты текстового курсора, эдакий аналог PointerX(), PointerY().
Достаточно координаты поля редактирования, но такой функции все равно нет.
:)
За сим откланиваюсь, Олег.