Delphi-PRAXiS
Seite 1 von 2  1 2      

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 ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:53 Uhr.
Seite 1 von 2  1 2      

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