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.
Zweites ist richtig, wie ich nunmehr einsehe. Ich werde die Spaltenbreitenanpassung des Stringgrids diesbezüglich verändern (es zumindest versuchen). Edit: Es gelang. Allerdings sehe ich es weiterhin als ein wenig günstiger an, die Spaltenbreitenmessung nicht einzunullen, sondern gleich mit den Zellenbreiten irgendeiner Zeile (beispielsweise mit den Einträgen des Tabellenkopfes) zu beginnen.
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.
Das mit dem Constrain stimmt: Das Fenster ist merkwürdigerweise auf 112 Pixel (das Minimum) voreingestellt, so daß die Dekrementierungsschleife natürlich endlos wird. Merkwürdig, wenn die Codezeilen direkt verwende, funktionieren sie tadellos.... Danke auch für diesen Hinweis!
Ich will Dir nicht zu nahe treten, aber das halte ich für ausgeschlossen.
112 Pixel als Formularbreite lassen sich nach meiner Recherche nicht unterschreiten. Doch das ist ohnehin obsolet, weil der Prozeduraufruf fehlerhaft war.
Deine Reaktion auf Foristen, die Dir helfen wollen, ist ungewöhnlich. Die Herangehensweise an Deine Probleme, Deine Problembeschreibungen sowie die Reaktion auf Vorschläge Anderer scheint mir nicht professionell. Das ist nicht überheblich, denn Du wirst wohl nicht professionell (beruflich) programmieren, oder ?
Diese wohl eher rhetorisch gemeinte Frage dürfte schon mein selbstredendes Pseudonym beantworten. Nun, ich fragte ursprünglich, wie man die Formulargrößeanpassung in einem Unterprogramm vereinigen, zentralisieren kann, so daß man den dafür relevanten Code nicht mehrmals im Programm aufführen muß. Den entscheidenden Hinweis dazu erhielt ich (auf den ich nicht kam und auch nie gekommen wäre, weil er mit meinen aus Turbo-Pascal-Zeiten erworbenen Pascal-Kenntnissen nicht kompabitbel ist). Das andere, was hier zusätzlich noch kam, fragte ich gar nicht, doch auch das nehme ich als Anregungen gern und dankend mit und probiere auch einen Großteil davon aus und übernehme es ggf. - auch wenn ich mich nicht zu allem äußere. Du kannst aber nicht erwarten, daß ich
alles, was ich an Hinweisen bekomme, auch umsetze oder auch nur vorbehaltlos und unkritisch gutheiße, nur, weil Du vielleicht ein (studierter) Informatiker und/oder ein beruflicher Programmierer bist. Zudem weiß ich, welche Mühe eine Forumstätigkeit schon dann macht, wenn man um die fachlichen Antworten nicht verlegen ist, und weiß deshalb Hilfe durchaus zu schätzen (schau mal, in wievielen Diskussionen nicht einmal ein einziger Dank kommt!). Solltest Du anzudeuten beabsichtigen, daß ich undankbar und/oder ein unbelehrbarer Sturkopf sei, dann verwahre ich mich dagegen.
Gruß
Delphi-Laie