画图呀(50分)

  • 主题发起人 主题发起人 qddelphi
  • 开始时间 开始时间
Q

qddelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
帮我画一个正方形,里面有12288个小格子,我能通过0和1控制格子的颜色,0就不变色,
1就变红色,鼠标点击任何一个格子,那个格子就能变色,最后还能按颜色横排读出所有
格子的二进制数(8个格子为1个字节)。谢谢了。分不够再加。
 
看不懂的话,那就先画图吧,里面有12288个格子
 
qddelphi你好,我是刚学Delphi,看了你的问题,好像可以解决。
下面试我做的,可能不好,请多多指教~!!!!
unit main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
PMyList = ^AList;
AList = record
px:Integer;
py:Integer;
end;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
XX,YY:Integer;
public
{ Public declarations }
end;

var
Form1: TForm1;
DrawFlag: String;
pxyList:TList;//点链表
pxyRecord:pMyList;//结构实例

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
Var
I: Integer;
begin
XX:=StrToInt(Edit2.Text);//Edit2中为多边形宽度
YY:=StrToInt(Edit1.Text);//Edit1中为多边形高度
Edit1.Visible:=False;
Edit2.Visible:=False;
Canvas.FillRect(ClientRect);
for I := 0 to 128 do // Iterate
begin
Canvas.MoveTo(20+I*XX, 60);
Canvas.LineTo(20+I*XX, 60+96*YY);
end; // for
for I := 0 to 96 do // Iterate
begin
Canvas.MoveTo(20, 60+I*YY);
Canvas.LineTo(20+128*XX, 60+I*YY);
end; // for
DrawFlag:='CanDraw';
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Var
I: Integer;
rRect:TRect;
xFlag,yFlag:Bool;
xPoint,yPoint:Integer;
begin
if DrawFlag='CanDraw' then
begin
xFlag:=False;
yFlag:=False;
xPoint:=0;
yPoint:=0;
If (X>=20) and (X<=(20+128*XX))and (Y>=60)and (Y<= (60+96*YY)) then
begin
for I := 1 to 128 do // Iterate
begin
if (X>=20+(I-1)*XX) and (X<=20+I*XX) then
begin
xFlag:=True;
xPoint:=I;
Break;
end;
end; // for
for I := 1 to 96 do // Iterate
begin
if (Y>=60+(I-1)*YY) and (Y<=60+I*YY) then
begin
yFlag:=True;
yPoint:=I;
Break;
end;
end; // for
if (xFlag=True) and (yFlag=True) then
begin
New(pxyRecord);
rRect.Left:=20+(xPoint-1)*XX;
rRect.Right:=20+xPoint*XX;
rRect.Top:=60+(yPoint-1)*YY;
rRect.Bottom:=60+yPoint*YY;
Canvas.Brush.Color:=clRed;
Canvas.FillRect(rRect);
pxyRecord.px:=xPoint;
pxyRecord.py:=yPoint;
pxyList.Add(pxyRecord);
end;
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
pxyList:=TList.Create;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
I: Integer;
begin
try
for I := 0 to pxyList.Count-1 do // Iterate
begin
New(pxyRecord);
pxyRecord:=pxyList.Items;
Dispose(pxyRecord);
end // for

finally // wrap up
pxyList.Free;
end; // try/finally
end;

end.
程序现在可以画图,可以点点,我把每个被点中的点保存到了List中,
然后可以做个循环读出来。
 
谢谢你,我先看一下,再和你探讨。
 
yamazeki:你把你的信箱告诉我吧,我们Mail联系。
 
我的email:pwcn@cmmail.com
 
这个你可以在用TDrawGrid进行,在onDrawCell中去写就可以了,你以可以将这放在一个二进制的流Stream中进行。
 
这个是什么意思,我不懂,麻烦你给我讲讲吧。或给我你的mail,我们联系
 
先写一个,描述你的格子的数据结构吧!
剩下的就是画和处理鼠标事件了,判断鼠标在哪个格子里不用我教你吧。
点到了格子就重画吗!有什么困难吗!为什么搞那么多格子,是不是疯了?
 
接受答案了.
 

Similar threads

D
回复
0
查看
926
DelphiTeacher的专栏
D
D
回复
0
查看
718
DelphiTeacher的专栏
D
D
回复
0
查看
679
DelphiTeacher的专栏
D
S
回复
0
查看
832
SUNSTONE的Delphi笔记
S
S
回复
0
查看
790
SUNSTONE的Delphi笔记
S
后退
顶部