Delphi-PRAXiS

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 in einem stringgrid den text in den column zentrieren (https://www.delphipraxis.net/13738-einem-stringgrid-den-text-den-column-zentrieren.html)

kiar 25. Dez 2003 20:36


in einem stringgrid den text in den column zentrieren
 
fogender massen bin ich rangegangen:

Delphi-Quellcode:
procedure TForm1.SG1DrawCell(Sender: TObject; ACol, ARow: Integer;
                             Rect: TRect; State: TGridDrawState);

var
   r:TRect;
   i,a,x:integer;
   s:string;
begin
     
     
           with (sender as Tstringgrid) do
               begin
                   for i:=0 to 6 do
                      begin
                          r:=cellrect(i,0);
                          canvas.brush.color:=clblue;
                          if i = 0 then

                            s:='name'
                           
                            else
                            s:='Donnerstag';
                            a:=length(s)*font.size;
                          canvas.TextRect(r,r.left+((colwidths[i]div 2)-(a div 2)),r.top,s);// das ist die zeile die zentrieren soll !!!
                   
                    canvas.Brush.color:=clwhite;
                    canvas.FrameRect(r);
                    end;
               end;
er zentriert aber nicht richtig. wird eigentlich bei der breite der zellen der rahmen mitgemessen, oder muss man diesen noch dazuaddieren???

raik

grayfox 26. Dez 2003 00:35

Re: in einem stringgrid den text in den column zentrieren
 
hallo kiar!

ich glaub, du hast die arbeitsweise von 'drawcell' nicht richtig verstanden :wink:
drawcell zeichnet immer nur jene zelle, mit deren koordinaten es aufgerufen wird

--> procedure TForm1.SG1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);

wenn du in einer schleife durch deine spalten iterierst, ist es sehr wahrscheinlich, dass du
colwidth der letzten spalte für alle vorherigen auch zum zentrieren heranziehst. aus diesem grund
dürfte es bei dir nicht so gut aussehen

probiers mal auf diese art:
Delphi-Quellcode:
{$UNTESTED}

  s:=StringGrid1.Cells[ACol,ARow]
  StringGrid1.Canvas.FillRect(Rect); // Zellfarbe zeichnen
  DrawText(StringGrid1.Canvas.Handle, PChar(s), Length(s), Rect, DT_Center);
quelle: huberlix im vorigen beitrag :P

damit sollte es klappen

mfg, stefan

kiar 26. Dez 2003 01:49

Re: in einem stringgrid den text in den column zentrieren
 
hi grayfox , danke für deine antwort, bin auch schon auf drawtext gekommen, da geht es sogar mit dt_center und dtwordbreak, aber ich will die fixierten cellen zentrieren und umbrechen.

wäre klasse, wenn dir noch etwas einfallen würde.

raik

Jens Schumann 26. Dez 2003 10:31

Re: in einem stringgrid den text in den column zentrieren
 
Hallo,
versuch es doch mal mit
Delphi-Quellcode:
DrawText(StringGrid1.Canvas.Handle, PChar(s), Length(s), Rect, DT_Center+dt_wordbreak);

kiar 26. Dez 2003 13:07

Re: in einem stringgrid den text in den column zentrieren
 
hallo jens

siehe einen post über deinen . ich hatte die beschriftung für die Column ausgeschaltet, deshalb war nichts in den column zu sehen.

also das thema ist erledigt.

vielen dank raik


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:09 Uhr.

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 by Thomas Breitkreuz