Delphi-PRAXiS
Seite 2 von 2     12   

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 Stringgrid-Zellen rechtsbündig (https://www.delphipraxis.net/146929-stringgrid-zellen-rechtsbuendig.html)

Wolfgang Mix 14. Mär 2010 16:31

Re: Stringgrid-Zellen rechtsbündig
 
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
          Rect: TRect; State: TGridDrawState);
begin
  // Alle Spalten rechtsbündig
  WriteTextAligned(TStringGrid(Sender).Canvas, Rect, taRightJustify, TStringGrid(Sender).Cells[Acol, ARow]);
end;
Aktiviere mal das Ereignis OnDrawCell im Objektinspektor und setze dann den
obigen Code ein. So geht es bei mir.

s-off 14. Mär 2010 18:25

Re: Stringgrid-Zellen rechtsbündig
 
Hast Du Dir mal die von mir gepostete Unit angesehen?

Hansa 14. Mär 2010 18:46

Re: Stringgrid-Zellen rechtsbündig
 
Zitat:

Zitat von s-off
Hast Du Dir mal die von mir gepostete Unit angesehen?

Ja sicher. Nichts für ungut, aber das passt nicht recht in mein Konzept. Wenn das mit dem OnDrawCell mir auch nicht gefällt : gehen tuts ja schon.

Das, was die Prozedur :

Delphi-Quellcode:
WriteTextAligned
im Prinzip macht, das macht bei mir die Prozedur sgRechts und die wird im OnDrawCell des Grids aufgerufen (noch). Siehe #1.

Darum gehts aber nicht. Es geht darum diese Eigenschaft dem Stringgrid beizubringen. An Source gibts kaum mehr was zu zeigen. Der Vollständigkeit halber :

Delphi-Quellcode:
TExtStringGrid = class(TStringGrid)
  private
    FCellInteger : integer;
...
  public
     property CellInteger[ACol, ARow : integer] : integer read GetCellInteger write SetCellInteger;
end;
...
function TExtStringGrid.GetCellInteger(ACol, ARow: integer): integer;
begin
  GetCellInteger := FCellInteger;
end;
Rest siehe #1. Ich kann ja auch den Stringgrid-Zellen ohne große Umwege direkt Zahlenwerte übergeben. Das geht ja alles. Aber ich kriege die Zellwerte (sofern numerisch) eben nicht dazu, dass sie rechtsbündig in den Zellen stehen. Außer ich gehe bei jedem Grid hin und behandele das im OnDrawCell. Langsam wird das OnDrawCell unübersichtlich. Man schaue sich das mal an :

Delphi-Quellcode:
procedure Tfrm.sgDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
const IsChecked : array[Boolean] of Integer =
      (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
var DrawState: Integer;
begin
  inherited;
  if (ARow >= sgArtNr.FixedRows) and (ACol >= sgArtNr.FixedCols) then with sgArtNr do begin
    if (ACol in KommaCols) then
      sgKommaRechts(sgArtNr, Rect, ACol, ARow)
    else if (ACol in RechtsCols + ZahlenCols + MinusCols) then
      sgRechts(sgArtNr, Rect, ACol, ARow)
    else if (ACol in CheckBoxCols) then
      sgZentriert(sgArtNr, Rect, ACol, ARow);
    EditObject := TEditObject (Objects [ACol,ARow]);

... noch über 100 Zeilen
end;
Das muss langsam mal 1. entflechtet, übersichtlicher und 2. wartbarer gemacht werden. Denn obwohl ich schon beim Bestücken der Zellen weiss, wie die formatiert werden sollen, ob es integer, real oder sonstwas ist, gehe ich momentan über den Umweg der Spaltennummern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:23 Uhr.
Seite 2 von 2     12   

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