1 2 3function CreateBitmapMask(BitmapDC: HDC; Width, Height: Integer; TransparentColor: TColor): HBITMAP; 4var 5 OldColor: COLORREF; 6 OldObj: HBITMAP; 7 MaskDC: HDC; 8begin 9 Result := Windows.CreateBitmap(Width,Height,1,1,nil); 10 MaskDC := Windows.CreateCompatibleDC(BitmapDC); 11 12 OldObj := Windows.SelectObject(MaskDC,Result); 13 OldColor := Windows.SetBkColor(BitmapDC, Windows.COLORREF(ColorToRGB(TransparentColor))); 14 15 Windows.BitBlt(MaskDC,0,0,Width,Height,BitmapDC,0,0,SRCCOPY); 16 17 Windows.SetBkColor(BitmapDC,OldColor); 18 Windows.SelectObject(MaskDC,OldObj); 19 Windows.DeleteDC(MaskDC); 20end; 21 22function DirectMaskBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Mask: HBITMAP): Boolean; 23var 24 MaskDC: HDC; 25 MaskObj: HGDIOBJ; 26 PrevTextColor, PrevBkColor: COLORREF; 27begin 28 //this is a stripped version of LCL.StretchMaskBlt 29 if Mask <> 0 then 30 begin 31 MaskDC := Windows.CreateCompatibleDC(DestDC); 32 MaskObj := Windows.SelectObject(MaskDC, Mask); 33 34 PrevTextColor := Windows.SetTextColor(DestDC, $00000000); 35 PrevBkColor := Windows.SetBkColor(DestDC, $00FFFFFF); 36 37 Windows.BitBlt(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, SRCINVERT); 38 Windows.BitBlt(DestDC, X, Y, Width, Height, MaskDC, XSrc, YSrc, SRCAND); 39 Windows.BitBlt(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, SRCINVERT); 40 41 Windows.SetTextColor(DestDC, PrevTextColor); 42 Windows.SetBkColor(DestDC, PrevBkColor); 43 Windows.SelectObject(MaskDC, MaskObj); 44 Windows.DeleteDC(MaskDC); 45 end 46 else 47 Result := Windows.BitBlt(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, SRCCOPY); 48end; 49 50function OptimalPixelFormat: TPixelFormat; 51begin 52 if ScreenInfo.ColorDepth = 32 then 53 Result := pf32bit 54 else 55 Result := pfDevice; 56end; 57 58function OSSupportsUTF16: Boolean; 59begin 60 Result := Win32Platform = VER_PLATFORM_WIN32_NT; 61end; 62