Главная страница
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.021 c
2-1212882595
ply
2008-06-08 03:49
2008.07.06
сохранить катинку в БД


8-1183029262
Tab
2007-06-28 15:14
2008.07.06
Рисование растянутого png


3-1201699267
Nodnars
2008-01-30 16:21
2008.07.06
Помогите выбрать движок


9-1169734159
Creative
2007-01-25 17:09
2008.07.06
3D tetris


15-1211227922
Житель_форума
2008-05-20 00:12
2008.07.06
E-mail - > сайт