Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Öffne Popupmenu, wenn Bedingung erfüllt
krampi - Mo 14.01.08 15:43
Titel: Öffne Popupmenu, wenn Bedingung erfüllt
Hallo gemeinde,
hier bin ich mal wieder, mal wieder mit einem Problemchen.
Folgendes Problem: Ein Popupmenufenster soll erst dann aufgerufen werden, wenn in der Listbox ein Eintrag selektiert ist. Das Popupfenster würde per Rechtsklick ausgelöst. Ist nichts markiert, so darf nichts geschehen.
Derzeit sieht der Code so aus - ist noch zerfleddert, da ich bis eben noch dachte, ich würd was gescheihtes hinrkeigen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var point:Tpoint; i:integer; b:Form1.ListBox1.Selected:=ItemIndex(i);
begin if Button=mbRight AND b Then
begin GetCursorPos(point); PopupMenu3.Popup(point.X, point.Y);; end; end; |
Ich bin für jede Hilfe dankbar. Sicher bin ich mir ja, dass ich mit "if" arbeiten muss und ich ja auch die Form1.ListBox1.Selected durch eine Variable deklarieren muss. Aber was mache ich falsch?
Vielen Dank.
grüße,
krampi
Moderiert von
Gausi: Topic aus Sonstiges (Delphi) verschoben am Mo 14.01.2008 um 17:23
Blackheart666 - Mo 14.01.08 16:00
Delphi-Quelltext
1: 2:
| i:=ListBox.ItemIndex if ListBox.Selected[i] then... |
jakobwenzel - Mo 14.01.08 16:15
Hö? Wenn nichts selektiert ist, ist der ItemIndex immer -1. Das kann man auch in einer If-Bedingung testen.
FSS - Mo 14.01.08 16:37
Habe es jetzt nicht getestet aber eigentlich müsste folgendes klappen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| if (Button=mbRight) AND (b > -1) Then begin GetCursorPos(point); PopupMenu3.Popup(point.X, point.Y);; end; |
bzw.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| begin if Button=mbRight) AND (Form1.ListBox1.ItemIndex > -1) Then begin GetCursorPos(point); PopupMenu3.Popup(point.X, point.Y);; end; |
Dann bräuchte man die Variable b gar nicht (zumindest nicht an dieser Stelle).
Lannes - Mo 14.01.08 18:17
Hallo,
schau Dir mal ListBox.ItemAtPos an, damit kannst Du ermitteln ob ein Item und wenn, welches Item sich an der Mausposition befindet.
Gausi - Mo 14.01.08 18:22
Ich erläutere mal nen anderen Ansatz: Das Popup-Menü hat das Event OnPopup (oder so ähnlich). Das wird aufgerufen, wenn das Ding geöffnet wird (und wenn ggf. eine Hotkey-Kombo gedrückt wird).
In diesem Event kannst du dann z.B. einzelne Menüeinträge (de-)aktivieren. Das dürfte für den User transparenter sein als kein Menü, wenn kein Item markiert ist.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!