TextFarbe einer einzelnen Stringgridzelle ändern

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
wernkrau38
Beiträge: 28
Registriert: Di 8. Mär 2016, 11:46
OS, Lazarus, FPC: Windows10
CPU-Target: Win64

TextFarbe einer einzelnen Stringgridzelle ändern

Beitrag von wernkrau38 »

Hallo,
Ich habe ein mit grünen Zeichen gefülltes Stringgrid.
Nun will ich mit Mygrid.cells [Col,row]:= ' S '
diesen Text in der einzelnen Zelle Rot einfärben, die vielen andern bleiben Grün.
Wie kriege ich den Farbwechsel hin?

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

Re: TextFarbe einer einzelnen Stringgridzelle ändern

Beitrag von wp_xyz »

Mit dem OnPrepareCanvas-Ereignis. Das wird aufgerufen, wenn die Zelle fertig ist zum Neuzeichnen. Brush, Font, Textstyle usw. sind gesetzt. Du hast hier die Möglichkeit diese Properties für bestimmte Zellen anzupassen:

Code: Alles auswählen

procedure TForm1.StringGrid1PrepareCanvas(Sender: TObject; aCol, aRow: Integer;
  aState: TGridDrawState);
begin
  if TStringGrid(Sender).Cells[ACol, ARow] = ' S ' then
    TStringGrid(Sender).Canvas.Brush.Color := clRed;  // Grün für alle anderen Zellen ist bereits gesetzt.
end;

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

Re: TextFarbe einer einzelnen Stringgridzelle ändern

Beitrag von theo »

PrepareCanvas ist sehr gut.
Er will aber eigentlich die Font Farbe setzen, also so:

Code: Alles auswählen

TStringGrid(Sender).Canvas.Font.Color := clRed; 

wernkrau38
Beiträge: 28
Registriert: Di 8. Mär 2016, 11:46
OS, Lazarus, FPC: Windows10
CPU-Target: Win64

Re: TextFarbe einer einzelnen Stringgridzelle ändern

Beitrag von wernkrau38 »

Das sieht plausibel aus. Ich werde an der Stelle weiter forschen; auf Anhieb ist mir es noch nicht gelungen.
Vorerst :Vielen Dank

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

Re: TextFarbe einer einzelnen Stringgridzelle ändern

Beitrag von wp_xyz »

wernkrau38 hat geschrieben: Di 14. Feb 2023, 16:51 Das sieht plausibel aus. Ich werde an der Stelle weiter forschen; auf Anhieb ist mir es noch nicht gelungen.
Was kann denn hier misslingen? Sorry, wenn das arrogant klingt - ist nicht so gemeint. Aber: Grid im Formular-Designer auswählen, zum Objekt-Inspektor gehen, Seite "Events", runterscrollen zu "OnPrepareCanvas", auf den '...' Button in dieser Zeile klicken und im Code-Editor den gewünschten Code eintragen.
Dateianhänge
prepareCanvas.zip
(2 KiB) 54-mal heruntergeladen

wernkrau38
Beiträge: 28
Registriert: Di 8. Mär 2016, 11:46
OS, Lazarus, FPC: Windows10
CPU-Target: Win64

Re: TextFarbe einer einzelnen Stringgridzelle ändern

Beitrag von wernkrau38 »

jetzt habe ichs anhand Deines Beispiels begriffen.
Vielen Dank!

wernkrau38
Beiträge: 28
Registriert: Di 8. Mär 2016, 11:46
OS, Lazarus, FPC: Windows10
CPU-Target: Win64

Re: TextFarbe einer einzelnen Stringgridzelle ändern

Beitrag von wernkrau38 »

jetzt bin ich doch wieder hängengeblieben:
Anbei mein Source-Code.
Mit dem Button kann ich die Werte für Row und Col übernehmen. Im Grid werden sie aber nur eingetragen wenn ich auf das Grid mit der Maus tippe; d.h. wenn das Grid den Focus bekommt wird es über Canvas neu gezeichet.
mein Ziel ist aber, daß das sofort geschieht.
Hast Du da eine Idee?
Dateianhänge
project1.zip
(2.19 KiB) 51-mal heruntergeladen

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

Re: TextFarbe einer einzelnen Stringgridzelle ändern

Beitrag von theo »

Mach noch:

Code: Alles auswählen

StringGrid1.Invalidate;         
nach dem Setzen der Werte. Das veranlasst das Neuzeichnen.

Antworten