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.