想做个象PHOTO的关于这样不规则透明(含如%30这样的透明度)的程序
但不知道怎么写,我看了相应的文章,是把三张图叠起来,而图来源两张是带索引的BMP图片,我也不知道,带透明度索引的位图如何制作。以下代码最大的问题是不能制作不规则的,也不能制作含30%透明度的感觉。也就是说不能隐约见到下面。procedure TForm1.FormCreate(Sender: TObject); 
begin 
  Brush.Style := bsClear; 
  BorderStyle := bsNone 
end; unit homepage_coolform;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs 
ExtCtrls, StdCtrls, Buttons; 
type TForm1 = class(TForm) procedure FormPaint(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } hbmp:integer; end; 
var Form1: TForm1; 
implementation {$R *.DFM} function CopyScreenToBitmap(Rect:TREct):integer; var hScrDC, hMemDC, hBitmap, hOldBitmap:integer; nX, nY, nX2, nY2: integer; nWidth, nHeight:integer; xScrn, yScrn:integer; begin if (IsRectEmpty(Rect)) then begin result:= 0; exit; end; // 获得屏幕缓冲区的句柄. // a memory DC compatible to screen DC hScrDC:= CreateDC(DISPLAY, pchar(0), pchar(0), PDeviceModeA(0)); hMemDC:= CreateCompatibleDC(hScrDC); // get points of rectangle to grab nX := rect.left; nY := rect.top; nX2 := rect.right; nY2 := rect.bottom; // get screen resolution xScrn:= GetDeviceCaps(hScrDC, HORZRES); yScrn := GetDeviceCaps(hScrDC, VERTRES); //make sure bitmap rectangle is visible if (nX $#@60;0) then nX :="0;" if (nY $#@60; 0) then nY :="0;" if (nX2$#@62; xScrn) then nX2 := xScrn; if (nY2 $#@62; yScrn) then nY2 := yScrn; nWidth := nX2 - nX; n ght := nY2 - nY; // create a bitmap compatible with the screen DC hBitmap := CreateCompatibleBitmap(hScrDC, nWidth, nHeight); // select new bitmap into memory DC hOldBitmap := SelectObject(hMemDC, hBitmap); // bitblt screen DC to memory DC BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, nX, nY, SRCCOPY); // select old bitmap back into memory DC and get handle to // bitmap of the screen hBitmap := SelectObject(hMemDC, hOldBitmap); // clean up DeleteDC(hScrDC); DeleteDC(hMemDC); result:= hBitmap; end; 
procedure TForm1.FormShow(Sender: TObject); Var rect:TRect; p:TPoint; begin rect:=ClientRect; p:=ClientOrigin; rect.left:=p.x; rect.top:=p.y; rect.bottom:=rect.bottom+p.y; rect.right:=rect.right+p.x; hbmp:=copyScreenToBitmap(rect); inherited; end; 
procedure TForm1.FormPaint(Sender: TObject); var bitmap:TBitmap; rect:TRect; begin bitmap:=TBitmap.create; bitmap.handle:=hbmp; rect:=ClientRect; canvas.draw(rect.left,rect.top,bitmap); bitmap.handle:=0; bitmap.free; end; 
procedure TForm1.FormDestroy(Sender: TObject); begin DeleteObject(hbmp); end; 
end.