![]() |
[StringGrid] berechnen d. Zellenbreite nach resize
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo.
Bin sonst nur als aktiver Leser hier im Forum und konnte bisher alle meine Fragen mit der Suchfunktion lösen! Diesmal stellt sich mir aber ein Problem das scheinbar noch niemanden interessiert hat :?. Auch Google hat nix zu dem Thema. Also, ich habe ein StringGrid und möchte bei resize die Spaltenbreite/höhe entsprechend berechnen.
Delphi-Quellcode:
Leider wird ein Teil der letzten Zelle(n) verdeckt.
procedure TForm_Jahrestest.FormCanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean); var iZelle, iHeader: Integer; begin Resize:= true; JahresGrid.DoubleBuffered:= true; // Höhe d. StringGridZellen iHeader:= 15; // mindesthöhe iZelle:= (JahresGrid.Height -iHeader) div 12; iHeader:= (JahresGrid.Height - (iZelle * 12)); JahresGrid.DefaultRowHeight:= iZelle; // iZelle -3 dann gehts JahresGrid.RowHeights[0]:= iHeader; // Breite d. Zellen iHeader:= 55; // mindestbreite iZelle:= ((JahresGrid.Width -iHeader) div 37); iHeader:= (JahresGrid.Width -(iZelle * 37)); JahresGrid.DefaultColWidth:= iZelle; JahresGrid.ColWidths[0]:= iHeader; end; Was zum Geier mache ich falsch? -> siehe Bild Ich hoffe jemand weiss wie man das logisch berechnet? PS: Hab jetzt nur den relevanten Code rauskopiert aber bei Bedarf kann ich das ganze Projekt auch posten. Danke, Cornel |
Re: [StringGrid] berechnen d. Zellenbreite nach resize
Hallo,
Rahmen-, Srollbar- und die Gitterlinienbreite in die Berechnung einbeziehen, das Grid hat 5 Spalten. ClientWidth ist gleich Width - Rand - Scrollbar
Delphi-Quellcode:
var iFixCol : Integer;
begin iFixCol := 50; StringGrid1.DefaultColWidth := ((StringGrid1.ClientWidth-iFixCol) div 4) - StringGrid1.GridLineWidth; StringGrid1.ColWidths[0] := iFixCol+(StringGrid1.ClientWidth-iFixCol) mod 4; //.. showmessage('Achtung! Differenz: '+IntToStr(StringGrid1.Width-StringGrid1.ClientWidth)); |
Re: [StringGrid] berechnen d. Zellenbreite nach resize
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Lannes. :)
:thumb: funktioniert Super. Danke Mit
Delphi-Quellcode:
hatte ich es auch schon versucht, allerdings hatte mich die Hilfe ein wenig verwirrt
StringGrid.ClientWidth
Zitat:
Habs jetzt so gemacht
Delphi-Quellcode:
with JahresGrid do begin
// Höhe d. StringGridZellen iFixCol:= 12; DefaultRowHeight:= ((ClientHeight -iFixCol) div 12) -GridLineWidth; Jahresgrid.RowHeights[0]:= (iFixCol -1 {warum?}) +(ClientHeight -iFixCol) mod 12; // Breite d. Zellen iFixCol:= 55; DefaultColWidth:= ((ClientWidth -iFixCol) div 37) -GridLineWidth; ColWidths[0]:= (iFixCol -1) +(ClientWidth -iFixCol) mod 37; end; |
AW: [StringGrid] berechnen d. Zellenbreite nach resize
Bisl alt das Thema, aber:
danke Buddelfink für die Frage und Lannes für die Antwort. Erspart ein neues Thema :-D |
AW: [StringGrid] berechnen d. Zellenbreite nach resize
Wenn man einfach nur mit DIV arbeitet, passen die Spalten natürlich in das Grid, ohne das der Scrollbalken erscheint. Je nach Gridgröße entsteht dann aber am rechten Rand eine mehr oder weniger große weiße Fläche, die nicht zu einer Zelle gehört.
Wenn man immer die gesamte Gridfläche verwenden möchte, ohne das der Scrollbaken erscheint, verwendet man z.B. folgenden Code...
Delphi-Quellcode:
procedure StringGridResize(Grid: TStringGrid);
var i, w, cols, line:integer; begin cols:=Grid.ColCount; line:=Grid.GridLineWidth; w:=0; for i:=1 to cols do begin Grid.ColWidths[i-1]:= (Grid.Canvas.ClipRect.Right - w - (line * (cols - i))) div (cols - i + 1); w:=w + Grid.ColWidths[i-1] + line; end; end; |
AW: [StringGrid] berechnen d. Zellenbreite nach resize
omata - noch besser - danke dir! :thumb:
|
AW: [StringGrid] berechnen d. Zellenbreite nach resize
@Omata: zu früh gefreut, löscht leider den ganzen Inhalt.. :?
|
AW: [StringGrid] berechnen d. Zellenbreite nach resize
Wie/wo zeichnset du?
|
AW: [StringGrid] berechnen d. Zellenbreite nach resize
Zitat:
|
AW: [StringGrid] berechnen d. Zellenbreite nach resize
Ich weiß auch nicht, warum das passiert. Hab die Procedure mal aufgerufen, nu seh ich nur noch n blankes Canvas (zuerst nach dem Füllen der Zellen aufgerufen, danach davor - wegen des gelöschten Inhaltes). Naja, ich seh mir des nochmal genauer an.. :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 Uhr. |
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