Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.24;
Скачать: CL | DM;

Вниз

TPopumMenu и TButton   Найти похожие ветки 

 
Danco ©   (2009-12-05 19:04) [0]

Как сделать, так что бы при нажатии на кнопку выплывало меню компонента TPopumMenu под кнопкой TButton?


 
DVM ©   (2009-12-05 19:11) [1]

как то так:

procedure TForm1.Button1Click(Sender: TObject);
var
 pt: TPoint;
begin
 SendMessage(Button1.Handle, BM_SETSTATE, BST_PUSHED, 0);
 pt := ClientToScreen(Point(Button1.BoundsRect.Left, Button1.BoundsRect.Bottom));
 PopupMenu1.Popup(pt.X, pt.Y);
 SendMessage(Button1.Handle, BM_SETSTATE, 0, 0);
end;


 
Danco ©   (2009-12-05 19:15) [2]

Спасибо DVM, но твой код не четко работает, выплывает не под кнопкой, а намного выше ее.

Это тоже самое что

PopupMenuContacts.Popup(MainForm.Left+ButtonMenu.Left, MainForm.Top+ButtonMenu.Top);

Аналогичная ситуация :(


 
DVM ©   (2009-12-05 19:18) [3]


> Danco ©   (05.12.09 19:15) [2]


> Спасибо DVM, но твой код не четко работает, выплывает не
> под кнопкой, а намного выше ее.

у меня точно под кнопкой получается


 
Danco ©   (2009-12-05 19:20) [4]

А возможно, что не получается из-за того что сижу на Windows 7?


 
DVM ©   (2009-12-05 19:22) [5]


> А возможно, что не получается из-за того что сижу на Windows
> 7?

Вряд ли, во-первых, я тоже сейчас под W7, во-вторых, и под XP оно работает нормально, я проверял. Дело в чем то другом.

Создай пустой проект, проверь на нем. Если все будет как надо, будем искать что не так в твоем рабочем проекте.


 
Danco ©   (2009-12-05 19:38) [6]

На пустом проекте и просто форме работает отлично, но если на форму поместить 2 панели и в свойстве Align у одной Top, а у второй Left и кнопку поместить на панель Left, то работать не будет, точнее будет, но криво. Как это обойти?


 
kyn66 ©   (2009-12-05 19:49) [7]

Просто нужно указать конкретно смещение по Y. Как вариант:

Var
 Pos  : TPoint;
begin
  Pos := Button1.ClientOrigin;
  PopupMenu1.Popup(Pos.X, Pos.y + Button1.Height + 7);
end;

Верний левй угол PopupMenu1 получается под левым нижним углом Button1.


 
DVM ©   (2009-12-05 19:54) [8]


> Danco ©   (05.12.09 19:38) [6]


> но если на форму поместить 2 панели и в свойстве Align у
> одной Top, а у второй Left и кнопку поместить на панель
> Left

Так с этого и надо было начинать. :)


 
Danco ©   (2009-12-05 20:01) [9]

Всем спасибо!

var
Pos  : TPoint;
begin
 Pos := Button1.ClientOrigin;
 PopupMenu1.Popup(Pos.X, Pos.y + Button1.Height ); //Без +7 работает
end;


Этот код заработал на "Ура"!


 
kyn66 ©   (2009-12-05 20:13) [10]


> Danco ©   (05.12.09 20:01) [9]
> //Без +7 работаетend;Этот код заработал на "Ура"!

Вот и чудненько :). В данном случае +7 - это чтобы Popup не прилипал  вплотную к кнопке. А в общем, этим смещением самому можно отрегулировать желаемое растояние.



Страницы: 1 вся ветка

Текущий архив: 2010.01.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.007 c
15-1258288584
GrayFace
2009-11-15 15:36
2010.01.24
К теме "Убойная статистика"


15-1258639913
@!!ex
2009-11-19 17:11
2010.01.24
Подскажите головоломок не слишком сложных


4-1206528449
SpellCaster
2008-03-26 13:47
2010.01.24
Заюзать метод класса как WindowProc


1-1233798973
ply
2009-02-05 04:56
2010.01.24
Разная процедура для каждой формы.. как?


8-1202666850
WeReWoLf
2008-02-10 21:07
2010.01.24
Что сделать чтобы DELPHI нарисовала график?