Einzelnen Beitrag anzeigen

Roadrunner.1

Registriert seit: 3. Mai 2009
20 Beiträge
 
Delphi 10.3 Rio
 
#1

Fontfarbe in TStringgrid ändern ;-)

  Alt 3. Mai 2017, 09:25
Hi Zusammen,

ja, ja, ja, die Frage wurde schon 1000 mal gestellt und ich soll die Suche verwenden. Also nach einer Stunde bekomme ich MEIN Problem
nicht gelöst. Vielleicht liegt es aber auch Delphi XE5 und jemand hat eine Idee.

Also was will ich?
Bestimmte Einträge in einem Stringgrid in einer anderen Fontfarbe darstellen. Standartantwort wäre z.B.:

procedure TForm.SGDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect;
State: TGridDrawState);
begin
if (ACol=4) and (ARow>0) then begin
with SG.Canvas do begin
Font.Color:=clred;
FillRect(Rect);
Textout(Rect.Left+2,Rect.Top+2, SG.Cells[ACol,ARow]);
end;
end;
end;

Merkwürdig daran ist, das auch alle anderen Zellen gemalt werden. Wie's mir scheint wird hier ÜBERMAHLT nicht "statt dessen" gemalt, oder?

OK. Nun zu meinem Problem: Hat eine übermalte Zelle den Fokus (sieht dann anders aus, aber für meine Zwecke OK) und gehe ich dann mit TAB
aufs nächste Steuerelement, so wird der Eintrag nicht rot sondern schwarz dargestellt! Selbst ein Repaint, Invalid oder die Zuweisung eines neuen
Textes in der onExit des Stringgrids führt zu keiner Besserung. Folgendes führt zu einer Standartfarben (schwarz) Ausgabe:

procedure TForm.SGExit(Sender: TObject);
begin
with SG do begin
Cells[4,4]:='Test';
end;
end;

Das "Test" erscheint also in schwarz statt in rot wenn beim Fokuswechsel diese Zelle markiert war. War hingegen eine andere markiert wird
"Test" in rot dargestellt!

Meine letzte Idee war DrawCell in onExit aufzurufen, aber wo bekom' ich mein Rect Parameter her, und wieso ist das alles so aufwendig?
Des Weiteren hab' ich Breakpoints gesetzt, und DrawCell wird nach der Zuweisung in OnExit schon mit ACol=4 und ARow=4 aufgerufen, aber
dieser Eintrag nicht rot dargestellt.

Hat irgend einer eine Idee?
Christian Drenkard
--
mfg.
Christian Drenkard
  Mit Zitat antworten Zitat