Font.Color in TCombobox funktioniert nicht..

Rund um die LCL und andere Komponenten
Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1629
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Font.Color in TCombobox funktioniert nicht..

Beitrag von corpsman »

Guten Morgen allerseits,

Ich habe eine Anwendung gebastelt, welche unter verschiedenen Windows Versionen laufen muss.

In der Anwendung ist eine TCombobox mit derer Font Farbe ich Eigenschaften Darstellen will. Leider funktioniert das nur unter Windows XP, unter Windows 7 geht es nicht. Es hängt sicherlich damit zusammen, dass mein Element Read Only ist.

Wenn ich Hergehe und die Eigentschaft ReadOnly = false mache, dann sieht man auch unter Windows 7 die Rote schrift, dies Bedingt aber, dass ich im OnKeyPress Ereigniss Key := #0 mache. Kennt jemand noch eine "Bessere" variante das Problem zu lösen ?

Gruß

Corpsman
Dateianhänge
Screenkopie.PNG
--
Just try it

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Font.Color in TCombobox funktioniert nicht..

Beitrag von Michl »

Hatte erst in einem klassischen Style von Win7 probiert, da ging Readonly ebenfalls, in einem anderen Style nicht...

Evt. müsstest du die Combobox selber zeichnen siehe z.B. (ungetestet): http://www.lazarusforum.de/viewtopic.php?f=18&t=1697

...einfacher ist deine Lösung, nur Pfeil-, Tabulator und Entertaste zuzulassen, ansonsten Key:=0;

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Font.Color in TCombobox funktioniert nicht..

Beitrag von Michl »

Michl hat geschrieben:...einfacher ist deine Lösung, nur Pfeil-, Tabulator und Entertaste zuzulassen, ansonsten Key:=0;
Nehme alles zurück, Selberzeichnen ist doch einfacher und funktioniert auch super mit readonly (einfach Style auf csOwnerDrawFixed stellen):

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
  Combobox1.Items.Add('Test');
  Combobox1.ItemIndex:=0;
  Combobox1.ReadOnly:=True;
  Combobox1.Style:=csOwnerDrawFixed;   // like csDropDownList, but custom drawn
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Combobox1.Font.Color=$0000FF
    then Combobox1.Font.Color:=$00FF00
    else Combobox1.Font.Color:=$0000FF;
end; 
Dateianhänge
combobox.jpg
combobox.jpg (8.27 KiB) 556 mal betrachtet

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Antworten