Hi!
Du hast zwar dein Problem bereits gelöst, dennoch möchte ich dir erklären, warum folgender Code nicht funktioniert hat:
Zitat von
Pascal95:
Außerdem gibt diese Prozedur:
Delphi-Quellcode:
procedure GetScreenShot (
var ABitmap : TBitmap);
var
DC : THandle;
begin
if Assigned(ABitmap)
then // Check Bitmap<>NIL
begin
DC := GetDC();
// Get Desktop DC
try
ABitmap.Width := Screen.Width;
// Adjust Bitmapsize..
ABitmap.Height := Screen.Height;
// ..to screen size
BitBlt(ABitmap.Canvas.Handle,
// Copy
0,0,Screen.Width,Screen.Height,
// Desktop
DC,
// into
0,0,
// the
SrcCopy
// Bitmap
);
finally
ReleaseDC(0,
DC);
// Relase DC
end;
end;
end;
... einige Errors:
unit1.pas(38,22) Error: Illegal parameter list
unit1.pas(40,11) Error: Wrong number of parameters specified for call to "GetDC"
unit1.pas(42,15) Error: Unknown record field identifier "WIDTH"
unit1.pas(43,15) Error: Unknown record field identifier "HEIGHT"
unit1.pas(44,22) Error: Unknown record field identifier "CANVAS"
unit1.pas(60,21) Error: Call by var for arg no. 1 has to match exactly: Got "TImage" expected "BITMAP"
unit1.pas(34,11) Hint: Found declaration: GetScreenShot(var BITMAP);
unit1.pas(88) Fatal: There were 6 errors compiling module, stopping
Dein Problem ist hier, das der Typ
Graphics.TBitmap, den du eigentlich verwenden wolltest, vom Record
Windows.TBitmap, der ein Alias auf
Windows.BITMAP ist, überschrieben wird. Das sieht man auch gut in deiner Uses:
Zitat von
Pascal95:
Das ist bei mir in der uses:
Delphi-Quellcode:
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
ExtCtrls, StdCtrls, Windows, CLipBrd, LCLIntf, LCLType;
Windows befindet sich hier hinter
Graphics, weswegen alle Typen, die sowohl in der einen, als auch in der anderen
Unit sind, sich komplett auf die hintere
Unit beziehen. Du hättest eventuell auch in Lazarus mit gedrückter Strg-Taste auf
TBitmap klicken können und er hätte dich womöglich an die "richtige" Deklaration in
Windows geschickt - allerdings kann ich hier auch falsch liegen.
Und folgende Möglichkeiten hättest du gehabt den Fehler zu beseitigen:
1. du hättest aus jedem
TBitmap ein
Graphics.TBitmap gemacht
2. du hättest in deiner
Unit TBitmap einfach als Alias auf
Graphics.TBitmap definiert, also so:
Delphi-Quellcode:
type
TBitmap = Graphics.TBitmap
Dadurch wäre der
Windows-Typ mit dem richtigen Typ überschrieben worden.
3. du hättest du Reihenfolge der Units in der Uses anpassen können. Dies ist übrigens auch der Grund, warum
Windows in Delphi
auch sehr weit vorne steht.
4. du hättest die Windows
Unit ganz rauslassen können, da die benötigten Methoden eh durch LCLIntf und LCLType (eventuell auch noch LCLProc) eingebunden werden, allerdings kann ich diesen Punkt nicht mit Sicherheit bestätigen
Zitat von
Pascal95:
Liegt es daran, dass cih mit Lazarus arbeite?
Nein, das hätte dir auch mit Delphi passieren können
Ich hoffe ich konnte dir etwas Klarheit verschaffen.
Gruß,
Sven