AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TComboBox DrawItem blinkender Cursor

Ein Thema von handson · begonnen am 11. Nov 2013 · letzter Beitrag vom 14. Nov 2013
Antwort Antwort
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#1

TComboBox DrawItem blinkender Cursor

  Alt 11. Nov 2013, 14:13
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
Stephan Faust
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#2

AW: TComboBox DrawItem blinkender Cursor

  Alt 12. Nov 2013, 01:26
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. 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.

Aber vielleicht habe die Kollegen noch 'ne Idee.


Gruß
Volker Zeller
  Mit Zitat antworten Zitat
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#3

AW: TComboBox DrawItem blinkender Cursor

  Alt 12. Nov 2013, 09:43
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
Stephan Faust
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#4

AW: TComboBox DrawItem blinkender Cursor

  Alt 12. Nov 2013, 23:56
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 . 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ß
Volker Zeller
  Mit Zitat antworten Zitat
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#5

AW: TComboBox DrawItem blinkender Cursor

  Alt 14. Nov 2013, 12:25
Schade, schade... Wäre auch zu schön um wahr zu sein.

Trotzdem danke für die Info.

Stephan
Stephan Faust
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:11 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