Главная страница
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.012 c
6-1189799328
sniknik
2007-09-14 23:48
2008.07.06
Глюк компонента TIdUDPServer в 10м Indy? Проверьте ктонибудь.


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


15-1211734774
DVM
2008-05-25 20:59
2008.07.06
Что за программа так оформляет код?


2-1212581703
Natandra
2008-06-04 16:15
2008.07.06
Invalid configuration parameter


2-1212846624
WebSQLNeederrr
2008-06-07 17:50
2008.07.06
Как узнать следующее вхождение pos-a