Fehler beim erstellen eines Scrennshotes (zu wenige Parameter)
-
Hi,
//To make a screen of the aktuell Screen void __fastcall TForm1::MakeScreenShot(HWND hwnd) { TCanvas *canvas = new TCanvas(); TJPEGImage *jpg = new TJPEGImage(); canvas->Handle = GetWindowDC(hwnd); TRect Source; GetWindowRect(hwnd, (LPRECT)&Source); Source = Rect(0, 0, Source.Right - Source.Left, Source.Bottom - Source.Top); Graphics::TBitmap *bmp = new Graphics::TBitmap(); bmp->Width = Source.Width(); bmp->Height = Source.Height(); bmp->PixelFormat = pf24bit; bmp->Canvas->CopyRect(Source, canvas, Source); jpg->Assign(bmp); jpg->SaveToFile("test.jpg"); delete jpg; delete bmp; delete canvas; }
Das ist meine Screenshotfunction. Aufrufen tue ich das mit dieser:
MakeScreenShot(GetDesktopWindow());
So warum übergebe ich zu wenige Parameter??
Hier noch die Fehlermeldung. Was ich nicht verstehe warum der ein Timage will das habe ich doch rausgenommen weil ich den Screnn gar nicht angezeigt haben will sondern nur in einer Datei ablegen will.
[C++ Fehler] main.cpp(51): E2193 Zu wenige Parameter im Aufruf von '_fastcall TForm1::MakeScreenShot(void *,TImage *)'
[C++ Fehler] main.cpp(59): E2316 '_fastcall TForm1::MakeScreenShot(void *)' ist kein Element von 'TForm1'mfg
wdsl
-
Vergleiche doch mal Funktionsdeklaration und funktions Definition miteinander... Alleine schon, wenn du die beiden Meldungen (gleich nacheinander) liest, sollten eigentlich einige Alarmglocken klingeln...
-junix
-
achso das geht gar nicth ohne ein Timage. Ist irgendwie dumm ;-/ naja eigentlich stört das Feld auch net.
mfg
wdsl
-
Doch doch, wenn du den Quelltext statt nur zu kopieren auch analysieren würdest, dann würdest du merken, dass das TImage nicht zwingend benötigt wird.
-junix
-
hallo,
also wdsl ich weiß´nicht was du hast, der quelltext funktioniert ohne jede warnung, und ich hab jetzt mal den quelltext so wie du ihn in den thread gestellt hast nur kopiert, und das ding funktioniert. das einzige was ich gemacht habe ist:
#include <jpeg.hpp>
also wie gesagt, ich verstehe auch nicht was junix meint was da "ganz klar" von der compiler-meldung her einleuchten sollte. wie gesagt, aus dem thread rauskopiert -> #include eingebaut und die datei test.jpg wurde im bin-verzeichnis des builder abgelegt (da ich die anwendung noch nicht gespeichert habe). es gibt in diesem listing definitiv keinen fehler!!!
mfg
murph
-
Der Fehler liegt bzw. lag offensichtlich in der Methoden-Deklaration (in der Header-Datei), die vermutlich über einen zusätzlichen Parameter (TImage) verfügt(e).
-
murphy schrieb:
also wie gesagt, ich verstehe auch nicht was junix meint was da "ganz klar" von der compiler-meldung her einleuchten sollte.
...lies die Fehlermeldungen nochmal. Er hatte die Deklaration der Funktion anders als die Definition hingeschrieben...
-junix
-
Hallo.
in Delpih hab ich's grad mal versucht, sowas ähnliches, aber ich bekomme nur nen Screenshot vom Fenster, nicht vom Desktop, was hab ich falsch gemacht?
procedure TForm1.Button1Click(Sender: TObject); var rect: TRect; begin GetWindowRect(GetDesktopWindow(),rect); Image1.Picture.Bitmap.Width:=ClientWidth; Image1.Picture.Bitmap.Height:=ClientHeight; Image1.Picture.Bitmap.PixelFormat:=pf32bit; Image1.Picture.Bitmap.Canvas.CopyRect(rect,Image1.Picture.Bitmap.Canvas,rect); end;
-
Ach, ich habs schon, hehehe, ich kopiere meine TImage, das war's, ich nehm einfach Form1.Canvas, des geht bei mir *g*
-
... wir sind hier kein Delphi-Forum ... Ausserdem hat die Frage nixmehr mit der ursprünglichen Frage zu tun -> neuer Thread...
-junix
-
hallo,
@junix: ja schon klar. jansen hat es bereits geklärt, das wußte ich nicht was der in seiner header stehen hatte. ich hab das ding halt direkt von der website kopiert und auf ein frisches projekt angepasst (include, funktionsdeklaration) und habe mich dann gewundert das alles einwandrei funktioniert, also nix für ungut, jetzt ergeben deine hinweise auch einen sinn für mich :-)...
mfg
murph