Текущий архив: 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 — это 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 — это кнопка.
← →
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 — это не он сам, а тот кому он помогает. Раз у меня хелпер для TButton, то Self — это кнопка.
← →
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.47 MB
Время: 0.031 c