Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StringGrid -> Beim Zeichnen, auch Zellen mit Text füllen (https://www.delphipraxis.net/103011-stringgrid-beim-zeichnen-auch-zellen-mit-text-fuellen.html)

HolgerCW 8. Nov 2007 11:07


StringGrid -> Beim Zeichnen, auch Zellen mit Text füllen
 
Hallo zusammen,

ich möchte wenn das Grid gezeichnet wird auch die Zellen dementsprechend mit Text füllen.

wenn ich im Ereignis onDrawCell folgendes mache:

Delphi-Quellcode:
Canvas.Brush.Color := clInfoBK;
Canvas.FillRect(Rect);
Cells[ACol, ARow] := 'Test'; // <- Das bringt die Zelle zum flackern
Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
Nur wenn ich das wie oben mache, flackern alle Zellen, wo ich Text rein schreiben. Was kann ich tuen ?

Gruss

Holger

P.S.: Möchte das gerne in dem Ereignis onDrawCell machen, da ich dort schon viel berechne um die Zellen zu ermitteln, wo sich die Farbe ändern soll und nun auch der Text ergänzt werden soll.

DeddyH 8. Nov 2007 12:02

Re: StringGrid -> Beim Zeichnen, auch Zellen mit Text fül
 
Zitat:

Zitat von HolgerCW
Delphi-Quellcode:
Cells[ACol, ARow] := 'Test';

Wenn ich mich nicht irre, wird durch die Zuweisung eines Textes an eine Zeile Zelle ein Repaint ausgelöst. In einer Zeichenroutine wie OnDrawCell hat diese Zeile also IMHO nichts verloren. Das ist genauso sinnig, wie in einem OnPaint ein invalidate aufzurufen.

hoika 8. Nov 2007 12:04

Re: StringGrid -> Beim Zeichnen, auch Zellen mit Text fül
 
Hallo,

nimm DrawText für den Text.


Heiko

raiguen 8. Nov 2007 12:08

Re: StringGrid -> Beim Zeichnen, auch Zellen mit Text fül
 
Zitat:

Zitat von HolgerCW
ich möchte wenn das Grid gezeichnet wird auch die Zellen dementsprechend mit Text füllen.

Das ist eine schlechte Idee! DAs OnDraw-Ereignis sollte nur zum eigentlichen Zweck - nämlich dem Zeichnen der Zelle - gebraucht werden. Hier kannst du jede Zelle in Abhängigkeit bsp. des Zellinhaltes(=Text) farblich anpassen.
Die Zuweisung des Zellinhaltes machst du in einer anderen Routine und sobald sich der Zellinhalt ändert, wird das OnDrawCell ausgelöst ;)[EDIT] @DeddyH: genau-das ist vollkommen richtig, was du da sagst ;) somit irrst du dich nicht :)

HolgerCW 8. Nov 2007 12:10

Re: StringGrid -> Beim Zeichnen, auch Zellen mit Text fül
 
Ok,

ich habe nun in Spalte 0, Zeile 0 eine Index = 'Test' geschrieben.

Wenn ich nun mit:

Delphi-Quellcode:
Canvas.Brush.Color := clInfoBK;
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[0, 0]);
das Grid Zeichne wird auch überall Test ausgegeben ?

Nur Kann ich 'Test' später mit

Delphi-Quellcode:
Ausgelesen := StrinGrid.Cells[X,Y];
nicht auslesen. Warum ? und wie kann das klappen.

Mein Ziel ist es, das an allen Stellen wo mit onDrawCell eine Farbe gesetzt wird, ich im Ereignis onMouseMove über die Zelle fahre den Wert oder die Farbe dort auslesen kann.

Gruss

Holger

DeddyH 8. Nov 2007 12:15

Re: StringGrid -> Beim Zeichnen, auch Zellen mit Text fül
 
Du gibst ja immer nur den Text aus, der in der Zelle 0,0 steht. Schau Dir mal diesen Thread an.

raiguen 8. Nov 2007 12:19

Re: StringGrid -> Beim Zeichnen, auch Zellen mit Text fül
 
Zitat:

Zitat von HolgerCW
das Grid Zeichne wird auch überall Test ausgegeben ?

GRRRRR.. das ist ja auch vollkommen logisch :!: Das OnDrawCell geht IMMER JEDE Zelle durch und somit wird dann auch in jede Zelle der Zellinhalt von der Zelle[0,0] eingetragen :!: :!:

Wenn du den Text der entsprechend einzufärbenden Zelle drinstehen haben möchtest, dann musst du sinnvollerweise die ARow-/ACol-Parameter nehmen!!
Delphi-Quellcode:
...
Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
...
[EDIT] grrr... DeddyH ist mir schon wieder zuvorgekommen *hmmpf*

Zitat:

