Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.10.2012, 22:02
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию Кнопка с выпадающим меню

На просторах инета как то находил код. он определял координаты буттона и под ним выводил ПопупМеню. Если кто сталкивался с таким, напишите пжл код или дайте ссылся. Спасибо.
Ответить с цитированием
  #2  
Старый 20.10.2012, 22:07
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от DOR
На просторах инета как то находил код. он определял координаты буттона и под ним выводил ПопупМеню. Если кто сталкивался с таким, напишите пжл код или дайте ссылся. Спасибо.
Примерно так:
Код:
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  
Старый 20.10.2012, 22:10
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от poli-smen
Примерно так:
Код:
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;
Код:
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  
Старый 20.10.2012, 22:38
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию

Код:
pt: TPoint;
а что это означает?
ругается на
Код:
pt := Point(Left, Top + Height);

Последний раз редактировалось DOR, 20.10.2012 в 22:41.
Ответить с цитированием
  #5  
Старый 20.10.2012, 22:43
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ну раз обработчик принадлежит кнопке, то можно и без Sender-а обойтись, прямым указанием. Правда так будет удобно, если один обработчик принадлежит туевой хуче кнопок.

Это переменная, открой справку и прочитай про TPoint.

Не подключен SysUtils в uses.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #6  
Старый 20.10.2012, 22:46
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Цитата:
Сообщение от angvelem
Ну раз обработчик принадлежит кнопке
Цитата:
procedure TForm1.
Метод обьекта формы, self указывает на форму.

Point - функция из модуля Classes
Ответить с цитированием
  #7  
Старый 20.10.2012, 22:52
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Ну раз обработчик принадлежит кнопке, то можно и без Sender-а обойтись, прямым указанием. Правда так будет удобно, если один обработчик принадлежит туевой хуче кнопок.

Это переменная, открой справку и прочитай про TPoint.

Не подключен SysUtils в uses.

SysUtils подключен.
Ответить с цитированием
  #8  
Старый 20.10.2012, 22:53
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Да-да, что то я про принадлежность Point не то ляпнул.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #9  
Старый 20.10.2012, 22:56
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Если не подключен Classes то подключи, иначе, мб., пиши
Код:
pt := Classes.Point(Left, Top + Height);
Ответить с цитированием
Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение:
DOR (20.10.2012)
  #10  
Старый 20.10.2012, 22:58
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию

Код:
pt := Classes.Point(Left, Top + Height);
помогло. Большое спасибо всем кто откликнулся.
Ответить с цитированием
  #11  
Старый 20.10.2012, 23:27
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию

а можно чтобы срабатывало не по клику, а при наведении на кнопку мыши.
Ответить с цитированием
  #12  
Старый 20.10.2012, 23:32
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Если есть у кнопки событие OnMouseEnter - то легко. Если же нет, то в OnMouseMove, но с некоторыми дополнительными условиями.
Ответить с цитированием
  #13  
Старый 20.10.2012, 23:37
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию

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  
Старый 20.10.2012, 23:46
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Код:
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;
В OnMouseMove.
Ответить с цитированием
Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение:
DOR (20.10.2012)
  #15  
Старый 20.10.2012, 23:50
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию

Работает. Спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:17.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter