Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   MenuItem selektieren (https://www.delphipraxis.net/175978-menuitem-selektieren.html)

blablab 4. Aug 2013 14:33


MenuItem selektieren
 
Hallo!

Gibt es eine Möglichkeit zB. bei PopupMenu.Popup() das erste MenuItem des Popups zu selektieren(, also zu erreichen, dass es blau hinterlegt ist)?

Grüße
blablab

Volker Z. 4. Aug 2013 22:23

AW: MenuItem selektieren
 
Hallo,

suchst Du vielleicht etwas in der Art (TButton und TPopupMenu auf das Formular legen und ein paar Menüeinträge anlegen):
Delphi-Quellcode:
interface

type
  TForm1 = class(TForm)
    [...]
    procedure Button1Click(Sender: TObject);
    procedure PopupMenu1Popup(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    FSelected : TMenuItem;
    procedure OnItemClick (Sender : TObject);
    procedure OnItemDraw (Sender : TObject; ACanvas : TCanvas; ARect : TRect; Selected : Boolean);
  public
    { Public-Deklarationen }
  end;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  p : TPoint;
begin
  p := ClientToScreen (Point (Button1.Left + 1, Button1.Top + Button1.Height));
  PopupMenu1.Popup (p.X, p.Y)
end;

procedure TForm1.PopupMenu1Popup(Sender: TObject);
var
  m : TMenuItem;
begin
  m := PopupMenu1.Items.Find (Button1.Caption);
  if Assigned (m) then
    begin
      if FSelected = m then
        Exit;

      m.OnDrawItem := OnItemDraw;

      if Assigned (FSelected) then
        FSelected.OnDrawItem := nil;

      FSelected := m
    end
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i : Integer;
begin
  PopupMenu1.OwnerDraw := True;
  for i := 0 to PopupMenu1.Items.Count - 1 do
    PopupMenu1.Items [i].OnClick := OnItemClick;

  FSelected := nil
end;

procedure TForm1.OnItemClick (Sender : TObject);
begin
  if not (Sender is TMenuItem) then
    Exit;

  Button1.Caption := (Sender as TMenuItem).Caption
end;

procedure TForm1.OnItemDraw (Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean);
var
  m : TMenuItem;
begin
  if not (Sender is TMenuItem) then
    Exit;

  m := (Sender as TMenuItem);
  try
    m.OnDrawItem := nil;
    DrawMenuItem (m, ACanvas, ARect, [odSelected, odFocused, odNoAccel])
  finally
    m.OnDrawItem := OnItemDraw
  end
end;
Gruß

blablab 5. Aug 2013 03:00

AW: MenuItem selektieren
 
Ich benutze jetzt keybd_event. Wenn ich zB möchte dass das 5. MenuItem (also mit dem MenuIndex 4) selektiert ist muss ich 5 mal "Pfeil-nach-unten" drücken und dementsprechend rufe ich 5 mal keybd_event (je keydown+keyup) auf.
Was besseres ist mir leider nicht eingefallen, aber wenigstens funktionierts...


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz