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 BitBlt() (https://www.delphipraxis.net/605-bitblt.html)

d3g 12. Aug 2002 16:37


BitBlt()
 
Hallo,

ich glaube schön langsam, dass ich alles verlerne... Diese Zeile Code eill einfach nicht funktionieren :(

Code:
BitBlt(GetDC(hWnd), 222 + i * 25, 0, 17, 23, hBmp, 0, 0, SRCCOPY);
Sowohl hWnd als auch hBmp sind gültige Werte. Es scheint aber so, als würde sich der DC ständig verändern. Wenn ich folgendes einbaue, dann bekomme ich fünf verschiedene Werte.

Code:
[b]for[/b] i := 1 [b]to[/b] 5 [b]do[/b]
      MessageBox(hWnd, PChar(IntToStr(GetDC(hWnd))), 'audiorec', 0);
Könnte das daran liegen, dass ich per MCI gleichzeitig ein Audiofile abspiele?

MfG,
d3g

jbg 12. Aug 2002 18:01

Du treibst mit dem GetDC() dein Windows ganschön in den Speichermangel. Zu jedem GetDC muss auch ein ReleaseDC vorhanden sein!

BitBlt() arbeitet nicht mit Bitmap-Handles, sondern nur mit Geräte Kontexten (DC). Du musst einen Compatiblen DC erzeugen:
Code:
[b]var[/b]
  dc: HDC;
  memDC: HDC;
  oldBmp: HBITMAP;
[b]begin[/b]
  dc := GetDC(hWnd);
  [b]try[/b]
    memDC := CreateCompatibleDC(dc);
    [b]try[/b]
      oldBmp := SelectObject(memDC, hBmp); // Bitmap dem DC zuweisen

      BitBlt(dc, 222 + i * 25, 0, 17, 23, memDC, 0, 0, SRCCOPY);

      SelectObject(memDC, oldBmp);
    [b]finally[/b]
      DeleteDC(memDC);
    [b]end[/b];
  [b]finally[/b]
    ReleaseDC(hWnd, dc);
  [b]end[/b];
[b]end[/b];

d3g 12. Aug 2002 18:36

Es funktioniert! :D :D :D

Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz