ColorBox probleme mit duplikaten

Rund um die LCL und andere Komponenten
Antworten
Leberecht
Beiträge: 73
Registriert: Fr 28. Mai 2010, 08:39
OS, Lazarus, FPC: Win7 64bit, Lazarus 1.6.0 32bit (FPC 3.0.0)
CPU-Target: 32Bit
Wohnort: Heidelberg

ColorBox probleme mit duplikaten

Beitrag von Leberecht »

hallo,

ich bin auf ein problem mit der ColorBox gestoßen. und zwar verhält sich diese merkwürdig, wenn man mehrere einträge mit derselben farbe hinzufügt, den ersten aktiviert und dann einen auswählen will. wenn ich dann einen eintrag >1 wähle, springt er automatisch zu eintrag 1 zurück. intern wählt er erstmal eintrag 2, feuert dann aber den "onchange" event nochmal und wählt dann eintrag 1 aus. danach kann ich allerdings mit der maus jeden eintrag auswählen, aber eben nicht beim ersten mal. wenn ich allerdings bei TObject verschiedene werte übergebe, klappt es auf anhieb. es hat wohl damit zutun das er intern probleme mit identischen TObject-werten hat. aber ich weiss aber nicht, wie ich sonst die farben der einträge setzen kann. ich brauche dieses verhalten aber, da die einträge verschiedene "aufgaben" darstellen die entweder gelösst wurden (grünes rechteck) oder aber noch nicht (grau).
beispiel: ich befülle die colorbox mit 3 einträgen

>cboAufgabe.AddItem('Aufgabe 1',TObject(clLime));
>cboAufgabe.AddItem('Aufgabe 2',TObject(clLime));
>cboAufgabe.AddItem('Aufgabe 3',TObject(clLime));

und wähle dann den ersten als aktiven eintrag aus

>cboAufgabeAuf.ItemIndex:=0;

beim ersten wählen eines eintrags >1 tritt das geschilderte verhalten auf. weiss jemand wie ich das umgehen kann? gibt es eine möglichkeit, einträge mit eindeutigen TObject werten hinzuzufügen und dann trotzdem die farbe separat
zu setzen?

danke

Mfg
leberecht
„Viel zu lernen du noch hast.“
(Yoda zu Dooku)

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: ColorBox probleme mit duplikaten

Beitrag von theo »

ColorBox ist nun mal eine Farbauswahlbox.

Versuch es doch mal mit einer Combobox mit Style csOwnerDrawFixed.
So kannst du in OnDrawItem malen.
Musst vielleicht etwas googlen, ich kann jetzt auch nicht jedes Detail erklären.

wp_xyz
Beiträge: 4888
Registriert: Fr 8. Apr 2011, 09:01

Re: ColorBox probleme mit duplikaten

Beitrag von wp_xyz »

Ich würde da die gleichen Farben durch Variationen im niedrigsten Bit jeder Farbkomponente leicht unterschiedlich machen. Die sehen dann garantiert noch "gleich" aus, sind aber für die ColorBox verschieden. Also

Code: Alles auswählen

const
  clLime1 = TColor($00FF00);
  clLime2 = TColor($00FF01);
  clLine3 = TColor($01FF00);
...
  cboAufgabe.AddItem('Aufgabe 1',TObject(PtrUInt(clLime1)));
  cboAufgabe.AddItem('Aufgabe 2',TObject(PtrUInt(clLime2)));
  cboAufgabe.AddItem('Aufgabe 3',TObject(PtrUInt(clLime3)));
 
// Auch wenn m.fuchs wieder in Tränen ausbricht ;-) der Cast zu PtrUInt ist nötig, um dir Probleme zu ersparen, wenn du einmal auf 64-bit wechselst

Sauberer wäre natürlich theo's Vorschlag mit der selbstgezeichneten Combobox. Dazu könntest du auch noch eine Klasse für die Aufgaben definieren, die den Namen der Aufgabe, ihre Farbe und wahrscheinlich noch viel mehr enthält. Diese Aufgaben-Instanzen kannst du dann ohne die hässlichen Typumwandlungen direkt als Object in die Combobox-Items einhängen.

Leberecht
Beiträge: 73
Registriert: Fr 28. Mai 2010, 08:39
OS, Lazarus, FPC: Win7 64bit, Lazarus 1.6.0 32bit (FPC 3.0.0)
CPU-Target: 32Bit
Wohnort: Heidelberg

Re: ColorBox probleme mit duplikaten

Beitrag von Leberecht »

das mit den leicht verschiedenen farben hatte ich mir auch überlegt. allerdings sind es villeicht 20 verschiedene aufgaben und ich glaube, dann sieht man es.
werde wohl oder übel den vorschlag von theo umsetzen müssen.

ist aber komisch: es funktioniert ja mit gleichen farben, aber erst nach erstmaligem manuellem auswählen. wenn ich diesen schritt automatisieren könnte wäre alles perfekt.
„Viel zu lernen du noch hast.“
(Yoda zu Dooku)

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2639
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: ColorBox probleme mit duplikaten

Beitrag von m.fuchs »

wp_xyz hat geschrieben:

Code: Alles auswählen

 cboAufgabe.AddItem('Aufgabe 3',TObject(PtrUInt(clLime3)));
 // Auch wenn m.fuchs wieder in Tränen ausbricht ;-) der Cast zu PtrUInt ist nötig, um dir Probleme zu ersparen, wenn du einmal auf 64-bit wechselst

In der Tat, das tut mir auch immer weh. Hier sind aber die Entwickler der Komponente schuld.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Leberecht
Beiträge: 73
Registriert: Fr 28. Mai 2010, 08:39
OS, Lazarus, FPC: Win7 64bit, Lazarus 1.6.0 32bit (FPC 3.0.0)
CPU-Target: 32Bit
Wohnort: Heidelberg

Re: ColorBox probleme mit duplikaten

Beitrag von Leberecht »

ich habs jetzt mit csOwnerDrawFixed gemacht wie von theo vorgeschlagen. das ganze klappt auch ganz gut

NUR

wenn die combobox normal angezeigt wird (ohne das man diese öffnet) feuert der drawitem event nicht und er zeigt auch keine farben neben dem text an. sprich: der text steht einfach nur so da. nur wenn ich die combobox expandiere, zeigt er neben dem text auch die rechtecke mit den farben an. gibt es irgendeine möglichkeit, eigene grafiken auch bei inaktiver/nicht angeklickter combobox anzuzeigen so wie bei der colorbox?
„Viel zu lernen du noch hast.“
(Yoda zu Dooku)

Antworten