bitblt和fillgrn这两个api函数怎么使用及polygon的用法(不应该把所有点的坐标全都列出)(100分)

  • 主题发起人 主题发起人 noall
  • 开始时间 开始时间
偶这里有个用polygon的现成例子:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
point=record
x:integer;
y:integer;
end;
type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
ploypoints:array of point; //动态数组
nums:integer;
omx,omy:integer;
nmx,nmy:integer;
drawf:boolean;
implementation

{$R *.DFM}

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if button=mbleft then
begin
drawf:=true;
omx:=x;
omy:=y;
nmx:=x;
nmy:=y;
form1.Canvas.MoveTo(omx,omy);
SetLength(ploypoints,nums);
ploypoints[nums-1].x:=x;
ploypoints[nums-1].y:=y;
nums:=nums+1;
end
else
begin
SetLength(ploypoints,nums);
ploypoints[nums-1].x:=x;
ploypoints[nums-1].y:=y;
nums:=nums+1;
canvas.Pen.Mode :=pmCopy;
form1.canvas.Polygon(ploypoints);
canvas.Pen.Mode :=pmnotxor;
nums:=1;
drawf:=false;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Canvas.Brush.Color :=clYellow;
Canvas.Pen.Style :=psdot;
canvas.Pen.Mode :=pmnotxor;
nums:=1;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if drawf=true then
begin
form1.Canvas.MoveTo(omx,omy);
form1.Canvas.LineTo(nmx,nmy);
form1.Canvas.MoveTo(omx,omy);
form1.Canvas.LineTo(x,y);
nmx:=x;
nmy:=y;
end;

end;

end.

 
BitBlt用来复制图象的
function BitBlt(DestDC: HDC; // 一个HDC, 复制到的目的地
X, Y, Width, Height: Integer; // 目标尺寸和位置
SrcDC: HDC; // 源
XSrc, YSrc: Integer; // 复制开始位置左上角坐标
Rop: DWORD // 复制控制符, 具体看API帮助, 常用的是SRC_COPY
): BOOL; stdcall;

FillRgn是用一种Brush充填某块不规则形状的
function FillRgn(DC: HDC; p2: HRGN; p3: HBRUSH): BOOL; stdcall;
其中P2是某块形状的Region
p3可以是某个Brush.Handle
 
another_eyes:
对于bitblt这个函数,能不能举个例子,DestDC和SrcDC这两个参数是相对应于那个控
件的handle。我用Timage和Tpaintbox这两个控件(用同一控件)试过。
bitblt(image1.canvas.handle,0,0,50,50,image2.canvas.handle,0,0,srccopy)
image2上有一图片(1.jpg)
但是不能把image2上的图copy到image1上啊?
使用这个函数拷贝图形时到底该怎么做呢?谢
 
bitblt(image1.picture.bitmap.canvas.handle,0,0,50,50,image2.picture.bitmap.canvas.handle,0,0,srccopy)
 
谢谢你Another_eYes。
请收邮件,帮我解决这个问题,问题在注释里面。谢谢你了
 
呵呵呵呵
如果你发送成功的话, 请再发一遍. 并请在Subject里写上我的名字.
你的邮件有可能被我当垃圾邮件删除了(没办法, 每天100+封信, 只能看看标题然后大
部分"在服务器删除").
总之我没收到你的信.
 
多人接受答案了。
 
后退
顶部