AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Trotz Form1.Hide auf Screenshot mit StretchBlt zu sehen
Thema durchsuchen
Ansicht
Themen-Optionen

Trotz Form1.Hide auf Screenshot mit StretchBlt zu sehen

Ein Thema von PinKing2 · begonnen am 4. Mai 2009 · letzter Beitrag vom 6. Mai 2009
Antwort Antwort
Benutzerbild von PinKing2
PinKing2

Registriert seit: 9. Aug 2007
29 Beiträge
 
#1

Trotz Form1.Hide auf Screenshot mit StretchBlt zu sehen

  Alt 4. Mai 2009, 23:17
Hallo zusammen,

ich hab da mal eine Frage:

Ich habe 2 Forms, die eine dient als Umrandung für ein Screenshot und über die andere
Form starte ich den Screenshot per Button. Ich wollte jetzt, dass die Form, von wo aus
ich das Screenshot starte, nicht mit aufs Bild kommt und mache vor der Funktion StretchBlt()
ein Form1.Hide und danach wieder Form1.Show. Trotzdem ist auf sehr schnellen Rechnern
das Formular mit auf dem Bild. Kann man das irgendwie verhindern, ohne eine lange
Wartezeit zwischen Form1.Hide und StretchBlt() einzufügen?

Delphi-Quellcode:
Form1.Hide;

StretchBlt(ATarget.Canvas.Handle,
0,
0,
ATarget.Width,
ATarget.Height,
DesktopDC,
Form2.Left,
Form2.Top,
Form2.Width,
Form2.Height,
SRCCOPY);

Form1.Show;
Bin für jeden Tipp dankbar.

Liebe Grüsse,

Andy.

Delphi 2005 PE
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#2

Re: Trotz Form1.Hide auf Screenshot mit StretchBlt zu sehen

  Alt 4. Mai 2009, 23:56
Versuch mal ein Application.ProcessMessages; nach dem Form1.Hide .


Ansonsten gab's noch 'nen Befehl, welcher ein Neuzeichnen des Desktops veranlaßte, aber das braucht ja auch 'ne Zeit und es gibt keine sichere Methode rauszubekommen, ob und wann alle Programme ihre Fenster fert gezeichnet haben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Trotz Form1.Hide auf Screenshot mit StretchBlt zu sehen

  Alt 5. Mai 2009, 07:06
Ich würde ganz klar auf das fehlende Verarbeiten von Messages tippen. Die Methode Hide stößt nur das ausblenden an (schickt sozusagen eine Nachricht). Aber wenn die Nachricht gar nicht verarbeitet wird (machst du ja nirgends) so wird natürlich auch nix ausgeblendet.
Wie bereits erwähnt solltest du einfach mit Application.ProcessMessages dem Programm die Möglichkeit geben noch Nachrichten zu verarbeiten.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von PinKing2
PinKing2

Registriert seit: 9. Aug 2007
29 Beiträge
 
#4

Re: Trotz Form1.Hide auf Screenshot mit StretchBlt zu sehen

  Alt 5. Mai 2009, 23:30
Hi,

das mit ProcessMessages hatte ich schon mal versucht. Es ist zwar besser, aber
es kommt immer noch vor, dass man die Form mit auf das Bild bekommt. Dabei habe ich
festgestellt, dass, je mehr der PC ausgelastet ist (Delphi läuft z.B. ),
umso eher schafft man es die Form mit auf das Bild zu bekommen.

Anbei mal eine Beispieldatei, auf das Notwendigste reduziert. In Verzeichnis
liegt auch ein Screenshot, wo man sieht, dass es bei mir nicht geht.

Sonst noch jemand Ideen?

Gruss,

Andy.
Angehängte Dateien
Dateityp: zip stretchblt_132.zip (352,1 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#5

Re: Trotz Form1.Hide auf Screenshot mit StretchBlt zu sehen

  Alt 6. Mai 2009, 00:16
Zitat von PinKing2:
das mit ProcessMessages hatte ich schon mal versucht. Es ist zwar besser, aber
es kommt immer noch vor, ...
Das Problem ist nicht, daß deine Form noch sichtbar ist, sondern daß die Form(en) dahinter sich noch nicht neu gezeichnet haben und somit noch das Abbild deiner Form auf diesen sichtbar ist.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von PinKing2
PinKing2

Registriert seit: 9. Aug 2007
29 Beiträge
 
#6

Re: Trotz Form1.Hide auf Screenshot mit StretchBlt zu sehen

  Alt 6. Mai 2009, 06:28
Aha,und nun?

Gibts ne Funktion oder nen Trick für ein globales Refresh?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#7

Re: Trotz Form1.Hide auf Screenshot mit StretchBlt zu sehen

  Alt 6. Mai 2009, 10:23
ob es einen globalen Befehl gibt, weiß ich jetzt nicht, aber im Grunde muß du nur an alle Fenster einen Refrech-Befehl senden

hätte es jetzt irgendwie so vermutet, aber Delphi zeichnet sich nicht neu
SendMessage(HWND_BROADCAST, WM_PAINT, 0, 0); aber wie schon gesagt, du kannst den anderen Programmen nur sagen DAS sie sich neu zeichen sollen, aber OB/WANN die es machen, ist damit nicht sichergestellt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von PinKing2
PinKing2

Registriert seit: 9. Aug 2007
29 Beiträge
 
#8

Re: Trotz Form1.Hide auf Screenshot mit StretchBlt zu sehen

  Alt 6. Mai 2009, 18:23
Also ich hab das jetzt mal eingebaut, und bei mir scheint es zu funktionieren.
Zumindest auf meinem PC, ich muss das jetzt noch mal auf anderen PCs testen, da ich vorher
auch schon ein paar Mal dachte ich hätte ne Lösung gefunden und auf anderen PCs tat es dann
nicht.

Auch wenn ich nicht weiss, ob es jetzt die endgültige Lösung ist: Vielen Dank für den Tipp!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#9

Re: Trotz Form1.Hide auf Screenshot mit StretchBlt zu sehen

  Alt 6. Mai 2009, 20:33
Ich würde danach noch 'nen Sleep(0) einfügen, damit dein Programm erst nochmal kurz die CPU an andere Programme abgibt, oder eventuell gleich ein Sleep(20), damit die anderen Programme nich ein paar Zyklen mehr Zeit haben, um sich neu zu zeichnen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 02:05 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