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 rechtsbündiges Stringgrid (https://www.delphipraxis.net/32458-rechtsbuendiges-stringgrid.html)

Hansa 23. Okt 2004 15:51


rechtsbündiges Stringgrid
 
Hi,

ich bin dabei ein Stringgrid, besser gesagt den Inhalt der Zellen, rechtsbündig anzuzeigen. Und zwar mit folgendem Code:

Delphi-Quellcode:
procedure sgRechts (sg: TStringGrid; Rect: TRect; ACol, ARow:Integer);
var st: String;
begin
  sg.Canvas.FillRect(Rect);
  st := sg.Cells[ACol,ARow];
  DrawText(sg.Canvas.Handle, PChar(st), StrLen(PChar(st)),Rect,DT_RIGHT);
end;
Horizontal gesehen ist es auch rechts, aber sobald ich die Eingabe beendet wandert der Text nicht nur nach rechts, sondern auch nach oben. Er ist also vertikal nicht mehr zentriert. Woran kann das liegen ?

jim_raynor 23. Okt 2004 16:33

Re: rechtsbündiges Stringgrid
 
Versuche es mal mit
Delphi-Quellcode:
DT_RIGHT or DT_VCENTER

Hansa 23. Okt 2004 23:08

Re: rechtsbündiges Stringgrid
 
Liste der Anhänge anzeigen (Anzahl: 1)
DT_VCENTER bewirkt nichts !

Habe hier ein Beispiel, das mit einem neuen Projekt und folgendem Code gemacht wurde:

Delphi-Quellcode:
procedure sgRechts (sg: TStringGrid; Rect: TRect; ACol, ARow:Integer);
var st: String;
begin
  sg.Canvas.FillRect(Rect);
  st := sg.Cells[ACol,ARow];
  DrawText(sg.Canvas.Handle, PChar(st), StrLen(PChar(st)),Rect,DT_RIGHT OR DT_VCENTER);
end;

procedure Tform1.StringGrid1DrawCell(Sender: TObject; ACol,ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  inherited;
  if (ACol in [1..3]) then
    sgRechts(StringGrid1, Rect, ACol, ARow);
end;
Im Anhang sieht man das Ergebnis. In der letzten Zeile sieht man, wie es aussieht, bevor die Zelle verlassen wird.

Keldorn 24. Okt 2004 09:38

Re: rechtsbündiges Stringgrid
 
Zitat:

Zitat von Hansa
DT_VCENTER bewirkt nichts !

Wenn man sich die Hilfe anschauen würde, schon. DT_VCenter geht nur in Verbindung mit DT_Singleline. Dann würde aber der Text in den Zeilen zentriert werden, wenn die Zeilenhöhe zu hoch ist, würde der Text zu weit nach unten rutschen.

Wenn du dir den original code von drawcell anschaust, siehst du, daß der Text immer um 2 Pixel nach rechts und unten versetzt gezeichnet wird. Entweder du veränderts dein rect.top und rect.left auch um +2 oder nutzt inflaterect.

Delphi-Quellcode:
procedure sgRechts (sg: TStringGrid; Rect: TRect; ACol, ARow:Integer);
var st: String;
begin
  sg.Canvas.FillRect(Rect);
  st := sg.Cells[ACol,ARow];
  InflateRect(rect,-2,-2); //<<----
  DrawText(sg.Canvas.Handle, PChar(st), StrLen(PChar(st)),Rect,DT_RIGHT);
end;
Mfg Frank

Hansa 24. Okt 2004 13:40

Re: rechtsbündiges Stringgrid
 
Thx, Keldorn das wars. :thumb: Habe hier zwar noch anderen Code, der dasselbe macht, aber der jetzige ist besser. Und wegen .NET auch ein @ weniger. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:31 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