Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Bei einem Grid über die Celle zeichnen. (https://www.delphipraxis.net/136105-bei-einem-grid-ueber-die-celle-zeichnen.html)

Jackie1983 23. Jun 2009 16:27


Bei einem Grid über die Celle zeichnen.
 
Servus.

so sieht meine zeichen routine aus
Delphi-Quellcode:
    Canvas.FillRect(Rect);
    Canvas.TextOut(rect.left,rect.top+1,CellText);
Wenn eine Zelle nur eine Breite von 20 hat ich aber einen Text darstellen möchte der länger ist,
wie könnte man sowas umsetzen.

mfg

mkinzler 23. Jun 2009 16:29

Re: Bei einem Grid über die Celle zeichnen.
 
Der Canvas ist der Canvas des Grids und nicht der Zelle

Jackie1983 23. Jun 2009 16:34

Re: Bei einem Grid über die Celle zeichnen.
 
Hilft mir jetzt sehr weiter, weis nicht was du mir damit sagen willst.
Aber die Zelle ist doch ein Teil des Grids, also auch vom Canvas des Grids :gruebel:

Satty67 23. Jun 2009 16:39

Re: Bei einem Grid über die Celle zeichnen.
 
Du willst die Zelle breiter beschreiben wie Sie ist, hast den Canvas des Grid und damit alle Freiheiten das zu tun. Bist ja nicht auf Rect beschränkt, das ist nur eine Hilfe den Ausschnitt der Zelle im Grid zu finden, wenn Du Dich daran halten willst.

Jackie1983 23. Jun 2009 16:52

Re: Bei einem Grid über die Celle zeichnen.
 
Aber wenn ich den Text so ausgeben Canvas.TextOut(rect.left,rect.top+1,CellText);
ist der Text nur so breit wie die Zelle und der rest wird abgeschnitten...

Satty67 23. Jun 2009 17:16

Re: Bei einem Grid über die Celle zeichnen.
 
Du hast recht, scheinbar ist ClipRect gesetzt (gerade auch mal schnell getestet). Ok, dann lasse ich Dich für den Moment mit der Frage stehen ;)

Lannes 23. Jun 2009 18:49

Re: Bei einem Grid über die Celle zeichnen.
 
Hallo,

Du musst für jede der der Zellen die Du für den Text benötigst den gleichen/gesamten Bereich zeichnen und den kompletten Text ausgeben.

Dort hab ich mal einen Code gepostet der über den Bereich von zwei Zellen zeichnet Link
Der Code zeigt die grundsätzliche Herangehensweise an ein solches Problem.

Jackie1983 24. Jun 2009 11:47

Re: Bei einem Grid über die Celle zeichnen.
 
Zitat:

Zitat von Lannes
Hallo,

Du musst für jede der der Zellen die Du für den Text benötigst den gleichen/gesamten Bereich zeichnen und den kompletten Text ausgeben.

Dort hab ich mal einen Code gepostet der über den Bereich von zwei Zellen zeichnet Link
Der Code zeigt die grundsätzliche Herangehensweise an ein solches Problem.

thx, werde ich mir mal anschauen.

Jackie1983 24. Jun 2009 13:09

Re: Bei einem Grid über die Celle zeichnen.
 
servus,

habe es mal probier, aber irgend wie funktioniert das nicht.
Delphi-Quellcode:
      rect.Right := 300;
      DrawText(Canvas.Handle,PChar(CellText),-1,Rect,DT_NOCLIP {DFCS_BUTTONPUSH});
Vielleicht noch was vergessen....

mfg

Lannes 24. Jun 2009 14:42

Re: Bei einem Grid über die Celle zeichnen.
 
Hallo,

wie äußert sich das "nicht funktionieren"

Wenn das Dein kompletter Code ist, kann es nicht funktionieren.


Du musst OnDrawCell aus der Sicht der Zelle verstehen. OnDrawCell wird für jede Zelle ausgelöst die neu gezeichnet werden muss, z.B. durch ändern des Zellinhalts, nach temporärem Verdecken der Zelle, etc.

Beispieltabellenbereich:
Code:
|-------|
| A | B |
|-------|
Angenommen in Zelle A wird der Text ausgegeben.
DT_NOCLIP hebt den Ausgabebereich von Rect auf und der Text erstreckt sich bis in Zelle B,
aber weil auch Zelle B neu gezeichnet wird ist der Textteil wieder übermalt.

Ich kann Dir enpfehlen in einem solchen Fall(Ausgabe von Text über mehrere zellen) DefaultDrawing auf False zu setzen um das komplete Zeichnen des Grids selbst zu übernehmen.

Also wenn Zelle A gezeichnet wird den Text ausgeben und wenn Zelle B gezeichnet wird den Text aus Zelle A erneut ausgeben, beginnend in Zelle A.

Psoudocode:
Code:
wenn Zelle = A dann
  Zeichne in Zelle A ab linken Rand der Zelle A
  sonst
    wenn Zelle = B dann
      Zeichne in Zelle A ab linken Rand der Zelle B - Breite der Zelle A


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

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