Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Wie bestimmte ComboBox-Einträge disablen? (https://www.delphipraxis.net/75060-wie-bestimmte-combobox-eintraege-disablen.html)

PeterPanino 13. Aug 2006 17:40


Wie bestimmte ComboBox-Einträge disablen?
 
Hallo,

ich möchte bestimmte Einträge einer ComboBox disablen. Ich habe das auf 2 Arten versucht, die aber beide nicht zum Ziel geführt haben:

1. Setzen von TOwnerDrawState im OnDrawItem-Event:
Delphi-Quellcode:
Include(State, odDisabled);
Ergebnis: Keine sichtbare Veränderung, wohl weil State kein var(rückgabe)-Parameter ist

2. Fontfarbe im OnDrawItem-Event grau zeichnen, damit es wie disabled aussieht:
Delphi-Quellcode:
with TComboBox(Control) do
  Canvas.Font.Color := clGray;
  //usw.
Ergebnis: Graue Schrift funktioniert, aber wie kann ich den Eintrag effektiv disablen, sodass ein Klick auf diesen Eintrag nicht weitergegeben wird?

_frank_ 13. Aug 2006 18:07

Re: Wie bestimmte ComboBox-Einträge disablen?
 
hi,
woher weist die combobox, welche einträge sie disablen soll?
ich würde es evtl so machen...

setzen, welche einträge deaktiviert sind (gibt evtl bessere varianten)...
Delphi-Quellcode:
  combobox1.Items.Objects[0]:=TObject(0);//disabled
  combobox1.Items.Objects[1]:=TObject(1);//enabled
  combobox1.Items.Objects[2]:=TObject(0);//disabled
  ...
im onchange das ausgewählte prüfen und bei deaktiviert zum zuletzt ausgewählten zurückspringen

Delphi-Quellcode:
if combobox1.Items.Objects[combobox1.itemindex]=TObject(0) then
begin
  showmessage('disabled');
  combobox1.itemindex:=oldindex;
end else oldindex:=combobox1.itemindex;
HTH Frank

PeterPanino 13. Aug 2006 19:07

Re: Wie bestimmte ComboBox-Einträge disablen?
 
Zitat:

Zitat von _frank_
hi,
woher weist die combobox, welche einträge sie disablen soll?

Das mache ich im OnDrawItem-Event, wenn bestimmte Bedingungen zutreffen.

Zitat:

Zitat von _frank_
ich würde es evtl so machen...

setzen, welche einträge deaktiviert sind (gibt evtl bessere varianten)...
Delphi-Quellcode:
  combobox1.Items.Objects[0]:=TObject(0);//disabled
  combobox1.Items.Objects[1]:=TObject(1);//enabled
  combobox1.Items.Objects[2]:=TObject(0);//disabled
  ...

Danke, ist eine gute Idee, werde es im OnDrawItem-Event machen ...

Zitat:

Zitat von _frank_
im onchange das ausgewählte prüfen und bei deaktiviert zum zuletzt ausgewählten zurückspringen

Delphi-Quellcode:
if combobox1.Items.Objects[combobox1.itemindex]=TObject(0) then
begin
  showmessage('disabled');
  combobox1.itemindex:=oldindex;
end else oldindex:=combobox1.itemindex;

Hm, ich möchte das so machen, dass bei einem Klick auf ein disabled-Item gar nichts passiert (so wie bei einem Disabled-Item in einem Menü). Ich habe folgendes versucht, aber ich bin da noch nicht ganz durch:

Delphi-Quellcode:
//Im OnSelect-Event der ComboBox:
ComboBox.DroppedDown := True;
Ich weiß noch nicht, wie ich im OnSelect-Event abfragen kann, welches Item angeklickt wurde, da ItemIndex zu diesem Zeitpunkt noch nicht auf das angeklickte Item verweist und auch ComboBox.Text noch nicht upgedatet ist.

PeterPanino 13. Aug 2006 20:10

Re: Wie bestimmte ComboBox-Einträge disablen?
 
Furchtbare Entdeckung: Weder in ComboBox.OnChange noch in ComboBox.OnSelect kann man ComboBox.Text einen Wert zuweisen!! (D.h. man kann schon, aber er wird nicht angezeigt, sondern immer nur das angeklickte Item). Somit scheint es nicht möglich zu sein, ComboBox.Text zurückzusetzen, um ein Item als disabled zu simulieren!

Wer weiß einen Ausweg?

PeterPanino 14. Aug 2006 09:43

Re: Wie bestimmte ComboBox-Einträge disablen?
 
Die perfekte Simulation von disabled-Items in einer ComboBox scheint nicht möglich zu sein. Bliebe nur noch der Ausweg, statt der ComboBox-DropDown-Liste ein Popup-Menü anzuzeigen. Wer weiß zufällig, wie man das Herunterklappen der ComboBox-DropDown-Liste beim Anklicken der ComboBox verhindern kann?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:30 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