Delphi+汇编例子2[2]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 percylee 的 blog

end;
procedure tform1.drawline2(x1,y1,x2,y2:integer;icolor:tcolor);
const i:integer=1;
var j,k1,k2,d:integer;
begin
if((x1-x2)<=0)or((y2-y1)<=0) then exit;
for j:=0 to (x1-x2) do
begin
form1.canvas.pen.color:=icolor;
form1.canvas.ellipse(x1,y1,x1+2,y1+2);
form1.canvas.ellipse(x1-1,y1-1,x1+1,y1+1);
if ((x1-x2)=0)or((y2-y1)=0) then exit;
asm
push eax
push ebx
push ecx
push edx

mov ecx,0

mov eax,x1
sub eax,x2
mov ebx,y2
sub ebx,y1
mov d,ebx
mov edx,0
div d
mov k2,eax

mov eax,y2
sub eax,y1
mov ebx,x1
sub ebx,x2
mov d,ebx
mov edx,0
div d
mov k1,eax

mov eax,x1
@loop2:
sub eax,i
inc ecx
cmp ecx,k2
jb @loop2
mov x1,eax

mov eax,y1
@loop1:
add eax,i
inc ecx
cmp ecx,k1
jb @loop1
mov y1,eax

pop edx
pop ecx
pop ebx
pop eax
end;
end;// end for
end;
procedure tform1.drawline3(x1,y1,x2,y2:integer;icolor:tcolor);
var j:integer;
begin
if((x2-x1)<>0)and((y2-y1)<>0) then exit;
if (x2-x1)=0 then
for j:=0 to (y2-y1) do
begin
form1.canvas.pen.color:=icolor;
form1.canvas.ellipse(x1-1,y1-1,x1+1,y1+1);
if (y2-y1)=0 then exit;
asm
push eax
mov eax,y1
inc eax
mov y1,eax
pop eax
end;
end// end for
else for j:=0 to (x2-x1) do
begin
form1.canvas.pen.color:=icolor;
form1.canvas.ellipse(x1-1,y1-1,x1+1,y1+1);
if (x2-x1)=0 then exit;
asm
push eax
mov eax,x1
inc eax
mov x1,eax
pop eax
end;
end;// end for
end;
procedure tform1.timer1timer(sender:tobject);
begin

end;
procedure tform1.drawrain;
var
x1,y1,x2,y2,d,i:integer;
begin
for i:=0 to 100 do
begin
x1:=random(537);
y1:=random(280);
d:=random(7);
asm
push eax
mov eax,x1
sub eax,d
mov x2,eax
mov eax,y1
add eax,d
mov y2,eax
pop eax
end;
times:=times+1;
drawline2(x1,y1,x2,y2,clmedgray);
wait();
if (i div 2)=0 then drawline2(x1,y1,x2,y2,clwindow);
end;
end;

procedure tform1.drawtree(x,y,height:integer);
var
x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,d1:integer;
begin
asm
push eax
push ebx
push ecx
push edx
mov eax,height
mov edx,0
mov ecx,2
div ecx
mov d1,eax
mov eax,x
mov ebx,y

sub eax,height
mov x1,eax
sub ebx,height
mov y1,ebx
add eax,height
sub eax,5
sub ebx,height
mov x2,eax
mov y2,ebx
mov eax,x
add eax,3
sub ebx,height
mov x3,eax
mov y3,ebx
add eax,8
add ebx,height
mov x4,eax
mov y4,ebx
add eax,height
sub eax,5
add ebx,height
mov x5,eax
mov y5,ebx

pop edx
pop ecx
pop ebx
pop eax
end;
drawline2(x3,y3,x2-d1,y2,clcream);
drawline1(x3,y3,x4+d1,y4,clcream);
drawline3(x2-d1,y2,x2,y2,clcream);
drawline3(x4,y4,x4+d1,y4,clcream);
drawline2(x2,y2,x1,y1,clcream);
drawline1(x4,y4,x5,y5,clcream);
drawline2(x2+2,y2,x1,y1+2,clcream);
drawline1(x4-2,y4,x5,y5+2,clcream);
drawline3(x1,y1,x5,y5,clcream);
drawline3(x1,y1-1,x5,y5-1,clcream);
drawline3(x,y5,x,y,clcream);
drawline3(x,y,x+5,y,clcream);
drawline3(x+5,y5,x+5,y,clcream);
form1.canvas.brush.color:=clgreen;
form1.canvas.floodfill(x,y1-5,clcream,fsborder);
form1.canvas.floodfill(x+2,y-5,clcream,fsborder);

end;
procedure tform1.exit1click(sender: tobject);
begin
close;
end;

procedure tform1.about1click(sender: tobject);
begin
form3.show;
end;

procedure tform1.spring1click(sender: tobject);
var i,k,j:integer;
begin
statusbar1.panels[1].text:='风雨之春...';
form1.canvas.brush.color:=clwindow;
form1.canvas.floodfill(1,1,clred,fsborder);
for i:=0 to 10do
begin
k:=random(10);
j:=random(10);
j:=-j;
drawtree(10+k*50,300+j*20,20);
end;
for i:=0 to 10 do
begin
form1.canvas.brush.color:=clwindow;
form1.canvas.floodfill(1,1,clgreen,fsborder);
drawrain;
sleep(100);
end;

end;

procedure tform1.formcreate(sender: tobject);
begin
times:=0;
form1.canvas.brush.color:=clwindow;
form1.caption:=form1.caption+' please select the pictype!... ';
end;

本文关键:Delphi,汇编语言
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top