![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TPopumMenu и TButton
Danco © (2009-12-05 19:04:00)Как сделать, так что бы при нажатии на кнопку выплывало меню компонента TPopumMenu под кнопкой TButton?
kyn66 (2009-12-05 20:13:00) [1]
> Danco © (05.12.09 20:01) [9]
> //Без +7 работаетend;Этот код заработал на "Ура"!
Вот и чудненько :). В данном случае +7 - это чтобы Popup не прилипал вплотную к кнопке. А в общем, этим смещением самому можно отрегулировать желаемое растояние.
Danco (2009-12-05 20:01:00) [2]Всем спасибо!
var
Pos : TPoint;
begin
Pos := Button1.ClientOrigin;
PopupMenu1.Popup(Pos.X, Pos.y + Button1.Height ); //Без +7 работает
end;
Этот код заработал на "Ура"!
DVM (2009-12-05 19:54:00) [3]
> Danco © (05.12.09 19:38) [6]
> но если на форму поместить 2 панели и в свойстве Align у
> одной Top, а у второй Left и кнопку поместить на панель
> Left
Так с этого и надо было начинать. :)
kyn66 (2009-12-05 19:49:00) [4]Просто нужно указать конкретно смещение по Y. Как вариант:
Var
Pos : TPoint;
begin
Pos := Button1.ClientOrigin;
PopupMenu1.Popup(Pos.X, Pos.y + Button1.Height + 7);
end;
Верний левй угол PopupMenu1 получается под левым нижним углом Button1.
Danco (2009-12-05 19:38:00) [5]На пустом проекте и просто форме работает отлично, но если на форму поместить 2 панели и в свойстве Align у одной Top, а у второй Left и кнопку поместить на панель Left, то работать не будет, точнее будет, но криво. Как это обойти?
DVM (2009-12-05 19:22:00) [6]
> А возможно, что не получается из-за того что сижу на Windows
> 7?
Вряд ли, во-первых, я тоже сейчас под W7, во-вторых, и под XP оно работает нормально, я проверял. Дело в чем то другом.
Создай пустой проект, проверь на нем. Если все будет как надо, будем искать что не так в твоем рабочем проекте.
Danco (2009-12-05 19:20:00) [7]А возможно, что не получается из-за того что сижу на Windows 7?
DVM (2009-12-05 19:18:00) [8]
> Danco © (05.12.09 19:15) [2]
> Спасибо DVM, но твой код не четко работает, выплывает не
> под кнопкой, а намного выше ее.
у меня точно под кнопкой получается
Danco (2009-12-05 19:15:00) [9]Спасибо DVM, но твой код не четко работает, выплывает не под кнопкой, а намного выше ее.
Это тоже самое что
PopupMenuContacts.Popup(MainForm.Left+ButtonMenu.Left, MainForm.Top+ButtonMenu.Top);
Аналогичная ситуация :(
DVM (2009-12-05 19:11:00) [10]как то так:
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;