Font im String/Drawgrid ändern

Rund um die LCL und andere Komponenten
Antworten
remouter
Beiträge: 3
Registriert: Do 29. Jan 2009, 22:13
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: near Berlin

Font im String/Drawgrid ändern

Beitrag von remouter »

Hallo!
Ich habe auf meiner Form ein Stringgrid und möchte auf die Font-Eigenschaften von bestimmten Zellen zugreifen können.
Ich hatte mir das so gedacht, aber das klappt nich:
...
var a:Tfont;
...
begin
a:= Stringgrid.Cells[x,y].font;
a.color:=clred;
a.style.fsbold:=true;
a.size:=20;
Stringgrind.Cells[x,y].font:=a;
end;

Hat jemand eine Idee wie das funktioniert?
Oder sollte ich einen drawgrid nutzen? Wie erreicht man dort die Änderung einer Font-Eigenschaft?

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6770
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Font im String/Drawgrid ändern

Beitrag von af0815 »

remouter hat geschrieben:Hat jemand eine Idee wie das funktioniert?
Oder sollte ich einen drawgrid nutzen? Wie erreicht man dort die Änderung einer Font-Eigenschaft?
Vielleicht in den Sourcen von Grid nachsehen, Lazarus ist noch immer OpenSource.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

remouter
Beiträge: 3
Registriert: Do 29. Jan 2009, 22:13
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: near Berlin

Re: Font im String/Drawgrid ändern

Beitrag von remouter »

Sehr gute Idee, noch gar nicht dran gedacht.

baba
Beiträge: 265
Registriert: Mi 4. Apr 2007, 17:47

Re: Font im String/Drawgrid ändern

Beitrag von baba »

... selbst zeichnen -> OnDrawCell

Code: Alles auswählen

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
   if (aCol = GewünschteSpalte) and (aRow = GewünschteZeile) then begin
      StringGrid1.Canvas.Font.Size  := 9;  // ODER EINE ANDERE GRÖSSE
      StringGrid1.Canvas.Font.Style := [fsBold]; // MAL FETT
      StringGrid1.Canvas.Font.Color := clRed;
      StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top, 'Designte Zelle');
   end;
end;
Gruß
Baba.

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Re: Font im String/Drawgrid ändern

Beitrag von KOBOLD Messring GmbH »

In diesem Falle DrawGrid benutzen und in der Paint-Procedure alles selber machen wie baba gezeigt hat.
ACHTUNG, wenn man versucht im "normalen" StringGrid Font-Eigenschaften zu setzen, kann man auch eine Endlos-Schleife der Events auslösen, siehe:
http://www.lazarusforum.de/viewtopic.ph ... 55&start=0" onclick="window.open(this.href);return false;
Beitrag von RSE vom 4/9/2008, 13:19
Hatte selbst so ein Problem gehabt und mit DrawGrid gelöst.

remouter
Beiträge: 3
Registriert: Do 29. Jan 2009, 22:13
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: near Berlin

Re: Font im String/Drawgrid ändern

Beitrag von remouter »

Ja, das füllen der Zellen klappt so. Aber wie lese ich die Font in der Zelle?
Vllt mit einem array arbeiten, in dem man die Fonts der einzelnen Zellen abspeichert. : array of array of Tfont oda so. aber dann müsste Drawgrid eine feste Zahl an Cols und Rows haben ... oder könnte man das mit nem trick lösen?

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Font im String/Drawgrid ändern

Beitrag von monta »

Nein, es gibt keine Zellenabhängige Font-Eigenschaft.

Als Lösung bspw. ein paralleles Array mit TFont mitschleppen und dort dann eben für jede Zelle die Eigenschaften Eintragen. Als dynamisches Array kannst es ja auch zur Laufzeit anpassen.
array of array of Tfont oda so. aber dann müsste Drawgrid eine feste Zahl an Cols und Rows haben
array of array of TFont ist richtig, der zweite Gedanke nicht. Dynamische Array kannst ja anpassen, und auch sehr wohl so schachteln.
(siehe SetLength)
Johannes

Antworten