Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - [VisualCLX] Ändern der Item-Farbe in einem CLX-ListView
Kai Heitkamp - Mo 30.12.02 11:45
Titel: Ändern der Item-Farbe in einem CLX-ListView
Hallo,
also irgendwie funktioniert das mit der CLX-Komponente nicht ! Mit dem VCL-ListView funktioniert das ohne Probleme ! Wenn ich z.B. dies mache:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.ListView1CustomDrawItem(Sender: TCustomViewControl; Item: TCustomViewItem; Canvas: TCanvas; const Rect: TRect; State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean); begin Canvas.Brush.Color := clSilver; Canvas.Font.Color := clRed; DefaultDraw := True; end; |
...dann passiert gar nichts, die Farben bleiben alle auf Standard !
Mit der VCL-Komponente geht das alles ohne Probleme !
Hat jemand eine Idee woran das liegen könnte ? Ist die CLX buggy oder so ?
Danke und Gruß
Kai
AndyB - Do 02.01.03 00:56
| Zitat: |
| Ist die CLX buggy oder so ? |
Das ist untertrieben. Da hieß es wohl "Das Ding (Kylix) muss so schnell wie möglich raus (released werden), koste es was es wolle."
Die einzige Möglichkeit, die mir einfällt, ist alles selbst zeichnen. Also DefaultDraw auf False und die Canvas einsetzen.
mth - So 05.01.03 04:49
Titel: Re: Ändern der Item-Farbe in einem CLX-ListView
| Zitat: |
Hat jemand eine Idee woran das liegen könnte ? |
VCL <> CLX. In diesem Fall übernimmst entweder Du das komplette Zeichnen, oder du überlasst es Qt. Beides mischen geht nicht. Falls du nicht selbst zeichnest nimmt Qt die BaseColor aus der aktuellen QColorGroup des ListViews - so wie es in der Dokumentation von Qt steht.
| Zitat: |
Ist die CLX buggy oder so ?
|
Nicht mehr so arg :-) Die CLX von Kylix 3 ist brauchbar. Man muß sich immer nur vergegenwärtigen, dass die CLX auf QT aufbaut. Wenn man erstmal mit QT vertraut ist sollte es eigentlich keine allzugroßen Überraschungen geben :-)
AndyB - So 05.01.03 12:25
Titel: Re: Ändern der Item-Farbe in einem CLX-ListView
| mth hat folgendes geschrieben: |
| Die CLX von Kylix 3 ist brauchbar. |
Bis auf den ShowModal Fehler, den sie seit Kylix 1 nicht lösen können. Die Veränderungen daran verhindern immer noch nicht das Problem mit OnCloseQuery. Wieso soll dieses Ereignis erst eintreten, wenn das modale Formular bereits versteckt ist und warum wird das Formular auch versteckt, wenn man in OnClose Action auf caNone setzt?
Ein anderes Beispiel ist TForm.ModalResult. Setzt man ModalResult auf z.B. mrOK und entscheidet, dass ModalResult doch auf mrNone stehen bleiben soll (das Fenster also nicht schließen), dann wird das Formular trotzdem geschlossen.
Und hast du schon mal im OnClick Ereignis einer TRadioGroup den ItemIndex des RadioGroup geändert? Viel Spaß bei der Rekursion.
"Die CLX von Kylix 3 ist brauchbar.", wenn man sie noch entsprechend patched.
Kai Heitkamp - So 05.01.03 12:52
Titel: Re: Ändern der Item-Farbe in einem CLX-ListView
| mth hat folgendes geschrieben: |
VCL <> CLX. In diesem Fall übernimmst entweder Du das komplette Zeichnen, oder du überlasst es Qt. Beides mischen geht nicht. Falls du nicht selbst zeichnest nimmt Qt die BaseColor aus der aktuellen QColorGroup des ListViews - so wie es in der Dokumentation von Qt steht.
(...)
Wenn man erstmal mit QT vertraut ist sollte es eigentlich keine allzugroßen Überraschungen geben :-)
|
Ups, nee is klar ! Ich kenne QT (seit 1.4) und es steht in der Doku ! Habe schon lange nicht mehr unter Linux gecoded ! Danke für den Tipp !
Was für eine Version benutzt Kylix3 von Qt ? Ich glaube, es ist 2.3.1 !?
Kai
mth - So 05.01.03 15:28
Titel: Re: Ändern der Item-Farbe in einem CLX-ListView
| AndyB hat folgendes geschrieben: |
Bis auf den ShowModal Fehler, den sie seit Kylix 1 nicht lösen können. Die Veränderungen daran verhindern immer noch nicht das Problem mit OnCloseQuery.
|
Es war schon schlimmer :) Ich hab über Kylix 3 mal die ShowModal Probleme in den Borland Newsgroups gepostet und die entsprechenden Fixes, soweit ich sie gebraucht habe. Neben den modalen Dialogen, die sich gelegentlich ungewohnt bis seltsam verhalten, sind die MDI Formulare das zweite große Sammelsorium von Ungewöhnlichkeiten :)
| AndyB hat folgendes geschrieben: |
Wieso soll dieses Ereignis erst eintreten, wenn das modale Formular bereits versteckt ist und warum wird das Formular auch versteckt, wenn man in OnClose Action auf caNone setzt?
|
Das ist so nicht ganz richtig. Das beschriebene Problem tritt nur im zusammenhang mit dem weiter unten beschirbenen ModalResult Problem auf. Ein "normales" Close kann abgefangen werden (in Kylix 3, in Kylix 2 bestand auch hier ein Problem iirc)!
| AndyB hat folgendes geschrieben: |
Ein anderes Beispiel ist TForm.ModalResult. Setzt man ModalResult auf z.B. mrOK und entscheidet, dass ModalResult doch auf mrNone stehen bleiben soll (das Fenster also nicht schließen), dann wird das Formular trotzdem geschlossen.
|
Das ist kein anderes Beispiel, sondern die Mutter des Übels, das du weiter oben beschrieben hast. Das letztere Verhalten erschien mir auch etwas seltsam, ist aber genau so dokumentiert :)
Das OnCloseQuery in diesem Fall befragt werden sollte ist imo ein Bug. OnCloseQuery gehört selbstverständlich aufgerufen und lässt sich auch liesse sich auch leicht in die Funktion integrieren.
mth - So 05.01.03 15:32
Titel: Re: Ändern der Item-Farbe in einem CLX-ListView
| Kai Heitkamp hat folgendes geschrieben: |
Was für eine Version benutzt Kylix3 von Qt ? Ich glaube, es ist 2.3.1 !?
|
Kylix 3 (und K2) kommen mit einer gepatchten 2.3.0 - man kann aber auch auf die normale 2.3.0 umschalten, die Kylix 3 beiliegt.
rldrkmn - Di 07.01.03 13:08
Hallo mth !
| mth hat folgendes geschrieben: |
VCL <> CLX. In diesem Fall übernimmst entweder Du das komplette Zeichnen, oder du überlasst es Qt. Beides mischen geht nicht. Falls du nicht selbst zeichnest nimmt Qt die BaseColor aus der aktuellen QColorGroup des ListViews - so wie es in der Dokumentation von Qt steht.
|
Wenn ich jetzt zeichnen will, was muß ich da genau machen ? Hast Du mal ein (Code-) Beispiel für mich !?
Danke
Chris
Kai Heitkamp - Di 07.01.03 21:36
Hallo,
versuch' mal das:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| // // Draw Items // procedure TForm1.ListView1CustomDrawItem(Sender: TCustomViewControl; Item: TCustomViewItem; Canvas: TCanvas; const Rect: TRect; State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean); begin DefaultDraw := False;
Canvas.Brush.Color := clWhite Canvas.FillRect(Rect);
Canvas.Font.Color := clBlack; Canvas.TextOut(1, 1, ListView1.Items[ListView1.Items.IndexOf(Item)].Caption); end;
// // Draw SubItems // procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomViewControl; Item: TCustomViewItem; SubItem: Integer; Canvas: TCanvas; const Rect: TRect; State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean); begin DefaultDraw := False;
Canvas.Brush.Color := clWhite Canvas.FillRect(Rect);
Canvas.Font.Color := clBlack; Canvas.TextOut(1, 1, ListView1.Items[ListView1.Items.IndexOf(Item)].SubItems[SubItem - 1]); end; |
So kannst Du alles selber zeichnen und auch die Brush- und Text-Farben einzeln bestimmen !
Gruß
Kai
rldrkmn - Mi 08.01.03 09:45
Hallo Kai,
cool ... das funzt ! :D
Danke !!! :D
Chris
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!