|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Кнопка с выпадающим меню
На просторах инета как то находил код. он определял координаты буттона и под ним выводил ПопупМеню. Если кто сталкивался с таким, напишите пжл код или дайте ссылся. Спасибо.
|
#2
|
||||
|
||||
Цитата:
Код:
procedure TForm1.Button1Click(Sender: TObject); var pt: TPoint; begin pt := Point(Button1.Left, Button1.Top + Button1.Height); pt := ClientToScreen(pt); PopupMenu1.Popup(pt.X, pt.Y); end; |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
DOR (20.10.2012)
|
#3
|
||||
|
||||
Цитата:
Код:
procedure TForm1.Button1Click(Sender: TObject); var pt: TPoint; begin with Sender as TButton do begin pt := Point(Left, Top + Height); pt := Parent.ClientToScreen(pt); end; PopupMenu1.Popup(pt.X, pt.Y); end; — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
DOR (20.10.2012)
|
#4
|
|||
|
|||
Код:
pt: TPoint; ругается на Код:
pt := Point(Left, Top + Height); Последний раз редактировалось DOR, 20.10.2012 в 22:41. |
#5
|
||||
|
||||
Ну раз обработчик принадлежит кнопке, то можно и без Sender-а обойтись, прямым указанием. Правда так будет удобно, если один обработчик принадлежит туевой хуче кнопок.
Это переменная, открой справку и прочитай про TPoint. Не подключен SysUtils в uses. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#6
|
||||
|
||||
Цитата:
Цитата:
Point - функция из модуля Classes |
#7
|
|||
|
|||
Цитата:
SysUtils подключен. |
#8
|
||||
|
||||
Да-да, что то я про принадлежность Point не то ляпнул.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#9
|
||||
|
||||
Если не подключен Classes то подключи, иначе, мб., пиши
Код:
pt := Classes.Point(Left, Top + Height); |
Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение: | ||
DOR (20.10.2012)
|
#10
|
|||
|
|||
Код:
pt := Classes.Point(Left, Top + Height); |
#11
|
|||
|
|||
а можно чтобы срабатывало не по клику, а при наведении на кнопку мыши.
|
#12
|
||||
|
||||
Если есть у кнопки событие OnMouseEnter - то легко. Если же нет, то в OnMouseMove, но с некоторыми дополнительными условиями.
|
#13
|
|||
|
|||
Enter нет, только Move. Вы можете поправить код?
Код:
procedure Tf_ABP.sbt_StatClick(Sender: TObject); var pt: TPoint; begin with Sender as TSpeedButton do begin pt := Classes.Point(Left, Top + Height);; pt := Parent.ClientToScreen(pt); end; PopupMenu1.Popup(pt.X, pt.Y); end. Последний раз редактировалось DOR, 20.10.2012 в 23:42. |
#14
|
||||
|
||||
Код:
procedure TForm1.sbt_StatMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var pt: TPoint; begin sbt_Stat.Perform( BM_SETSTATE, 1, 0 ); with Sender as TButton do begin pt := Point(Left, Top + Height); pt := Parent.ClientToScreen(pt); end; PopupMenu1.Popup(pt.X, pt.Y); sbt_Stat.Perform( BM_SETSTATE, 0, 0 ); end; |
Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение: | ||
DOR (20.10.2012)
|
#15
|
|||
|
|||
Работает. Спасибо.
|