Einzelnen Beitrag anzeigen

Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#13

Re: Stringgrid-Zellen rechtsbündig

  Alt 14. Mär 2010, 18:46
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 :

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.
Gruß
Hansa
  Mit Zitat antworten Zitat