Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   PopupMenu - Item vorselektieren (https://www.delphipraxis.net/178089-popupmenu-item-vorselektieren.html)

eholzer 17. Dez 2013 07:29

PopupMenu - Item vorselektieren
 
Hallo,

gibt es eine Möglichkeit bei einem Popupmenu ein Element vorzuselektieren.
Wenn man ein Popupmenu öffnet ist noch kein Element markiert. Man muss mit Pfeiltasten ein Element zuerst auswählen. Ich würde gerne gleich beim Öffnen ein Element markieren.

Gruß
Eric

Perlsau 17. Dez 2013 07:38

AW: PopupMenu - Item vorselektieren
 
Nicht daß ich wüßte. Du könntest aber den Mauszeiger im Ereignis OnPopUp auf einen bestimmten Eintrag verschieben.

himitsu 17. Dez 2013 07:51

AW: PopupMenu - Item vorselektieren
 
Die Maus verschieben ist eigentlich keine so optimale Idee,
aber was praktisch auf's Selbe rauskommt, wäre die Position des Popups entsprechend zu positionieren.

Das kennt man z.B. von einigen ComboBoxen, wo das Popup so verschoben wird, daß der aktuelle Eintrag unter der Maus landet.

Also, anstatt die Maus zu verschieben, einfach das Popup selber öffnen und dessen Position verschieben.




Das Problem ist aber erstmal rauszubekommen, wo im Popup dann der gewünschte Eintrag steht.





OK, nach dem anzeigen des Popups, könnte man versuchen die Tastendrücke zu simulieren, aber das hilft nur, wenn man das Popup via Tastatur bedient,
da die Maus sonst sofort die Selektion wieder verändert, wenn man sie bewegt.
> z.B. mit der KontextMenü-Taste öffnen und via Enter den selektierten Eintrag ausführen

Gerd01 17. Dez 2013 07:52

AW: PopupMenu - Item vorselektieren
 
Ich mache es so:

Code:
    for I := 0 to PMHighlight.Items.Count - 1 do
      PMHighlight.Items[I].Checked := false;
    I := ..hier Auswahl
    if ((I > 0) and (I < PMHighlight.Items.Count)) then
      PMHighlight.Items[I].Checked := True;

himitsu 17. Dez 2013 08:04

AW: PopupMenu - Item vorselektieren
 
Moin,

was hat Checked (das kleine Häkchen/Pünktchen) mit der Selektierung zu tun?

Egal ob und was wie bei Checked gesetzt ist, der Eintrag, dessen Klick-Methode ausgeführt wird, ist vollkommen unabhängig davon.

eholzer 17. Dez 2013 08:31

AW: PopupMenu - Item vorselektieren
 
Zitat:

OK, nach dem anzeigen des Popups, könnte man versuchen die Tastendrücke zu simulieren
Das wäre auch meine Idee, aber wie könnte man das machen?

sh17 17. Dez 2013 08:33

AW: PopupMenu - Item vorselektieren
 
Auf die eigenen Bedürfnisse anpassen, um das Popupfenster mit dem Eintrag entsprechend zu verschieben.

Wobei _DefaultItems die normalen Einträge eines PopupMenus sind

Delphi-Quellcode:
class function GetPopupHeight(_DefaultItems : Integer; _DrawedItems : Integer = 0; _DrawedHintItems : Integer = 0; _Lines : Integer = 0; _DrawedLines : Integer = 0) : Integer;
var
  i : Integer;
begin
  if not IsWinVista then
  begin
    if _DrawedHintItems > 0 then
      i := 6
    else
      i := 5;
    Result := i +
              ((_DefaultItems   * 19)+
              (_DrawedItems    * 23)+
              (_DrawedHintItems * 40)+
              (_Lines          * 8)+
              (_DrawedLines    * 4))*Screen.PixelsPerInch div 96;
  end else begin
    if _DrawedHintItems > 0 then
      i := 6
    else
      i := 5;
    Result := i +
              ((_DefaultItems * 19)+
              (_DrawedItems * 26)+
              (_DrawedHintItems * 45)+
              (_Lines * 8)+
              (_DrawedLines * 4)*Screen.PixelsPerInch div 96);
  end;
end;


var
  p : TPoint;
begin
  p := Panel.ClientToScreen(Point(button.Left,button.Top));
  pm.Popup(p.X,p.Y-GetPopupHeight(5)););

baumina 17. Dez 2013 08:35

AW: PopupMenu - Item vorselektieren
 
So in dieser Art:

Delphi-Quellcode:
procedure TForm1.PopupMenu1Popup(Sender: TObject);
var
  Scan: Cardinal;
  i: Integer;

begin
  Scan := MapVirtualKey(VK_DOWN, 0);
  for i := 1 to 5 do
  begin
    keybd_event(VK_DOWN, Scan, 0, 0);
    keybd_event(VK_DOWN, Scan, KEYEVENTF_KEYUP, 0);
  end;
end;

eholzer 17. Dez 2013 09:01

AW: PopupMenu - Item vorselektieren
 
Danke "baumina", damit komme ich klar.

Eric

Perlsau 17. Dez 2013 09:16

AW: PopupMenu - Item vorselektieren
 
Zitat:

Zitat von himitsu (Beitrag 1240064)
Die Maus verschieben ist eigentlich keine so optimale Idee, aber was praktisch auf's Selbe rauskommt, wäre die Position des Popups entsprechend zu positionieren.

Wenn's praktisch auf's selbe hinausläuft, wo läge dann der Haken beim Verschieben des Mauszeigers? Zumindest liefe man dann nicht Gefahr, daß Teile des Pop-Upmenüs außerhalb des Screen-Bereichs landen. Die Position des gewünschten PopUp-Eintrags mu man natürlich bei beiden Versionen selbst ermitteln.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:00 Uhr.
Seite 1 von 2  1 2      

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