![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Что возвращает 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