Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Maße eines Bitmaps herausfinden mit GetObject geht nicht (https://www.delphipraxis.net/118152-masse-eines-bitmaps-herausfinden-mit-getobject-geht-nicht.html)

Auf Code-Suche 1. Aug 2008 13:33


Maße eines Bitmaps herausfinden mit GetObject geht nicht
 
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

Apollonius 1. Aug 2008 13:35

Re: Maße eines Bitmaps herausfinden mit GetObject geht nicht
 
Der erste Parameter von MessageBox ist nicht ein HModule sondern ein HWnd, für dass du 0 einsetzen kannst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:27 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