Zitat von HolgerCW
Nur Kann ich 'Test' später mit

Delphi-Quellcode:
Ausgelesen := StrinGrid.Cells[X,Y];
nicht auslesen. Warum ?

Weil du den Text nur auf das Canvas gezeichnet und NICHT der Zelle zugewiesen hast!

HolgerCW 8. Nov 2007 12:47

Re: StringGrid -> Beim Zeichnen, auch Zellen mit Text fül
 
Alles klar,

würde ich hiermit den Text der Zelle zuweisen, oder nur rein zeichnen ?

Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var s: string;
    R: TRect;
begin
  if (ACol >= StringGrid1.FixedCols) and (ARow >= StringGrid1.FixedRows) then
    begin
      R := Types.Rect(Rect.Left, Rect.Top,Rect.Right - 2,Rect.Bottom - 2);
      s := StringGrid1.Cells[ACol,ARow];
      DrawText(StringGrid1.Canvas.Handle,PChar(s),-1, R,DT_RIGHT or DT_BOTTOM or DT_SINGLELINE);
    end;
end;
Wie kann ich am besten, eine Zelle Markieren, die im onDraw - Ereignis farblich geändert wurde, damit ich später darauf zugreifen kann, mit z.B. onMouseMove ?

Gruss

Holger

DeddyH 8. Nov 2007 12:50

Re: StringGrid -> Beim Zeichnen, auch Zellen mit Text fül
 
Der Text wird in meinem Beispiel nur gezeichnet und nicht zugewiesen (wie ich bereits sagte, ist eine Zuweisung beim Zeichnen totaler Quatsch).

raiguen 8. Nov 2007 12:54

Re: StringGrid -> Beim Zeichnen, auch Zellen mit Text fül
 
@DeddyH: korrekt - wie ich ja auch bereits gesagt habe ;)
@HolgerCW:
Zitat:

würde ich hiermit den Text der Zelle zuweisen,
NEIN
Zitat:

oder nur rein zeichnen ?
JA Beim OnDrawCell wird der bereits vorher zugewiesene Text der Zelle mit der entsprechenden Farbe des Hintergrundes/ Fonts etc gezeichnet ;)

HolgerCW 8. Nov 2007 13:11

Re: StringGrid -> Beim Zeichnen, auch Zellen mit Text fül
 
Hmmm,

Ok, das ist mir nun alles klar.

Jetzt habe ich mein Grid gezeichnet. In Zelle (1,1) ist nun die Farbe clInfoBK.

Wie kann ich jetzt im MouseMove - Ereignis auslesen, wenn ich über die Zelle (1,1) fahre, das diese clInfoBk ist ?

Gruss

Holger

Klaus01 8. Nov 2007 13:15

Re: StringGrid -> Beim Zeichnen, auch Zellen mit Text fül
 
Hallo,

im MouseMove Ereignis bekommst Du die x und y Koordinaten
der Mausposition.

Mit MouseToCell kannst Du diese Koordinaten in ZellKoordinaten umwandeln.
Dann brauchst Du nur noch die Farbe ermitteln.

Grüße
Klaus

HolgerCW 8. Nov 2007 13:20

Re: StringGrid -> Beim Zeichnen, auch Zellen mit Text fül
 
Alles klar,

das habe ich auch schon gemacht. Und wie bekomme ich dann die Farbe ausgelesen ?

Delphi-Quellcode:
STGrid.Color;
ist ja für das ganze Grid, und

Delphi-Quellcode:
STGrid.Cells[X,Y].Color;
gibt es nicht.

Gruss

Holger

Klaus01 8. Nov 2007 13:36

Re: StringGrid -> Beim Zeichnen, auch Zellen mit Text fül
 
Wie wäre es mit StringGrid1.Canvas.Pixels(x,y):TColor?

Grüße
Klaus

HolgerCW 8. Nov 2007 14:16

Re: StringGrid -> Beim Zeichnen, auch Zellen mit Text fül
 
Ist X = Spalte und Y = Zeile ?

... weil habe ja mit MousetoCell die Spalten und ZEilen herrausgesucht

Gruss

Holger

DeddyH 8. Nov 2007 14:19

Re: StringGrid -> Beim Zeichnen, auch Zellen mit Text fül
 
Zitat:

Zitat von HolgerCW
Ist X = Spalte und Y = Zeile ?

Nein, das sind die (Maus)koordinaten innerhalb der Grid.

HolgerCW 8. Nov 2007 15:08

Re: StringGrid -> Beim Zeichnen, auch Zellen mit Text fül
 
Das war mir klar,

dachte nur das auch eine Funktion gibt, der ich die Spalten übergeben kann.

Hat sich aber erledigt, da es ja eigentlich keinen Sinn macht.

Gruss und nochmal danke.

Holger


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz