Hallo,
mit der Zeit werde auch ich schlauer und habe somit gelernt, wie man
DLL-Funktionen einbinden kann
. Ich habe jetzt in den Implementations-Teil meiner "Dreh-
Unit" folgendes geschrieben:
Delphi-Quellcode:
Const
Status = (Ok, GenericError, InvalidParameter, OutOfMemory,
ObjectBusy, InsufficientBuffer, NotImplemented, Win32Error, WrongState, Aborted, FileNotFound, ValueOverflow, AccessDenied, UnknownImageFormat, FontFamilyNotFound, FontStyleNotFound, NotTrueTypeFont, UnsupportedGdiplusVersion, GdiplusNotInitialized, PropertyNotFound, PropertyNotSupported);
TStatus = Status;
GpStatus = TStatus;
Function GdipImageRotateFlip(Image: Pointer;
rfType: ROTATEFLIPTYPE): GPSTATUS; Stdcall; External 'gdiplus.dll';
Die Deklaration von RotateFlipType habe ich jetzt mal außen vor gelassen. Die Deklaration von GPStatus ist nicht auf meinem Mist gewachsen, sonder ich habe sie einfach aus der
Unit GDIPAPI.pas von
progdigy übernommen.
Und so sollte das dann von mir aufgerufen werden:
Delphi-Quellcode:
Procedure TMainForm.BtnRotateClick(Sender: TObject);
Var
Stat : GPStatus;
tmp : HBitmap;
Begin
tmp:=Image1.Picture.Bitmap.Handle;
Stat:=GdipImageRotateFlip(@tmp, Rotate90FlipNone);
ShowMessage(StatusText[Stat]);
End;
TImage.Picture.Bitmap.Handle ist doch vom Typ HBITMAP.
Ist das eine anderes HBITMAP als es GDI+ benutzt?
Denn ich bekomme immer die Statusmeldung "ObjectBusy" zurück. Erwartet hatte ich eigentlich "GdiplusNotInitialized", weil ich genau das nicht getan habe; Initialisieren.
Könnte mir bei der Gelegenheit bitte mal jemand ein Beispiel posten, wie ich mit den Funktionen "GdipCreateBitmapFromHBITMAP" bzw. "GdipCreateHBITMAPFromBitmap" ein TBitmap aus Delphi in ein GDI+-konformes HBITMAP umwandeln kann und umgekehrt?
Mehr als das und "GdipImageRotateFlip" brauche ich vermutlich wirklich nicht, so dass mein Code übersichtlich und mein Programm schön klein bliebe!
Bitte, bitte, Alex