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 user profile iconGausi: 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.