Hallo!
Weiß jemand warum die GetObject-Methode nicht funktioniert? Es tritt zwar kein Fehler auf, aber trotzdem stehen nach dem Aufruf von GetObject falsche Werte im Bitmap. Seltsamerweise funktioniert der Code, wenn man ihn in ein Extra-Testporjekt packt, einwandfrei. Nur hier geht das GetObject nicht.
Hat irgendjemand eine Idee?
Delphi-Quellcode:
type
TButton_Conquer = class
private
Pressed: boolean;
DCPressed_Bitmap, DCNormal_Bitmap: HDC;
HPressed_Bitmap, HNormal_Bitmap: HBitmap;
X, Y, Width, Height: Integer;
CallWorldDrawBuffer: TWorldDrawBufferProc;
CallWorldRundeBeenden: TWorldRundeBeenden;
public
constructor Create(X_Pos, Y_Pos: Integer; DrawBufferProc: TWorldDrawBufferProc; RundeBeendenProc: TWorldRundeBeenden; MainWindowDC: HDC);
end;
constructor TButton_Conquer.Create(X_Pos, Y_Pos: Integer; DrawBufferProc: TWorldDrawBufferProc; RundeBeendenProc: TWorldRundeBeenden; MainWindowDC: HDC);
var
PressedBMP, NormalBMP: Bitmap;
begin
inherited Create;
X := X_Pos;
Y := Y_Pos;
HNormal_Bitmap := LoadImage(0, Normal_Bitmap_FN, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
HPressed_Bitmap := LoadImage(0, Pressed_Bitmap_FN, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
DCNormal_Bitmap := CreateCompatibleDC(MainWindowDC);
DCPressed_Bitmap := CreateCompatibleDC(MainWindowDC);
SelectObject(DCNormal_Bitmap, HNormal_Bitmap);
SelectObject(DCPressed_Bitmap, HPressed_Bitmap);
GetObject(HNormal_Bitmap, SizeOf(BITMAP), @NormalBMP); // hier liegt das Problem
GetObject(HPressed_Bitmap, SizeOf(BITMAP), @PressedBMP); // hier liegt das Problem
DeleteObject(HNormal_Bitmap);
DeleteObject(HPressed_Bitmap);
CallWorldDrawBuffer := DrawBufferProc;
CallWorldRundeBeenden := RundeBeendenProc;
Pressed := false;
if (PressedBMP.bmWidth <> NormalBMP.bmWidth) or (PressedBMP.bmHeight <> NormalBMP.bmHeight) then
begin
MessageBox(HInstance, 'Fehler: Button-Bilder haben ungleiche Maße.', 'Fehler:', 16);
end else
begin
Width := PressedBMP.bmWidth;
Height := PressedBMP.bmHeight;
end;
end;
Außerdem funktioniert die MessageBox nicht. Hat da einer ´ne Idee? Kann es vielleicht daran liegen, dass die MessageBox noch vor Beginn der Nachrichtenschleife kommt???
Danke im Voraus