AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PopupMenu - Item vorselektieren

Ein Thema von eholzer · begonnen am 17. Dez 2013 · letzter Beitrag vom 17. Dez 2013
Antwort Antwort
Seite 1 von 2  1 2      
eholzer

Registriert seit: 22. Okt 2009
51 Beiträge
 
#1

PopupMenu - Item vorselektieren

  Alt 17. Dez 2013, 07:29
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
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#2

AW: PopupMenu - Item vorselektieren

  Alt 17. Dez 2013, 07:38
Nicht daß ich wüßte. Du könntest aber den Mauszeiger im Ereignis OnPopUp auf einen bestimmten Eintrag verschieben.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.167 Beiträge
 
Delphi 12 Athens
 
#3

AW: PopupMenu - Item vorselektieren

  Alt 17. Dez 2013, 07:51
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (17. Dez 2013 um 07:54 Uhr)
  Mit Zitat antworten Zitat
Gerd01

Registriert seit: 18. Mär 2005
Ort: NRW
117 Beiträge
 
Delphi XE2 Professional
 
#4

AW: PopupMenu - Item vorselektieren

  Alt 17. Dez 2013, 07:52
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;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.167 Beiträge
 
Delphi 12 Athens
 
#5

AW: PopupMenu - Item vorselektieren

  Alt 17. Dez 2013, 08:04
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
eholzer

Registriert seit: 22. Okt 2009
51 Beiträge
 
#6

AW: PopupMenu - Item vorselektieren

  Alt 17. Dez 2013, 08:31
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?
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.594 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: PopupMenu - Item vorselektieren

  Alt 17. Dez 2013, 08:33
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)););
Sven Harazim
--
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: PopupMenu - Item vorselektieren

  Alt 17. Dez 2013, 08:35
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;
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
eholzer

Registriert seit: 22. Okt 2009
51 Beiträge
 
#9

AW: PopupMenu - Item vorselektieren

  Alt 17. Dez 2013, 09:01
Danke "baumina", damit komme ich klar.

Eric
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#10

AW: PopupMenu - Item vorselektieren

  Alt 17. Dez 2013, 09:16
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:27 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