![]() |
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 |
AW: PopupMenu - Item vorselektieren
Nicht daß ich wüßte. Du könntest aber den Mauszeiger im Ereignis OnPopUp auf einen bestimmten Eintrag verschieben.
|
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 |
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; |
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. |
AW: PopupMenu - Item vorselektieren
Zitat:
|
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));); |
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; |
AW: PopupMenu - Item vorselektieren
Danke "baumina", damit komme ich klar.
Eric |
AW: PopupMenu - Item vorselektieren
Zitat:
|
AW: PopupMenu - Item vorselektieren
Eintrag vorselektieren ist genauso Quark. Wenn der Benutzer mit der Maus rumfummelt, ist der markierte Eintrag ratz fatz wieder weg.
Hier ist vielleicht die Wahl einer andere Auswahlform notwendig - kein PopUp-Menü..evtl TaskDialog? |
AW: PopupMenu - Item vorselektieren
Haken: Du nimmst dem Benutzer die Kontrolle über sein Eingabegerät.
Stell dir mal vor jemand verschiebt ständig deinen Mauszeiger oder die Tastatur tippt ständig automatisch irgendwelche Buchstaben, oder deine Maus reagiert kaum noch und vergisst öfters deine Befehle .... so kann doch keiner arbeiten. PS: Es gibt auch Viren/Scherzprogramme welche den Mauszeiger oder Buttons verschieben ... was natürlich verärgern soll. PPS: Manche Maustreiber haben auch eine Option "Springe zum Default-Button" von Dialogen ... das hatte ich einmal an, weil es "gut" klang, aber dafür ich suchte auch ständig den Mauszeiger. @sh17: Im Prinzip braucht man für die "Standard"-Aktion die Maus nicht zu begewen, sondern klickt gleich nochmal. Aber da reicht es das Popup um je 5 Pixel nach oben-links zu bewegen (nur, solange es nach unten rechts genug Platz hatte) und legt die Standardaktion auf die erste Zeile. |
AW: PopupMenu - Item vorselektieren
Zitat:
Zitat:
Zitat:
Vielleicht solltest du besser den TE darüber befragen oder aufklären, wie sinnvoll oder sinnlos sein Unterfangen ist? Ich bin dafür die falsche Adresse, denn ich würde sowas nicht in mein Programm einbauen, außer der Auftraggeber wünscht das ausdrücklich. Aber darum ging's ja auch gar nicht, sondern um die Frage, wie man das realisieren könnte. |
AW: PopupMenu - Item vorselektieren
Sagen wir es mal so, du nimmst ihm zumindestens nicht die Kontrolle über sein Eingabegerät
und das Popup ist sowieso nicht immer unten-rechts. Darum auch der Vorschlag mit dem ersten Eintrag und die nur kleine Verschiebung des Menüs. (wenn das menü nach oben aufpoppt müsste es zwar theoretisch der letze Eintrag sein, aber das Menü ständig umzusortieren ist ebenfalls nicht sonderlich schön) |
AW: PopupMenu - Item vorselektieren
Zitat:
Eric |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:33 Uhr. |
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