Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.07.06;
Скачать: 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 вся ветка

Текущий архив: 2008.07.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
15-1211611441
Марк
2008-05-24 10:44
2008.07.06
посоветуйте IDE для Python


2-1212668598
Alex
2008-06-05 16:23
2008.07.06
Компонент savedialog


15-1211534621
Slider007
2008-05-23 13:23
2008.07.06
С днем рождения ! 23 мая 2008 пятница


2-1212873159
ply
2008-06-08 01:12
2008.07.06
TMemINIFile


15-1211292591
big
2008-05-20 18:09
2008.07.06
Бесплатный оффлайн переводчик англо-рус (win)