AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Screenshot einer versteckten Form (oder so)

Ein Thema von ralfiii · begonnen am 9. Aug 2010 · letzter Beitrag vom 9. Aug 2010
Antwort Antwort
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#1

Screenshot einer versteckten Form (oder so)

  Alt 9. Aug 2010, 12:13
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!!!
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

AW: Screenshot einer versteckten Form (oder so)

  Alt 9. Aug 2010, 12:18
Hallo,
http://msdn.microsoft.com/en-us/libr...16(VS.85).aspx
könnte das sein was du suchst.
Sofern keine ActiveX Controls drauf sind, sollte das gehen.
habe ich übrigens so gefunden: http://www.google.de/search?q=windows+message+paint+dc Vielleicht ist da noch mehr hilfreiches
  Mit Zitat antworten Zitat
Benutzerbild von MarcoWarm
MarcoWarm

Registriert seit: 10. Sep 2003
Ort: Großhennersdorf
532 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: Screenshot einer versteckten Form (oder so)

  Alt 9. Aug 2010, 12:26
Mit folgender Routine kann man auch von unsichtbaren Formularen Screenshots erzeugen:

Delphi-Quellcode:
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;
Quelle: http://code.google.com/p/theunknowno.../uSysTools.pas
Marco Warm
TUO
TheUnknownOnes.net
  Mit Zitat antworten Zitat
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Screenshot einer versteckten Form (oder so)

  Alt 9. Aug 2010, 13:46
Mit folgender Routine kann man auch von unsichtbaren Formularen Screenshots erzeugen:
<Snip>
Genial, danke!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz