Gibt's eine Möglichkeit einem Formular zu sagen es soll sich doch mal auf ein bestimmtes Canvas zeichnen?
Hintergrund: Ich möchte Fenster gleitend einblenden, d.h. man drückt auf einen Button und der assoziierte Dialog (eine TForm) kommt mit einer Animation aus dem Button flüssig "rausgezoomt".
(Angelehnt an die Apple-Animation wenn man ein Explorer-Fenster öffnet indem man auf ein Festplatten-Symbol klickt - da vergrössert sich das Explorer-Fenster scheinbar aus dem Symbol heraus).
Um die Animation schön und flüssig aussehen zu lassen muss ich wissen wie das Fenster am Ende aussieht. Dynamisches Vergrössern des Formulars ist VIEL zu langsam, da wird die Animation lahm wenn mehr am Formular ist.
Ich hab bisher nur folgende Lösung gefunden:
Delphi-Quellcode:
OffscreenXCoord:=GetMaxDesktopXPos; // 0..MonitorCount-1, max(Monitor[i].Left+Monitor.Width)
Form2.Left:=OffscreenXCoord;
Form2.Show;
Form2.Repaint;
CaptureFormGraphic(Form2, bmp); (GetWindowDC, bmp.Canvas.CopyRect)
Form2.Hide;
Form2.Left:=OriginalLeft;
...animation to Form2.BoundsRect...
Form2.ShowModal;
Blöderweise stellt sich heraus, dass der Screenshot in dem Fall leer bleibt. Platziere ich das Formular zur Hälfte offscreen hab ich einen halben Screenshot und zur hälfte weisse Fläche.
Sende ich WM_ERASEBKGND und WM_PAINT ans Fenster, wird zwar der Hintergrund nicht aber die WinControls gezeichnet (und keine Ahnung ob das bei einem verstecktem Fenster überhaupt geht)
Also: geht das? (Wie) Kann ich einem Fenster sagen: "Zeichne dich mal hier drauf!"?
Oder sollte man solche Animationen generell anders erledigen?
Danke!!!