![]() |
Screenshot einer versteckten Form (oder so)
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:
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.
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; 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!!! |
AW: Screenshot einer versteckten Form (oder so)
Hallo,
![]() könnte das sein was du suchst. Sofern keine ActiveX Controls drauf sind, sollte das gehen. habe ich übrigens so gefunden: ![]() |
AW: Screenshot einer versteckten Form (oder so)
Mit folgender Routine kann man auch von unsichtbaren Formularen Screenshots erzeugen:
Delphi-Quellcode:
Quelle:
procedure PrintWindow(Wnd: HWND; ATo: TBitmap);
var hDCMem : HDC; DC : HDC; rect : TRect; bmp : HBITMAP; hOld : HGDIOBJ; begin hDCMem:=CreateCompatibleDC(0); GetWindowRect(Wnd, rect); bmp:=0; DC:= GetDC(Wnd); bmp:= CreateCompatibleBitmap(DC, rect.Right-rect.Left, rect.Bottom-rect.Top); ReleaseDC(Wnd, DC); hOld:=SelectObject(hDCMem, bmp); SendMessage(wnd, wm_Print, hDCMem, PRF_CHILDREN or PRF_CLIENT or PRF_ERASEBKGND or PRF_NONCLIENT or PRF_OWNED); selectObject(hDCMem, hold); DeleteObject(hDCMem); ATo.FreeImage; ATo.Handle:=bmp; end; ![]() |
AW: Screenshot einer versteckten Form (oder so)
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 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