![]() |
AW: Mehrere Formulare an Stringgridgröße anpassen
Zitat:
Letztlich ist auch eine Unit ein Modul, und zwar eines, das meistens Code für ziemlich viel Aufgaben enthält und i.d.R. auch durchführt. Zitat:
Zitat:
Zitat:
|
AW: Mehrere Formulare an Stringgridgröße anpassen
Zitat:
In dem Buch "Clean Code: A Handbook of Agile Software Craftsmanship" von Robert C. Martin wird das ausführlich beschrieben. ![]() |
AW: Mehrere Formulare an Stringgridgröße anpassen
@sx2008
wenn ich die Kurzzusammenfassung lese, kann ich mich den wenigsten Punkten uneingeschränkt anschließen. |
AW: Mehrere Formulare an Stringgridgröße anpassen
Zitat:
Und die Kurzzusammenfassung kann die Überzeugungsarbeit des Buches nicht bei weitem leisten, dazu ist sie einfach zu knapp :) |
AW: Mehrere Formulare an Stringgridgröße anpassen
Zitat:
Letztlich ist es doch auch (und gerade?) im Bereich der Programmierung, der Informatik, wie übrigens in jeder Wissenschaft, in jedem Fachgebiete, so, daß alle möglichen, teilweise sogar konträre Meinungen aufeinanderprallen - manchmal sogar mehr, als es Diskutanten gibt. Natürlich kann man Programmaufgaben so weit "herunterbrechen" (schönes Modewort), daß zum Schluß fast nur noch die einzelne Anweisung übrigbleibt. Hinsichtlich der Fehleranfälligkeit, Übersichtlichkeit und Wartbarkeit des Quelltextes, der Größe und Ablaufgeschwindigkeit des Compilates u.ä. Größen mag das aber nicht gerade Optimum sein - und schon gar nicht pauschal. |
AW: Mehrere Formulare an Stringgridgröße anpassen
Zitat:
Sooo simpel ist es also wohl nicht, womit auch die Frage nach dem Warum beantwortet ist. |
AW: Mehrere Formulare an Stringgridgröße anpassen
Zitat:
Aber vielfach ist Programmieren ein Kampf gegen Komplexität. Man hackt sie in Teile, packt sie in Boxen und wendet abstrakte (und damit einfachere) Konzepte auf sie an, um Probleme zu lösen, die man im Ganzen nicht fassen kann. Dabei sollte man sich (ohne vernünftigen Grund) nicht selbst in den Rücken fallen. Warum sind zum Beispiel funktionale Programmiersprachen zur Zeit für viele interessant: Seiteneffektfreiheit. Das Beschränken einer Funktion/Prozedur auf eine Aufgabe könnte man als schwächeres verwandtes Konzept verstehen. Es kann zwar Seiteneffekte geben, aber diese sollten sich nur auf für Entwickler erwartbare Teile des Programms auswirken. Zitat:
Da bist du den Fehler gefunden hast ... |
AW: Mehrere Formulare an Stringgridgröße anpassen
Ist da eigentlich die Ausgangsfrage richtig gestellt?
Das Formular an ein StringGrid anpassen ist ja eine Kleinigkeit (ClientWith auf StrigGrid.Width oder Form.AutoSize wurde ja schon genannt). Nur beides ist natürlich wenig hilfreich, bei den tatsächlichen Wünschen des TS, wie schon festgestellt wurde. Bei AutoSize passt sich das Formular an die StringGrid-Breite an, egal wie sinnvoll die aktuelle StringGrid-Breite eingestellt ist. Gleiches natürlich bei manuellem setzen von ClientWidth. Die Frage lautet also... Wie ermittele ich die optimale Breite/Höhe eines StringGrid, damit die Spalten und Zeilen optimal (ohne Scrollbalken und ohne Leerräume) angezeigt werden? Die Frage nach der Client Breite/Höhe des Formulars ist also völlig unnötig, den die ist nach Klärung der tatsächlichen Frage beantwortet. *** Eine mögliche Funktion müsste also etwa so aussehen, wie blauweiss schon im Ansatz gezeigt hat:
Delphi-Quellcode:
Mit Size.cx/cy wird dann einfach ClientWidth/ClientHeight des Formulars gesetzt, für eine momentane Anpassung des Formulars oder Form.AutoSize für eine permanente.
function BestStringGridSize(aStringGrid : TStringGrid): TSize;
var i : Integer; begin with aStringGrid do begin Result.cx := 0; for i := 0 to ColCount -1 do inc(Result.cx, ColWidths[i]); inc(Result.cx, (GridLineWidth * (ColCount -1))); Result.cy := 0; for i := 0 to RowCount -1 do inc(Result.cy, RowHeights[i]); inc(Result.cy, (GridLineWidth * (RowCount -1))); end; // Add default Bevel Border inc(Result.cx, 4); inc(Result.cy, 4); end; Wenn das StringGrid nicht optimal passt (also ohne Scrollbalken und ohne Leerraum), war die Berechnung zu ungenau und muss optimiert werden. Ich denke also auch, das der Ansatz von blauweiss der richtige ist. Problem könnten Unterschiedliche Designs von XP/VISTA/Win7 werden... auf ein BevelKind-Stil sollte dann verzichtet werden, um es nicht noch schwerer zu machen. |
AW: Mehrere Formulare an Stringgridgröße anpassen
Hallo Delphi-Laie,
Zitat:
Delphi-Quellcode:
Mein Vorschlag:
for l:=0 to pred(StringGrid.ColCount) do StringGrid.ColWidths[l]:=Zellenbreitenzuschlag+StringGrid.Canvas.TextWidth(StringGrid.Cells[l,0]); //Skalieren nach Tabellenkopf
for l:=0 to pred(StringGrid.ColCount) do for m:=1 to pred(StringGrid.RowCount) do if StringGrid.ColWidths[l]<Zellenbreitenzuschlag+StringGrid.Canvas.TextWidth(StringGrid.Cells[l,m]) then StringGrid.ColWidths[l]:=Zellenbreitenzuschlag+StringGrid.Canvas.TextWidth(StringGrid.Cells[l,m]);
Delphi-Quellcode:
Dein Code ist nicht effizienter, sondern 1. unleserlich und 2. weniger performant, da bei Dir x-mal die Spaltenbreite eines StringGrids geändert wird, bei mir nur 1-mal.
procedure MinimizeColWidths(aStringGrid: TStringGrid);
var x, y: integer; onewidth, biggestwidth: integer; begin with aStringGrid do for x := 0 to ColCount-1 do begin biggestwidth := 0; for y := 0 to RowCount-1 do begin onewidth := Canvas.TextWidth(Cells[x, y]); if (onewidth > biggestwidth) then biggestwidth := onewidth; end; ColWidths[x] := biggestwidth + 6; end; end; // MinimizeColWidths Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
1. Setzen von ClientWidth und ClientHeight des StringGrid funktioniert nur dann wie gewünscht, wenn StringGrid.ScrollBars = ssNone 2. TForm.AutoSize scheint tatsächlich ein Problem damit zu haben, die Größe des Forms zu vergrößern, um alle Controls darzustellen. Verkleinern funktioniert aber. Also bietet es sich an, die Form-Größe auf einen hinreichend großen Wert zu setzen und dann AutoSize auf true zu schalten. Siehe auch unten. Zitat:
Delphi-Quellcode:
Grüße,
aForm.AutoSize := true;
aForm.AutoSize := false; blauweiss |
AW: Mehrere Formulare an Stringgridgröße anpassen
Zitat:
Der Löwenanteil an der Langsamkeit meines Codes steckt allerdings in der Größenanpassung des Formulares: Pixelweise (!) wird dessen Größe verändert und jedesmal das Vorhandensein eines Scrollbalkens geprüft. Dafür ist das Formualar dann aber auch exakt angepaßt. Nur nach der Stringgridgröße zu gehen, funktioniert nämlich aufgrund der verschiedenen "Themes" in XP, Vista, 7 & Co. (Luna, Aero...) nicht so, wie es mir vorschwebt. Zitat:
Zitat:
Gruß Delphi-Laie |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:32 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