AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Problem bei Screenshoterstellung mit Image-Kompo
Thema durchsuchen
Ansicht
Themen-Optionen

Problem bei Screenshoterstellung mit Image-Kompo

Ein Thema von mlspider · begonnen am 27. Jul 2006 · letzter Beitrag vom 27. Jul 2006
Antwort Antwort
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#1

Problem bei Screenshoterstellung mit Image-Kompo

  Alt 27. Jul 2006, 15:53
Ich versuche ein Screenshot mit folgendem Code zu machen:

Delphi-Quellcode:
procedure TCover.ScreenToFile(aFileName: string);
var
  Bitmap: TBitmap;
  JPG : TJPEGImage;
  Canvas: TCanvas;
begin
  Canvas := TCanvas.Create;
  try
    Canvas.Handle := GetWindowDC(0);
    Application.ProcessMessages;
    try
      Bitmap := TBitmap.Create;
      Application.ProcessMessages;
      JPG := TJPEGImage.Create;
      Bitmap.PixelFormat:=pf32bit;
       Application.ProcessMessages;
      try
        Bitmap.Width := Screen.DesktopWidth;
        Bitmap.Height:= Screen.DesktopHeight;
        Bitmap.PixelFormat := pfDevice;
         Application.ProcessMessages;
        BitBlt(Bitmap.Canvas.Handle, 0, 0, Pred(Screen.DesktopWidth), Pred(
        Screen.DesktopHeight), Canvas.Handle, Screen.DesktopLeft,
        Screen.DesktopTop, Bitmap.Canvas.CopyMode);
        Application.ProcessMessages;
//Kompression
        JPG.CompressionQuality:=50;
        JPG.Assign(Bitmap);
        Application.ProcessMessages;
        if fileexists(aFileName) then
          deletefile(aFileName);
        JPG.SaveToFile(aFileName);
      finally
//Größe
       //resizepictur(aFileName,300,300);
        Bitmap.Free;
        JPG.Free;
      end;
    finally
      ReleaseDC(0, Canvas.Handle);
      Application.ProcessMessages;
    end;
  finally
    Canvas.Free;
  end;
end;
Der Aufruf:

Delphi-Quellcode:
procedure TCover.JvTransparentButton1Click(Sender: TObject);
begin
 ScreenToFile('Screen1.jpg');
end;
Die in einer Image-Kompo zur Laufzeit über OpenPictureDialog geladenen Bilder werden einfach ignoriert. Lege ich ein Bild zur Entwurfszeit fest, funktioniert alles wunderbar.

Wo könnte der Haken sein?
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Problem bei Screenshoterstellung mit Image-Kompo

  Alt 27. Jul 2006, 16:13
Zeige doch mal den Code, der nicht funktioniert. Deine Prozedur ScreenToFile() scheint ja keine Probleme zu haben - wenn ich dich richtig verstehe. Die Aufrufe von Application.ProcessMessages kannst du dir wohl schenken und auch das vorsorgliche Löschen einer etwa bereits vorhandenen Ausgabedatei dürfte nichts bringen.

marabu
  Mit Zitat antworten Zitat
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Problem bei Screenshoterstellung mit Image-Kompo

  Alt 27. Jul 2006, 16:19
Das war schon die gesamte Procedur die für den Sreen zuständig ist. Leider werden zur Laufzeit geladene Bilder ignoriert und durch das schon zur Entwurfszeit festgelegte Bild ersetzt.
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Problem bei Screenshoterstellung mit Image-Kompo

  Alt 27. Jul 2006, 16:35
Ich kann dir gerade nicht so recht folgen. Du hattest von einem OpenPictureDialog geschrieben, über den du zur Laufzeit ein Bild in eine TImage-Komponente lädst. Das hat doch mit deiner Speicher-Routine nichts zu tun?

Funktioniert deine Routine ScreenToFile() nun oder vermutest du darin einen Fehler?

marabu
  Mit Zitat antworten Zitat
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Problem bei Screenshoterstellung mit Image-Kompo

  Alt 27. Jul 2006, 16:43
Ja, ich lade zur Laufzeit über OpenPictureDialog ein Bild in die besagte Image-Kompo. Die Routine verhält sich so, wie sie sein soll. Es wird alles "abgelichtet" bis auf das geladene Bild. Ich schmeiß meinen Rechner gleich aus dem Fenster.
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Problem bei Screenshoterstellung mit Image-Kompo

  Alt 27. Jul 2006, 16:46
Was meinst du mit besagter Image-Komponente? Etwa TCover?

marabu
  Mit Zitat antworten Zitat
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Problem bei Screenshoterstellung mit Image-Kompo

  Alt 27. Jul 2006, 16:50
Nein, TImage. Vielleicht liegt es daran, daß ich das Form als verfügbares Formular bereitstelle?
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Problem bei Screenshoterstellung mit Image-Kompo

  Alt 27. Jul 2006, 17:03
Hallo Mario,

heute ist wohl nicht mein Tag. Ich erkenne einfach nicht, was deine TImage-Komponente mit dem gezeigten Code zu tun haben soll. Eine funktionierende Funktion (GrabImage) um den Bildschirminhalt in ein Bitmap zu speichern habe ich dir in einem anderen thread schon angeboten. Die Zuweisung per Assign an ein JPegImage dürfte kein Problem darstellen.

Delphi-Quellcode:
var
  jpg: TJpegImage;
  bm: TBitmap;
begin
  bm := GrabImage(GetDesktopWindow);
  with TJpegImage.Create do
  begin
    // ...
    Assign(bm);
    if SaveDialog.Execute then
      SaveToFile(SaveDialog.FileName);
    Free;
  end;
  bm.Free;
end;
Deprimierte Grüße

marabu
  Mit Zitat antworten Zitat
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Problem bei Screenshoterstellung mit Image-Kompo

  Alt 27. Jul 2006, 17:13
@marabu. Mein Tag scheint dies heute auch nicht zu sein. Das Problem war so banal, dass man schon wieder drüber lachen könnte.

Vorher:

Delphi-Quellcode:
procedure TCover.JvTransparentButton1Click(Sender: TObject);
begin
 ScreenToFile('Screen1.jpg');
end;
Nachher:

Delphi-Quellcode:
procedure TCover.JvTransparentButton1Click(Sender: TObject);
begin
 ScreenToFile('C:\Screen1.jpg');
end;
Es wurde immer das aktuelle Screen erzeugt. Nur ohne Pfadangabe verrirrt sich jederman auf seinen Festplatten.

Trotzdem Danke für Deine Kopfschmerzen. Das Wetter kann einen ja auch auf dem Keks gehen.

Beste Grüße

Mario
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  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 13: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