AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Ich muss für aktuellen Screenshot immer 2x drücken

Ich muss für aktuellen Screenshot immer 2x drücken

Ein Thema von Mariaki · begonnen am 21. Okt 2009 · letzter Beitrag vom 21. Okt 2009
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Mariaki
Mariaki

Registriert seit: 21. Sep 2008
64 Beiträge
 
RAD-Studio 2010 Arc
 
#1

Ich muss für aktuellen Screenshot immer 2x drücken

  Alt 21. Okt 2009, 16:57
Hi,
ich hab vor einen Screenshot zu machen und ihn dann anzuzeigen lassen/ zu speichern.
Dazu habe ich folgenden Quelltext gemacht:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  keybd_event(VK_SNAPSHOT, 0, 0, 0);
  keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0);
  if Clipboard.HasFormat(CF_BITMAP) then
  begin
    Image1.Picture.Bitmap.Assign(Clipboard);
  end;
end;
Um ganzen Prozeduren für den Screenshot auszuweichen, simuliere ich einfach die Druck-Taste.
Nun wird aber immer der alte Screenshot (von dem davor) angezeigt. D.h.:
1. Nichts passiert, da scheinbar kein Screenshot im Zwischenspeicher ist.
2. Screenshot vom 1. mal wird angezeigt, falls sich also etwas verändert hat ist das noch nicht drin.
3. Screenshot vom 2. mal wird angezeigt.
Usw.
Dies ist ein wenig dumm, da ich den Screenshot ja schon beim ersten mal haben möchte. Ich habe schon versucht, es einfach zu verdoppeln, also 2x "keyboard_event...end;". Außerdem hab ich versucht mittels "Sleep(10000)" eine Verzögerung dazwischen zu bekommen, falls der Screenshot ein wenig Bearbeitung benötigt. Hat aber beides nicht funktioniert.
Ich hoffe einer von euch hat eine Lösung.

Gruß Mariaki
Benedikt
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

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

Re: Ich muss für aktuellen Screenshot immer 2x drücken

  Alt 21. Okt 2009, 17:01
Ganz einfach: Die Screenshot-Taste muss ja auch erstmal behandelt und (infolge dessen) ein Screenshot gemacht werden. Du sendest einfach nur das Event, das kommt dann in die Queue und wird bei Gelegenheit verarbeitet

Bessere Lösung (die außerdem nicht die Zwischenablage missbraucht und den vorherigen Inhalt löscht) wie folgt:

mit GetDesktopWindow() und GetDC() den DC besorgen und mit BitBlt in ein Bitmap (TBitmap Objekt) kopieren
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Ich muss für aktuellen Screenshot immer 2x drücken

  Alt 21. Okt 2009, 17:03
Hm, stell dir mal folgenden Fall vor:

Dein Programm läuft - warum auch immer - im Hintergrund und der User sucht im Internet etwas bei Wikipedia raus. Dort kopiert er eine Grafik und möchte sie in Word einfügen. Zufällg macht dein Programm in diesem moment ein screenshot und der werte User bekommt dann in Word nicht die Grafik angezeigt sondern seinen eigenen Bildschirm...nicht so toll oder?

Benutze lieber:

Delphi-Quellcode:
procedure MakeScreenShot(const ATarget: TBitmap);
var
  DesktopDC: HDC;
begin
  DesktopDC := CreateDC('DISPLAY', nil, nil, nil);
  try
    ATarget.PixelFormat := pfDevice;
    ATarget.Width := Screen.Width;
    ATarget.Height := Screen.Height;

    BitBlt(ATarget.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DesktopDC, 0, 0, SRCCOPY);
  finally
    DeleteDC(DesktopDC);
  end;
end;
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von Mariaki
Mariaki

Registriert seit: 21. Sep 2008
64 Beiträge
 
RAD-Studio 2010 Arc
 
#4

Re: Ich muss für aktuellen Screenshot immer 2x drücken

  Alt 21. Okt 2009, 17:19
Danke schon mal.
Aber wie lasse ich das dann in einem Image anzeigen?
Benedikt
Warum merken die ganzen Christen eigentlich nicht, dass Gott veraltet ist. Zur Zeit von Jesus war er ein gutes Medium um Moral zu verbreiten.. aber Heute?!?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.536 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Ich muss für aktuellen Screenshot immer 2x drücken

  Alt 21. Okt 2009, 17:23
Delphi-Quellcode:
var Bmp: TBitmap;
begin
  Bmp := TBitmap.Create;
  try
    MakeScreenShot(Bmp);
    Image.Picture.Graphic.Assign(Bmp);
  finally
    Bmp.Free;
  end;
end;
Ungetestet
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Mariaki
Mariaki

Registriert seit: 21. Sep 2008
64 Beiträge
 
RAD-Studio 2010 Arc
 
#6

Re: Ich muss für aktuellen Screenshot immer 2x drücken

  Alt 21. Okt 2009, 17:29
Da bekomme ich eine Zugrifsverletzung.
Benedikt
Warum merken die ganzen Christen eigentlich nicht, dass Gott veraltet ist. Zur Zeit von Jesus war er ein gutes Medium um Moral zu verbreiten.. aber Heute?!?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.536 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Ich muss für aktuellen Screenshot immer 2x drücken

  Alt 21. Okt 2009, 17:31
Und wo genau?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Mariaki
Mariaki

Registriert seit: 21. Sep 2008
64 Beiträge
 
RAD-Studio 2010 Arc
 
#8

Re: Ich muss für aktuellen Screenshot immer 2x drücken

  Alt 21. Okt 2009, 17:37
Ah.. danke schon selbst gefunden:
Man muss anstatt "Image.Picture.Graphic.Assign(Bmp);" "Image.Picture.Bitmap.Assign(Bmp);" nehmen da es ja ne Bitmap ist.
Jo.. danke an alle.
Benedikt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Ich muss für aktuellen Screenshot immer 2x drücken

  Alt 21. Okt 2009, 18:12
geht denn Image.Picture.Assign(Bmp); nicht?
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 DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.536 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Ich muss für aktuellen Screenshot immer 2x drücken

  Alt 21. Okt 2009, 18:24
Müsste, ich hatte ja auch nur so aus dem Kopf getippt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:18 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