![]() |
nonVCL - Bitmap in Bitmap kopieren
Hi,
wie kann man ein Bitmap in ein anderes kopieren ? Diese Procedure zeichnet nur darüber:
Delphi-Quellcode:
Ich möchte in einem Dialog enth. Bitmap mein eigenes einsetzen.
procedure SetBitmap(hWnd: HWND);
begin h_DC := GetDC(GetDlgItem(hwnd, IDC_IMG1)); hBitmapDC := CreateCompatibleDC(h_DC); hOldBitmap := SelectObject(hBitmapDC, Bitmap); BitBlt(h_DC, 0, 0, 32, 32, hBitmapDC, 0, 0, SRCCOPY); SelectObject(hBitmapDC, hOldBitmap); DeleteDC(hBitmapDC); ReleaseDC(hwnd, h_DC); end; VCL:
Delphi-Quellcode:
ImageX.Picture.Assign(MyBitmap);
|
Re: nonVCL - Bitmap in Bitmap kopieren
Ich weiß zwar nicht genau was du willst, aber entweder mußt du wohl ein anderes Flag in BitBlt() einsetzen als SRCCOPY - damit kannst du zwei Bitmaps "mischen".
Zitat:
|
Re: nonVCL - Bitmap in Bitmap kopieren
Wenn's ein STATIC-Element ist dann suchst du vielleicht nach der Meldung
![]() |
Re: nonVCL - Bitmap in Bitmap kopieren
Zitat:
Zitat:
Zitat:
Zitat:
Doch nun stecke ich wieder fest. Also ich möchte ein vorhandenes Image (Bitmap) auf einem Dialog durch ein selbst erstelltes (aus einer Bitmap-Resource) ersetzen.
Delphi-Quellcode:
So funktioniert das nicht. Irgendwie habe ich den Durchblick verloren... :gruebel:
// var ResBitmap: HBITMAP ist global def.
// ResBitmap := LoadBitmap(hInstance, MAKEINTRESOURCE(1)); procedure SetBitmap(hWnd: HWND); var myBitmapDC: HDC; ResBitmapDC: HDC; myBitmap: HBITMAP; hOldBitmap: HBITMAP; begin // DC von DlgItem (Image) holen myBitmapDC := GetDC(GetDlgItem(hwnd, IDC_IMG1)); // DC für ResBitmap erstellen ResBitmapDC := CreateCompatibleDC(myBitmapDC); // Mem-Bitmap erzeugen myBitmap := CreateCompatibleBitmap(myBitmapDC, 32, 32); // dem Mem-Bitmap einen DC zuweisen SelectObject(myBitmapDC, myBitmap); // dem ResBitmap einen DC zuweisen hOldBitmap := SelectObject(ResBitmapDC, ResBitmap); // Bild von ResBitmap zu Mem-Bitmap kopieren BitBlt(myBitmapDC, 0, 0, 32, 32, ResBitmapDC, 0, 0, SRCCOPY); // dem DlgItem-Image das neue (Mem)Bitmap senden SendDlgItemMessage(hwnd, IDC_IMG1, STM_SETIMAGE, IMAGE_BITMAP, myBitmap); SelectObject(ResBitmapDC, hOldBitmap); DeleteDC(ResBitmapDC); ReleaseDC(GetDlgItem(hwnd, IDC_IMG1), myBitmapDC); end; |
Re: nonVCL - Bitmap in Bitmap kopieren
Laß den Rest weg und weise einfach ResBitmap über SendDlgItemMessage(hwnd, IDC_IMG1, STM_SETIMAGE, IMAGE_BITMAP, ResBitmap); zu. Dazu vorher mit ResBitmap := LoadBitmap(hInstance, MAKEINTRESOURCE(1)); laden.
|
Re: nonVCL - Bitmap in Bitmap kopieren
Das geht nicht, äh.. schon aber ich will nur einen Ausschnitt aus dem ResBitmap auf/in das "DlgItem-Image" machen. :wink:
Delphi-Quellcode:
Sonst wäre es ja zu einfach. :zwinker:
BitBlt(myBitmapDC, 0, 0, 32, 32, ResBitmapDC, count * 32 - 32,
Animation[AnimType].Offset * 32, SRCCOPY); |
Re: nonVCL - Bitmap in Bitmap kopieren
Aha, na das kann man ja nicht wissen :zwinker:
In diesem Falle holst du dir den DC des (Client-)Fensters, erstellst einen kompatiblen (Mem-)DC. Dann selektierst du deine Ressourcen-Bitmap in den Mem-DC. Danach blittest du von dem Mem-DC auf den des Fensters mit den entsprechenden von dir vorgesehenen Offsets. An deiner Stelle würde ich die Ressourcen-Bitmap aber immer geladen lassen!!! |
Re: nonVCL - Bitmap in Bitmap kopieren
Zitat:
Ansonsten: mit STM_GETIMAGE die Bitmap des fremden Fensters holen, modifizieren (wie von Olli beschrieben), und mit STM_SETIMAGE wieder setzen. |
Re: nonVCL - Bitmap in Bitmap kopieren
Zitat:
|
Re: nonVCL - Bitmap in Bitmap kopieren
Ich auch. :wink:
Auf die Gefahr hin, dass ihr mich auf den Hof fegen schickt, hänge ich den Sourcecode mal an, in der Hoffnung, das ihr mal ein (oder auch zwei) Auge(n) drauf werft. Ich komme einfach nicht weiter. Es geht um die Procedure SetBitmap(hWnd: HWND);. [Edit=turboPASCAL] Anhang entfernt, kommt aber wo anders wieder. :tongue: [/Edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 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