Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - ComboBox und Popup Klick nicht ausführen


patmann2001 - Di 26.11.02 14:35
Titel: ComboBox und Popup Klick nicht ausführen
Hallo
Ich habe eine Combobox und daran ein Popup Menü angeschlossen, wenn ich jetzt eine Zeile markiere und dann auf die rechte Maustaste drücke, dann soll vor dem "Aufpopen" überprüft ob eine Auswahl getroffen wurde, sprich ob ItemIndex > -1 ist, dann soll das Menü auch sichtbar werden, wenn aber kein Eintrag ausgewählt wurde, dann sende ich eine MessageDLG ab um den Benutzer darauf aufmerksam zu machen, das er einen Eintrag auswählen muss, trozdem wird jetzt das Menü sichtbar und das soll dann nicht passieren, wie unterbinde ich das jetzt?

cu Patmann


a.C.k - Di 26.11.02 15:16

Probiere mal etwas in der art...


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure Form1.ComboBox1ContextPopup(Sender: TObject;
  MousePos: TPoint; var Handled: Boolean);
begin
  ComboBox1.PopupMenu := PopupMenu1;
  if ComboBox1.Text = '' then
    begin
    ShowMessage('blabla');
    ComboBox1.PopupMenu := NIL;
    end;
end;


so könnte es klappen, glaube ich.


patmann2001 - Di 26.11.02 18:15

Äh nein, leider nicht :roll:
Das Menü wird dann trozdem Angezeigt, doch will man dann anschließend wieder das Menü aufrufen, dann erscheint es garnicht mehr.
Also ich bin jetzt hingegangen und setze alle Einträge im Menü auf Visible := false. Dann erscheint das Menü auch nicht, und bevor ich die Prüfung mache, ob ein Eintrag gewählt wurde, setzte ich alle Einträge im Menü auf Visible := true. So klappts sieht nur ein bisschen doof aus.

cu Patmann


Keldorn - Di 26.11.02 19:37

Hallo,

eine andere Variante wäre:
autopopup des Menus auf false zu stellen und das Menu selber nach der Abfrage mit popup(x,y) erscheinen zu lassen.
Dazu müßte man aber ein Mousedown-ereignis bei der Combobox abfragen können. Ich hab jetzt hier nur Delphi3 und da gibt klein onMousedown bei der Combobox :cry: .
Oder du setzt autopopup im onchange-ereignis erst auf true, wenn die von dir gewünschte Sache eintritt.

Mfg Frank