PROGRAM Bmptblt; { Dieser Code beschreibt die Darstellung von Bitmaps mit "durchsichtigen" Bereichen (c) 1997 U. Conrad, uconrad1@gwdg.de } {$R BMPTBLT.RES} { see end of document .. XX34 to extract RES file} USES OWindows,WinTypes,WinProcs,Strings; TYPE TDemoApp=OBJECT(TApplication) PROCEDURE InitMainWindow; virtual; END; TYPE PDemoWin = ^TDemoWin; TDemoWin = OBJECT(TWindow) PROCEDURE Paint(PaintDC : HDC;var PaintInfo : TPaintStruct); virtual; PROCEDURE GetWindowClass(var AWndClass : TWndClass); virtual; END; { Prozedur fuer die normale Abbildung von Bitmpas } PROCEDURE BmpBlt(DC : HDC;x,y : integer;hbmp : HBitmap); VAR MemDC : HDC; OldBmp : HBitmap; Bitmap : TBitmap; BEGIN MemDC:=CreateCompatibleDC(DC); OldBmp:=SelectObject(MemDC,hbmp); GetObject(hBmp,Sizeof(Bitmap),@Bitmap); BitBlt(DC,10,10,Bitmap.bmWidth,Bitmap.bmHeight,MemDC,0,0,SrcCopy); SelectObject(MemDC,OldBmp); DeleteDC(MemDC); END; { Prozedur fuer die durchsichtige Darstellung } PROCEDURE BmpTransparentBlt(hDCDest : HDC;x,y : integer;hbmp : HBitmap;rgbTransparent : TColorRef); { hDCDest bezeichnet den Zielkontext, x und y die obere linke Ecke der Bitmap; hBmp ist ein Handle zu der Bitmap und rgbTransparent bezeichnet die Farbe, die bei der Darstellung "durchsichtig" dargestellt werden soll } VAR hDCSrc : HDC; hDCMask : HDC; Bitmap : TBitmap; hbmTransMask : HBitmap; OldBk : TColorRef; OldCol : TColorRef; BEGIN GetObject(hBmp,SizeOf(TBitmap),@Bitmap); { Informationen ueber Bitmap speichern } hDCSrc:=CreateCompatibleDC(hDCDest); { Quellkontext erzeugen } hDCMask:=CreateCompatibleDC(hDCDest); { Kontext fuer MAske erzeugen } hbmTransMask:=CreateBitmap(Bitmap.bmWidth,Bitmap.bmHeight,1,1,nil); SelectObject(hDCSrc,hbmp); { Bitmap im Quellkontext abbilden } SelectObject(hDCMask,hbmTransMask); { } SetBkColor(hDCSrc,rgbTransparent); { Maske erzeugen } BitBlt(hdcMask,0,0,Bitmap.bmWidth,Bitmap.bmHeight,hDCSrc,0,0,SrcCopy); { mit Maske kombinieren } OldBk:=SetBkColor(hDCDest,RGB(255,255,255)); OldCol:=SetTextColor(hDCDest,RGB(0,0,0)); BitBlt(hDCDest,x,y,Bitmap.bmWidth,Bitmap.bmHeight,hDCSrc,0,0,SRCInvert); BitBlt(hDCDest,x,y,Bitmap.bmWidth,Bitmap.bmHeight,hDCMask,0,0,SRCAnd); BitBlt(hDCDest,x,y,Bitmap.bmWidth,Bitmap.bmHeight,hDCSrc,0,0,SRCInvert); SetBkColor(hDCDest,OldBk); SetTextColor(hDCDest,OldCol); { Kontexte freigeben } DeleteDC(hDCSrc); DeleteDC(hDCMask); DeleteDC(hDCDest); { Objekte loeschen } DeleteObject(hbmTransMask); END; { ================== Methoden des Fensters ===================== } PROCEDURE TDemoWin.Paint(PaintDC : HDC;var PaintInfo : TPaintStruct); VAR BmpTransparent : HBitmap; BmpNormal : HBitmap; OldMode : integer; BEGIN BmpTransparent:=LoadBitmap(hInstance,'BMP_TRANSPARENT'); BmpNormal:=LoadBitmap(hInstance,'BMP_Normal'); BmpBlt(PaintDC,10,10,BmpNormal); TextOut(PaintDC,50,15,'Normale Darstellung',StrLen('Normale Darstellung')); { bildet die Bitmap ganz normal ab } BmpTransparentBlt(PaintDC,10,60,BmpTransparent,RGB(0,0,255)); { bildet die Bitmap ab, ohne Pixel der Farbe RGB(0,0,255) darzustellen } OldMode:=SetBkMode(PaintDC,transparent); { fuer die Textausgabe wird erst jetzt der Transparent-Modus gesetzt } TextOut(PaintDC,50,65,'Transparente Darstellung',StrLen('Transparente Darstellung')); SetBkMode(PaintDC,OldMode); DeleteObject(BmpTransparent); DeleteObject(BmpNormal); END; PROCEDURE TDemoWin.GetWindowClass(var AWndClass : TWndClass); BEGIN inherited GetWindowClass(AWndClass); AWndClass.hbrBackground:=GetStockObject(LtGray_Brush); { fuer dieses Fenster nehmen wir einen grauen HIntergrund, um den Effekt sichtbar zu machen } END; { ================== Methoden der Applikation ===================== } PROCEDURE TDemoApp.InitMainWindow; BEGIN MainWindow:=New(PDemoWin,Init(nil,'Durchsichtige Darstellung von Bitmaps')); END; { ***************** Programm ******************* } VAR DemoApp : TDemoApp; BEGIN DemoApp.Init('DemoApp'); DemoApp.Run; DemoApp.Done; END. END. { the following contains additional files that should be included with this file. To extract, you need XX3402 available with the SWAG distribution. 1. Cut the text below out, and save to a file .. filename.xx 2. Use XX3402 : xx3402 d filename.xx 3. The decoded file should be created in the same directory. 4. If the file is a archive file, use the proper archive program to extract the members. { ------------------ CUT ----------------------} *XX3402-001337-200697--72--85-48751-----BMPTBLT.RES--1-OF--1 zk6+EYpELotDIYp-H++k+4U0+++c++++6++++0+++++-++E++++++++0++++++++++++++++ +++E++++++++++++U+++U++++60++6++++0++6++U6+++60+U+1+kA++++1z++1z++++zzw+ zk+++Dw+zk1zzk++zzzz+Dzzzzzzzzzzzzzzzzzzzzzzzz++++zzzzzzzzzzzzzzzz+5W6W+ zzzzzzzzzzzzzzw5RrRrQDzzzzzzzzzzzzzkRrTzzs++++++++++++++-r1zzzzkW6W6W6W6 W6W6U+QDzzzz1zzzzzzzzzzzzz+5+++++5Q5Q5Q5Q5Q5Q5wD+DwDzkTkTkTkTkTkTkTkzz++ ++-z-z-z-z-z-z-z1zw5RrW6-s-s-s-s-s-s-kzz-rRsW6W6W6W6W6W6W6wDzkRrTzzzzzzz zzzzzzzz1zw5RsW6W6W6W6W6W6W6UDzz-rVr+++++++++++5W+zzzkS5Q5W6W6W6W6W6U61z zzzk++RsXzzzzzzzy6+Dzzzzzzw5SD++++++++S+zzzzzzzz-rXkNqRbNqQ5UDzzzzzzzkRs w4NaNaNa-s1zzzzzzzw5SD-bNqRbNkS+zzzzzzzz-rXkNaNaNaM5UDzzzzzzzkRsw4XsxqRb -s1zzzzzzzw5SD-jXsNaNUS+zzzzzzzz-rXkNqRbNqQ5UDzzzzzzzkRsw+++++++-s1zzzzz zzw5S6RrRrRrRrW+zzzzzzzz-rW6W6W6W6W6UDzzzzzzzkRzzzzzzzzzzkzzzzzzzzw5W6W6 W6W6W61zzzzzzzzzw++++++++++Dzzzzzzzzzzzzzzzzzzzzzzzzzzzzzk6+EYpELpFGEItH I23GFItI+1++O+6++0U++++U++++6+++++2+-+++++++++6++++++++++++++++++-++++++ ++++++0+++0+++++U6++U++++6++U+0+U+++U60++A1+k++++Dw++Dw+++1zzk1z++++zk1z +Dzz++1zzzw+nAnAnAnAnAnAnAnAnAnAnAnAk+++1AnAnAnAnAnAnAnAk+S6W61AnAnAnAnA nAnAn+RrRrRknAnAnAnAnAnAnA-rRzzzU+++++++++++++k5QDzzzz06W6W6W6W6W6W+-kzz zzwDzzzzzzzzzzzzw+Q+++++RkRkRkRkRkRkTkk+zkzz-z-z-z-z-z-z-z1Ak++++5w5w5w5 w5w5w5wAn+RrS6U5U5U5U5U5U5U51Ak5RrW6W6W6W6W6W6W6XknA-rRzzzzzzzzzzzzzzzwA n+RrW6W6W6W6W6W6W6W+nAk5S5Q+++++++++++S61AnA-sRkS6W6W6W6W6W+UAnAnA++-rWD zzzzzzzsU+nAnAnAn+Rsw+++++++-s1AnAnAnAk5SD-bNqRbNkS+nAnAnAnA-rXkNaNaNaM5 UAnAnAnAn+Rsw4RbNqRb-s1AnAnAnAk5SD-aNaNaNUS+nAnAnAnA-rXkODXrNqQ5UAnAnAnA n+Rsw4yDVaNa-s1AnAnAnAk5SD-bNqRbNkS+nAnAnAnA-rXk+++++++5UAnAnAnAn+RsVrRr RrRrS61AnAnAnAk5S6W6W6W6W6W+nAnAnAnA-rzzzzzzzzzz1AnAnAnAn+S6W6W6W6W6UAnA nAnAnAn+++++++++++nAnAnAnAnAnAnAnAnAnAnAnAnAnAnz1k1z+E+k51+++++G++6++M++ EYpELotDIYp-H++L++6++c++EYpELpFGEItHI23GFItI++++++++++++ ***** END OF BLOCK 1 *****