Delphi Custom всплывающее окно / раскрывающийся список, как? - PullRequest
2 голосов
/ 08 июня 2010

Я хочу создать собственное выпадающее / выпадающее меню с тенью под ним. Проблема в том, что это не стандартное меню, и мне нужно поместить некоторые компоненты во всплывающее окно / раскрывающийся список. В общем, я хочу выпадающий список, с которым я могу делать все, что захочу, не ограничиваясь простыми пунктами меню. Я хочу, чтобы он действовал как обычная проблема в popupmenu - с чего мне начать. Любые решения? Список литературы?

Ответы [ 3 ]

4 голосов
/ 10 июня 2010

Похоже, вам нужна форма, которая выглядит как всплывающее меню, но содержит компоненты.

Проще, если у вас есть компонент, у которого есть событие OnMouseDown, такое как TPanel, показанный в этом примере, и вы просто всплываете вторую форму, которая содержит элементы управления, которые вы хотите открыть:

procedure TForm3.JvPanel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button=mbRight then
        FDown := true
  else
        FDown := false;
end;

procedure TForm3.JvPanel1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  pt:TPoint;
begin
  if Button=mbRight then begin
        FDown := true;
        pt.X := jvPanel1.Left;
        pt.Y := jvPanel1.Top+jvPanel1.Height;


        pt := ClientToScreen(pt);
        Form4.Position := poDesigned;
        Form4.BorderStyle := bsNone;
        Form4.Left := pt.X;
        Form4.Top := pt.Y;
        Form4.Show;
  end;

end;

Это обрабатывает форму, показывая себя и позиционируя себя как всплывающее окно. вторая форма, скрывающая себя, тоже легка:

procedure TForm4.FormDeactivate(Sender: TObject);
begin
 Hide;
end;

альтернативный текст http://img718.imageshack.us/img718/8171/formlookslikepopup.png

4 голосов
/ 08 июня 2010

Вы можете использовать TPopupMenu и предоставить собственный чертеж. Это делается установкой

PopupMenu1.OwnerDraw := True;

Затем введите событие OnMeasureItem() или OnAdvancedDrawItem(), чтобы определить размер, необходимый для пользовательской картины. Затем закодируйте OnDrawItem() Событие, чтобы нарисовать холст по желанию.

0 голосов
/ 22 августа 2010

Что бы это ни стоило, аспект всплывающей тени во всплывающем окне теперь решен и решен в этом вопросе .

...