Hallo zusammen,
ich probiere gerade meinem TStringGrid beizubringen, wenn das Formular resized wird, sich automatisch der neuen Größe anzupassen.
Das Problem ist, das bei bestimmten Größen die Breite nicht angepasst wird sondern nur ab einer bestimmten Breite. (siehe Dateianhang).
Ich habe hierfür die Breiten in Prozent angegeben.
Delphi-Quellcode:
type
TDynamicWidth = record
iWidth: Integer;
end;
var
aDynamicWidth: Array of TDynamicWidth;
Die eigentliche Prozedure sieht wie folgt aus:
Delphi-Quellcode:
type
TStringGridHack = class(TStringGrid)
public
procedure setDynamicWidth(fTarget: TStringGrid; aWidth: Array of TDynamicWidth);
end;
var
oStringGridHack: TStringGridHack;
procedure TStringGridHack.setDynamicWidth(fTarget: TStringGrid; aWidth: Array of TDynamicWidth);
var
i: Integer;
iGridWidth: Integer;
begin
if Length(aWidth) > 0 then begin
iGridWidth := fTarget.Width;
for i := 0 to Length(aWidth) - 1 do begin
fTarget.ColWidths[i] := iGridWidth div 100 * aWidth[i].iWidth;
end;
end;
end;
aufgerufen wird das ganze so..:
Delphi-Quellcode:
procedure TPreferences.FormResize(Sender: TObject);
var
aWidth: Array of TDynamicWidth;
begin
// 3 Spalten im TStringGrid
SetLength(aWidth, 3);
// Werte in Prozent
aWidth[0].iWidth := 40;
aWidth[1].iWidth := 20;
aWidth[2].iWidth := 40;
oStringGridHack.setDynamicWidth(sgBindings, aWidth);
SetLength(aWidth, 0);
end;
Weiß jemand warum die breite der einzelnen Spalten nicht präzise berechnet werden?
LG Toby