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