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 TComboBox DrawItem blinkender Cursor (https://www.delphipraxis.net/177517-tcombobox-drawitem-blinkender-cursor.html)

handson 11. Nov 2013 13:13

TComboBox DrawItem blinkender Cursor
 
Hallo!

Ich habe ich ein komisches Phänomen. Ich will einige Einträge in der TComboBox andersfarbig darstellen. Dafür habe ich Style auf csOwnerDrawVariable gesetzt und bei OnDrawtItem folgenden
Code eingebaut:

Code:

procedure TFormArtikelCopy.WGDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
Var
  aCB : TComboBox;

begin
  If (Control IS TComboBox) Then
  Begin
    aCB := TComboBox(Control);
    If TWGStatus(aCB.Items.Objects[Index]).Inaktiv Then
    Begin
      aCB.Canvas.Font.Color := clSilver;
      aCB.Canvas.Font.Style := [fsItalic];
    End Else
    Begin
      aCB.Canvas.Font.Color := clBlack;
      aCB.Canvas.Font.Style := [];
    End;
    aCB.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, aCB.Items[Index]);
  End;
end;
Das funktioniert alles super gut. Allerdings habe ich in diesem Feld keinen blinkenden
Cursor mehr. Setzte ich den Style wieder zurück, ist er wieder da.
Wie bekomme ich den mit gesetzter Style-Variable wieder hin?

Danke für Tipps schon mal im Voraus!

Stephan

Volker Z. 12. Nov 2013 00:26

AW: TComboBox DrawItem blinkender Cursor
 
Hallo,

wenn ich den Threadtitel und
Zitat:

[...] Allerdings habe ich in diesem Feld keinen blinkenden Cursor mehr. Setzte ich den Style wieder zurück, ist er wieder da.
richtig interpretiere, dann soll die Combobox sowohl editierbar sein, als auch die Elemente der Dropdownliste nach Deinen Wünschen zeichnen. :shock: Der Sinn des Ganzen erschließt sich mir zwar jetzt nicht wirklich - warum sollte ein aktiver Eintrag editierbar, ein inaktiver Eintrag nicht editierbar sein, alles vice versa, oder doch nicht(?), und wie sagst Du das dann noch dem Eingabefeld(?) - aber sei es drum.

Zitat:

Wie bekomme ich den mit gesetzter Style-Variable wieder hin?
Geht AFAIK nicht.
Eine Combobox ist nur dann editierbar, wenn Style csSimple oder csDropDown gesetzt ist. Im diesem Fall feuert die Combobox aber keine WM_DRAWITEM Message, so dass Dein Eventhandler wirkungslos bleibt.
Die Einstellung csOwnerDrawFixed bzw. csOwnerDrawVariable verhält sich - was die Editierbarkeit angeht - wie csDropDownList: definitiv keine Eingabemöglichkeit. Dafür funktioniert aber das "eigenhändige" Zeichnen der Listeneinträge - sogar super gut. :wink:

Aber vielleicht habe die Kollegen noch 'ne Idee.


Gruß

handson 12. Nov 2013 08:43

AW: TComboBox DrawItem blinkender Cursor
 
Ok, das leuchtet mir ein...

Allerdings könnte in diesem Fall auch die ComboBox ReadOnly sein, damit sie nicht editierbar ist.
Mit einem Cursor ist es aber für den Anwender einfacher. Er sieht wo er gerade steht und was er eingeben kann. Es soll halt die Suche vereinfachen.

Stephan

Volker Z. 12. Nov 2013 22:56

AW: TComboBox DrawItem blinkender Cursor
 
Hallo,

Zitat:

Allerdings könnte in diesem Fall auch die ComboBox ReadOnly sein, damit sie nicht editierbar ist.
Eine Combobox ReadOnly :?: (in welcher Delphiversion). Sorry, offensichtlich habe ich mit "editierbar" da für etwas Verwirrung gesorgt. Den "blinkenden Cursor" (das Ding heißt übrigens caret) gibt es nur, wenn der Style auf csSimple oder csDropDown eingestellt ist. Für die anderen Werte der Eigenschaft Style gilt: Keine Eingabemöglichkeit, also auch kein Caret und per se ReadOnly :wink:. Nur die beiden Werte csOwnerDrawFixed und csOwnerDrawVariable (nomen est omen) für die Eigenschaft Style lassen das eigenständige Zeichnen der Listeneinträge zu.

Das ganze nochmals kurz: caret in der Combobox und Listeneinträge selbst zeichnen geht AFAIK nicht.

Gruß

handson 14. Nov 2013 11:25

AW: TComboBox DrawItem blinkender Cursor
 
Schade, schade... :( Wäre auch zu schön um wahr zu sein.

Trotzdem danke für die Info.

Stephan


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