Entwickler-Ecke
Sonstiges (Delphi) - noch mal Formular scalieren
Peter18 - Mo 29.01.18 12:06
Titel: noch mal Formular scalieren
Ein freundliches Hallo an alle,
nachdem die Scalierung des Hauptformulars ganz gut funktioniert wollte ich das Prinzip auf die Modal-Formulare übertragen: Banane!!!
Die Modal-Formulare werden mit Rollbalken gezeigt. Sie haben die Größe, wie zur Entwicklungszeit, auch bei den Werten "Height" und "Width". In den Rollbalken sind unter "Range" die gleichen Werte zu finden. Ich kann nun das Formular mit der Maus auf die richtige Größe ziehen, würde es aber lieber gleich in der richtigen Größe zeigen.
Muß ich mir die Größe selbst ausrechnen, oder sind sie irgendwo versteckt (hab sie noch nicht gefunden)??
Grüße von der regnerischen Nordsee
Peter
Delete - Mo 29.01.18 18:22
- Nachträglich durch die Entwickler-Ecke gelöscht -
Peter18 - Mo 29.01.18 18:58
Hallo Frühlingsrolle,
Dank Dir für Deine Antwort, aber so weit war ich mit meiner Frage auch. Ich möchte das Formular in der Größe anzeigen, dass die Rollbalken verschwinden wenn Windows alles umscaliert.
Grüße von der noch immer regnerischen Nordsee
Peter
Delete - Mo 29.01.18 21:59
- Nachträglich durch die Entwickler-Ecke gelöscht -
Peter18 - Di 30.01.18 15:50
Hallo Frühlingsrolle,
Dank Dir nochmals! Ich hatte gehofft, es gäbe eine einfachere Lösung. Aber dann könnt es ja jeder.
Zur Scalierung hat sich eine weitere Frage ergeben. Dafür mach ich aber eine neue Frage auf.
Grüße von der sonnigen Nordsee
Peter
Peter18 - Di 30.01.18 18:20
Hallo Frühlingsrolle und alle,
hier eine Lösung die schneller geht und unsichtbar machen erübrigt vor allem, wenn sie In OnShow verwendet wird:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| function TDatEdit.FormHeight( I : Integer ): Integer; begin if I > 0 then while GetWindowLong(Handle, GWL_STYLE) and WS_HSCROLL <> 0 do Width := Width + I else while GetWindowLong(Handle, GWL_STYLE) and WS_HSCROLL = 0 do Width := Width + I; if I <> 1 then FormHeight( -(I div 2) ); end;
function TDatEdit.FormWidth ( I : Integer ): Integer; begin if I > 0 then while GetWindowLong(Handle, GWL_STYLE) and WS_VSCROLL <> 0 do Height := Height + I else while GetWindowLong(Handle, GWL_STYLE) and WS_VSCROLL = 0 do Height := Height + I; if I <> 1 then FormWidth( -(I div 2) ); end; |
Die Routinen werden rekursiv durchlaufen und arbeiten nach dem Verfahren der binären Suche. Der Wert "I" muß beim ersten Aufruf also eine X-Fache Verdoppelung von 1 sein z.B. 20.
Die Routine macht 20-ger Sprünge, bis der Rollbalken weg ist, dann 10-er Sprünge, bis err wieder da ist und so weiter. Die Routine terminiert, wenn "I=1" ist.
Hinweis: Anker werfen ist nur oben und links gut, sonst droht eine Endlosschleife!!!
Grüße von der Nordsee
Peter
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!