![]() |
Item aus ComboBox ausgrauen (deaktivieren) ...
hi,
ich möchte nach einem click auf ein element meiner combobox dieses in der liste lassen jedoch ausgegraut also sowas wie: combobox1.item[x].enabled:=false; wie kann ich sowas machen ? |
Re: Item aus ComboBox ausgrauen (deaktivieren) ...
Wirst du wohl selber zeichnen müssen. Wie das geht, findest du hier im Forum.
|
Re: Item aus ComboBox ausgrauen (deaktivieren) ...
selber ZEICHNEN reicht nicht .. du musst der aufgeklappten Liste eine neue Windows-Prozedur verpassen, in der Du dann prüfen kannst, ob beim Klick der aktuelle Eintrag evtl disabled ist.
Dazu musst Du folgendes machen. 1. ListHandle Property überschreiben und dein eigenes Handle zurückgeben, bzw die eigene Set-Methode rufen 2. Im Konstruktor mit
Delphi-Quellcode:
einen Zeiger auf deine eigene ListWindowProc geben lassen (geht aber nicht im .net!)->member der Klasse
pListInstance := MakeObjectInstance(ListWndProc);
3. Im SetListHandle mit
Delphi-Quellcode:
die ursprüngliche WindowProc in ner Membervariable speichern(das übergebene HWND auch) und mit
pDefListProc := Pointer(GetWindowLong(hListHandle, GWL_WNDPROC));
Delphi-Quellcode:
deine eigene WindowProc dem Listhandle zuweisen.
SetWindowLong(hListHandle, GWL_WNDPROC, Longint(pListInstance));
4. jetzt endlich kannst Du in Deiner eigenen ListWindowProc prüfen, ob der Klick zufällig auf ein disabled eintrag fällt. In diesem Fall wirfst Du die Nachricht einfach weg, anderenfalls rufst du die DefListProc mit
Delphi-Quellcode:
auf.
Result := CallWindowProc(pDefListProc, ListHandle, Msg, WParam, LParam);
selber Zeichnen musst du aber trotzdem in ner überschriebenen DrawItem |
Re: Item aus ComboBox ausgrauen (deaktivieren) ...
hmm weiss nicht genau ob ich da noch ne eigene windows prozedur brauche, da meine combobox ein erweitertes objekt (um 2 eigenschaften ListeAlle und ListeDeaktiv) ist wollt ich eigentlich jedesmal in dem OnDraw Ereignis einfach nur das aktuelle element mit der ListeDeaktiv vergleichen und bei Übereinstimmung halt Combobox1.Canvas.Font.Color := clBlue; z.B.
|
Re: Item aus ComboBox ausgrauen (deaktivieren) ...
Ja aber auswählen kann ers trotzdem, bzw. die Liste klappt trotzdem zu. Wenn Du das verhindern willst, dann bleibt Dir nix anderes übrig. Wenns Dir allerdings egal ist, dass dann trotzdem die Liste zuklappt, dann kannst Du Dir das ganze sparen. In dem Fall musst Du Dir aber den ItemIndex vor dem Aufklappen merken und im Falle eines disabled Eintrags wieder zurücksetzen (Im DoClose, OnClose von aussen ist imho zu spät weil evtl das OnChange dann 2x gerufen wird).
[edit]ich würd dir ja gerne mal den Code von meiner Lösung zuschicken, ist aber lizensiert und darf als quelle nicht raus[/edit] |
Re: Item aus ComboBox ausgrauen (deaktivieren) ...
das ist schon ok dass man das dann noch auswählen kann und dass die CB dann zu geht, trotzdem danke für die ausführliche anleitung, viell. brauch ichs ja doch noch.
{man hab ich durscht, gut das heute freitag und in nicht allzuweiter ferne feierabend ist :cheers: } |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz