Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Что возвращает ClientToScreen?


Kolan ©   (2008-06-05 16:38:00) 

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

Следующий код возвращает в 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 — это TButton), но оно открывается со сдвижкой в ~100 пикеселей влево и ниже на ~20 пикс.

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


Kolan   (2008-06-05 17:14:00) [1]

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

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


Игорь Шевченко   (2008-06-05 17:05:00) [2]


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


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


Kolan   (2008-06-05 17:04:00) [3]

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

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


Игорь Шевченко   (2008-06-05 16:59:00) [4]


>  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 16:52:00) [5]

Все, дошло


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


Kolan   (2008-06-05 16:50:00) [6]

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

В helpe'ре self — это не он сам, а тот кому он помогает. Раз у меня хелпер для TButton, то Self — это кнопка.


Palladin   (2008-06-05 16:48:00) [7]

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


Kolan   (2008-06-05 16:47:00) [8]

Кроме того,


Kolan   (2008-06-05 16:47:00) [9]

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

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


Kolan   (2008-06-05 16:46:00) [10]

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

Self — это кнопка.


Kolan   (2008-06-05 16:42:00) [11]

> PopupMenu.PopupControl

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


Kolan   (2008-06-05 16:40:00) [12]

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


Palladin   (2008-06-05 16:40:00) [13]


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

значит Self.PopupControl.ClientToScreen


Palladin   (2008-06-05 16:39:00) [14]


> PopupPoint := Self.ClientToScreen(

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо