ColorBox probleme mit duplikaten

Rund um die LCL und andere Komponenten

ColorBox probleme mit duplikaten

Beitragvon Leberecht » 9. Mär 2017, 15:02 ColorBox probleme mit duplikaten

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)
Leberecht
 
Beiträge: 73
Registriert: 28. Mai 2010, 07:39
Wohnort: Heidelberg
OS, Lazarus, FPC: Win7 64bit, Lazarus 1.6.0 32bit (FPC 3.0.0) | 
CPU-Target: 32Bit
Nach oben

Beitragvon theo » 9. Mär 2017, 15:31 Re: ColorBox probleme mit duplikaten

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.
theo
 
Beiträge: 8064
Registriert: 11. Sep 2006, 18:01

Beitragvon wp_xyz » 9. Mär 2017, 15:50 Re: ColorBox probleme mit duplikaten

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.
wp_xyz
 
Beiträge: 2670
Registriert: 8. Apr 2011, 08:01

Beitragvon Leberecht » 10. Mär 2017, 09:29 Re: ColorBox probleme mit duplikaten

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)
Leberecht
 
Beiträge: 73
Registriert: 28. Mai 2010, 07:39
Wohnort: Heidelberg
OS, Lazarus, FPC: Win7 64bit, Lazarus 1.6.0 32bit (FPC 3.0.0) | 
CPU-Target: 32Bit
Nach oben

Beitragvon m.fuchs » 10. Mär 2017, 09:46 Re: ColorBox probleme mit duplikaten

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
m.fuchs
 
Beiträge: 1971
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.8.4, FPC 3.0.4) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon Leberecht » 10. Mär 2017, 17:15 Re: ColorBox probleme mit duplikaten

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)
Leberecht
 
Beiträge: 73
Registriert: 28. Mai 2010, 07:39
Wohnort: Heidelberg
OS, Lazarus, FPC: Win7 64bit, Lazarus 1.6.0 32bit (FPC 3.0.0) | 
CPU-Target: 32Bit
Nach oben

• Themenende •

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried