Вниз
Скачать: CL | DM;

Что возвращает ClientToScreen?   Найти похожие ветки 

← →
Kolan ©   (2008-06-05 16:38) [0]

Непойму что возвращает сабж.

Следующий код возвращает в PopupPoint не те координаты, что я ожидал. Я думал, я
procedure TButtonPopupHelper.PopupMenuAtTheBottom;
var
 PopupPoint: TPoint;
begin
 if Self.PopupMenu <> nil then
 begin
   PopupPoint := Self.ClientToScreen(Point(Self.Left, Self.Top + Self.Height));
   Self.PopupMenu.Popup(PopupPoint.X, PopupPoint.Y);
 end;
end;


Я думал, что в итоге, попап меню откроется снизу контрола (тут Self &#151; это TButton), но оно открывается со сдвижкой в ~100 пикеселей влево и ниже на ~20 пикс.

Почему так происходит?
Как получить нужные мне координаты?


← →
Palladin ©   (2008-06-05 16:39) [1]


> PopupPoint := Self.ClientToScreen(

думаю все же не self, а PopupMenu.PopupControl


← →
Kolan ©   (2008-06-05 16:40) [2]

Это не совсем класс :-)
TButtonPopupHelper = class helper for TButton
public
 procedure PopupMenuAtTheBottom;
end;


← →
Palladin ©   (2008-06-05 16:40) [3]


> Kolan ©   (05.06.08 16:40) [2]

значит Self.PopupControl.ClientToScreen


← →
Kolan ©   (2008-06-05 16:42) [4]

> PopupMenu.PopupControl

Точно, можно хелпер для меню написать и тогда для всех контролов будет работать. Я просто с TControl помыкался, Popupmenu у него протектид, а как хакнуть с хелпером мозгов не хыватило...


← →
Kolan ©   (2008-06-05 16:46) [5]

> значит Self.PopupControl.ClientToScreen

Self &#151; это кнопка.


← →
Kolan ©   (2008-06-05 16:47) [6]

Кроме того,


← →
Kolan ©   (2008-06-05 16:47) [7]

Из справки:
Indicates the component that last displayed the popup menu in response to a right mouse click.

То есть если никто не попапнул, то там будет nil получается.


← →
Palladin ©   (2008-06-05 16:48) [8]

чет я совсем запутался...


← →
Kolan ©   (2008-06-05 16:50) [9]

> чет я совсем запутался...

В helpe"ре self &#151; это не он сам, а тот кому он помогает. Раз у меня хелпер для TButton, то Self &#151; это кнопка.


← →
Kolan ©   (2008-06-05 16:52) [10]

Все, дошло


   PopupPoint := Self.ClientToScreen(Point(0, Self.Height));
   Self.PopupMenu.Popup(PopupPoint.X, PopupPoint.Y);


← →
Игорь Шевченко ©   (2008-06-05 16:59) [11]


>  if Self.PopupMenu <> nil then
>  begin
>    PopupPoint := Self.ClientToScreen(Point(Self.Left, Self.
> Top + Self.Height));
>    Self.PopupMenu.Popup(PopupPoint.X, PopupPoint.Y);


А зачем ты столько раз Self пишешь ?


← →
Kolan ©   (2008-06-05 17:04) [12]

> А зачем ты столько раз Self пишешь ?

Предлагаешь использовать with? Если так, то ну его. Очень некрасиво получилось?
Или как-то по другому?


← →
Игорь Шевченко ©   (2008-06-05 17:05) [13]


> Или как-то по другому?


просто убрать.


← →
Kolan ©   (2008-06-05 17:14) [14]

> просто убрать.

Млин, до этого еще надо додуматься было. :-) Справка сбила с толку, думал надо писать.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.011 c
2-1212725754
Прохожев
2008-06-06 08:15
2008.07.06
Перебрать все компоненты на всех формах в проекте


2-1212568980
lead-in
2008-06-04 12:43
2008.07.06
indy, компонент IdFTP


2-1213013711
sydenis
2008-06-09 16:15
2008.07.06
как узнать сообщение


2-1213084956
Mishenka
2008-06-10 12:02
2008.07.06
PopupMenu в MainMenu


2-1212756449
tytus
2008-06-06 16:47
2008.07.06
Как оптимизировать код?




   Наверх