Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо