我照着<西安电子科技大学出版社>朱振元出的数据结构,线性表一章写了以下界面程序:
结果每次运行就提示"From'sxbForm'references form'sxbForm'declared in unit 'list'which is not in your USES list,Do you wish to add it?",点yes后就在implementation后加了一句:uses list; 又说list不能引用自己,就什么反应都没了. 我不明白以下问题:
1.unit 的名字取什么都可以还是要和Form的名字一样?
2.我有两个类:窗体类sxbForm和链表类Tsxb,可以写在一个unit里吗?还是Tsxb写在另一个unit里更好?
3.为什么我给窗体取的Name是sxbForm而程序自动改成TsxbForm?
4.我的程序还有哪些问题,怎么改才能调通并显示结果?unit list;interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, ExtCtrls;type
TsxbForm = class(TForm)
Label1: TLabel;
Comb1: TComboBox;
PaintBox1: TPaintBox;
Sp1: TSpinEdit;
Label2: TLabel;
Label3: TLabel;
ButQk: TButton;
Cr: TButton;
Sc: TButton;
Tc: TButton;
procedure ButQkClick(Sender: TObject);
procedure CrClick(Sender: TObject);
procedure ScClick(Sender: TObject);
procedure TcClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;elemtp = char;
const maxlen=30;
type
Tsxb = class
private
elem:array[1..maxlen] of elemtp;
curlen:0..maxlen;
public
procedure init;
procedure prnt;
function dele(loc:integer):elemtp;
procedure inst(loc:integer;el:elemtp);
end;implementation
var
TsxbForm:TsxbForm;
sxb1:Tsxb;
procedure Tsxb.init;
begin
curlen:=0;
end;procedure Tsxb.prnt;
var i,ix,iy:integer;rect1:Trect;s:char;
begin
rect1:=rect(0,0,550,100);
sxbForm.PaintBox1.Canvas.Brush.Color:=clBtnFace;
sxbForm.PaintBox1.Canvas.FillRect(rect1);
sxbForm.PaintBox1.Canvas.Brush.Color:=clwhite;
sxbForm.PaintBox1.Canvas.Pen.Color:=$0080FF80;
sxbForm.PaintBox1.Canvas.Pen.Width:=2;
sxbForm.PaintBox1.Canvas.Font.Color:=clred;
sxbForm.PaintBox1.Canvas.Font.Size:=18;
ix:=10;iy:=0;
if curlen>0 then
for i:=1 to curlen do
begin
s:=elem[i];
sxbForm.PaintBox1.Canvas.MoveTo(ix-10,30);
sxbForm.PaintBox1.Canvas.LineTo(ix,30);
sxbForm.PaintBox1.Canvas.MoveTo(ix-5,35);
sxbForm.PaintBox1.Canvas.LineTo(ix,30);
sxbForm.PaintBox1.Canvas.MoveTo(ix-5,25);
sxbForm.PaintBox1.Canvas.LineTo(ix,30);
sxbForm.PaintBox1.Canvas.Rectangle(ix,iy,ix+50,iy+60);
sxbForm.PaintBox1.Canvas.TextOut(ix+20,iy+12,s);
ix:=ix+60
end;
end;function Tsxb.dele(loc:integer):char;
var i:integer;
begin
if(loc<1)or(loc>curlen) then showmessage('infeasible')
else
begin
for i:=loc+1 to curlen do
elem[i-1]:=elem[i];
curlen:=curlen-1
end;
end;procedure Tsxb.inst(loc:integer;el:char);
var i:integer;
begin
if(loc<1)or(loc>curlen+1) then showmessage('infeasible')
else if curlen>=maxlen then showmessage('showflow')
else
begin
for i:=curlen downto loc do
elem[i+1]:=elem[i];
elem[loc]:=el;
curlen:=curlen+1
end;
end;procedure TsxbForm.FormCreate(Sender:TObject);
begin
sxb1:=Tsxb.Create;
sxb1.init;
end;{$R *.dfm}procedure TsxbForm.ButQkClick(Sender: TObject);
begin
sxb1.init;
sxb1.prnt;
end;procedure TsxbForm.CrClick(Sender: TObject);
var el:char;loc:integer;
begin
el:=comb1.text[1];
loc:=sp1.Value;
sxb1.inst(loc,el);
sxb1.prnt
end;procedure TsxbForm.ScClick(Sender: TObject);
var loc:integer;
begin
loc:=sp1.Value;
sxb1.dele(loc);
sxb1.prnt
end;procedure TsxbForm.TcClick(Sender: TObject);
begin
sxb1.Free;
close;
release;
end;end.
结果每次运行就提示"From'sxbForm'references form'sxbForm'declared in unit 'list'which is not in your USES list,Do you wish to add it?",点yes后就在implementation后加了一句:uses list; 又说list不能引用自己,就什么反应都没了. 我不明白以下问题:
1.unit 的名字取什么都可以还是要和Form的名字一样?
2.我有两个类:窗体类sxbForm和链表类Tsxb,可以写在一个unit里吗?还是Tsxb写在另一个unit里更好?
3.为什么我给窗体取的Name是sxbForm而程序自动改成TsxbForm?
4.我的程序还有哪些问题,怎么改才能调通并显示结果?unit list;interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, ExtCtrls;type
TsxbForm = class(TForm)
Label1: TLabel;
Comb1: TComboBox;
PaintBox1: TPaintBox;
Sp1: TSpinEdit;
Label2: TLabel;
Label3: TLabel;
ButQk: TButton;
Cr: TButton;
Sc: TButton;
Tc: TButton;
procedure ButQkClick(Sender: TObject);
procedure CrClick(Sender: TObject);
procedure ScClick(Sender: TObject);
procedure TcClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;elemtp = char;
const maxlen=30;
type
Tsxb = class
private
elem:array[1..maxlen] of elemtp;
curlen:0..maxlen;
public
procedure init;
procedure prnt;
function dele(loc:integer):elemtp;
procedure inst(loc:integer;el:elemtp);
end;implementation
var
TsxbForm:TsxbForm;
sxb1:Tsxb;
procedure Tsxb.init;
begin
curlen:=0;
end;procedure Tsxb.prnt;
var i,ix,iy:integer;rect1:Trect;s:char;
begin
rect1:=rect(0,0,550,100);
sxbForm.PaintBox1.Canvas.Brush.Color:=clBtnFace;
sxbForm.PaintBox1.Canvas.FillRect(rect1);
sxbForm.PaintBox1.Canvas.Brush.Color:=clwhite;
sxbForm.PaintBox1.Canvas.Pen.Color:=$0080FF80;
sxbForm.PaintBox1.Canvas.Pen.Width:=2;
sxbForm.PaintBox1.Canvas.Font.Color:=clred;
sxbForm.PaintBox1.Canvas.Font.Size:=18;
ix:=10;iy:=0;
if curlen>0 then
for i:=1 to curlen do
begin
s:=elem[i];
sxbForm.PaintBox1.Canvas.MoveTo(ix-10,30);
sxbForm.PaintBox1.Canvas.LineTo(ix,30);
sxbForm.PaintBox1.Canvas.MoveTo(ix-5,35);
sxbForm.PaintBox1.Canvas.LineTo(ix,30);
sxbForm.PaintBox1.Canvas.MoveTo(ix-5,25);
sxbForm.PaintBox1.Canvas.LineTo(ix,30);
sxbForm.PaintBox1.Canvas.Rectangle(ix,iy,ix+50,iy+60);
sxbForm.PaintBox1.Canvas.TextOut(ix+20,iy+12,s);
ix:=ix+60
end;
end;function Tsxb.dele(loc:integer):char;
var i:integer;
begin
if(loc<1)or(loc>curlen) then showmessage('infeasible')
else
begin
for i:=loc+1 to curlen do
elem[i-1]:=elem[i];
curlen:=curlen-1
end;
end;procedure Tsxb.inst(loc:integer;el:char);
var i:integer;
begin
if(loc<1)or(loc>curlen+1) then showmessage('infeasible')
else if curlen>=maxlen then showmessage('showflow')
else
begin
for i:=curlen downto loc do
elem[i+1]:=elem[i];
elem[loc]:=el;
curlen:=curlen+1
end;
end;procedure TsxbForm.FormCreate(Sender:TObject);
begin
sxb1:=Tsxb.Create;
sxb1.init;
end;{$R *.dfm}procedure TsxbForm.ButQkClick(Sender: TObject);
begin
sxb1.init;
sxb1.prnt;
end;procedure TsxbForm.CrClick(Sender: TObject);
var el:char;loc:integer;
begin
el:=comb1.text[1];
loc:=sp1.Value;
sxb1.inst(loc,el);
sxb1.prnt
end;procedure TsxbForm.ScClick(Sender: TObject);
var loc:integer;
begin
loc:=sp1.Value;
sxb1.dele(loc);
sxb1.prnt
end;procedure TsxbForm.TcClick(Sender: TObject);
begin
sxb1.Free;
close;
release;
end;end.
解决方案 »
- 给学delphi新手的一点警示高手也进来看一下吧!~~
- 请高手把这句改成C#
- delphi+sql 数据库更新 但dbgrid 中的数据没有及时的更新 急急急
- 今天才发现答对问题不能拿可用分了,只加专家分了~~
- 纪念家驹
- 庆祝小虫当上斑竹,散分!!!(请斑竹手下留情,我会结在非技术区)
- 紧急求助!关于delphi调用word的问题
- 为什么调用CreateOleObject这个出错
- 如何实现当按下A按钮时,A按钮凹进去,按下B按钮时,A按钮弹起,B按钮凹进去!
- 把表分别放在几个不同的库里是不是个办法呢?Help!!
- 问个关于二进制文件读写的问题
- ShellExecute(0,'print',filename,nil, nil,0);
2.我有两个类:窗体类sxbForm和链表类Tsxb,可以写在一个unit里吗?还是Tsxb写在另一个unit里更好?
//写在一个unit里也没有什么问题,你的TsxbForm是一个继承下来的窗口呀,而Tsxb是一个不可视的,一个单元里面允许这样写的哟;
3.3.为什么我给窗体取的Name是sxbForm而程序自动改成TsxbForm?//把什么改成TsxbForm?
Tsxb = class
private
elem:array[1..maxlen] of elemtp;
curlen:0..maxlen;
public
procedure init;//这里为什么不用create()函数来实现?构造对像时就初始化才是面向对象程序的思想呀;
procedure prnt;
function dele(loc:integer):elemtp;
procedure inst(loc:integer;el:elemtp);
end;
type
TsxbForm = class(TForm)
Label1: TLabel;
Comb1: TComboBox;
PaintBox1: TPaintBox;
Sp1: TSpinEdit;
Label2: TLabel;
Label3: TLabel;
ButQk: TButton;
Cr: TButton;
Sc: TButton;
Tc: TButton;
procedure ButQkClick(Sender: TObject);
procedure CrClick(Sender: TObject);
procedure ScClick(Sender: TObject);
procedure TcClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
书上用的init函数,函数名无所谓吧!
你运行我的程序有结果吗?
如果我将线性表类Tsxb写在另一个unit2里,那么在unit1要用到Tsxb类该加点什么?
uses uses
unit2 ??????? 还是 Tsxb ??????
随便起,但不要和已经声明的其他变量重名
2.我有两个类:窗体类sxbForm和链表类Tsxb,可以写在一个unit里吗?还是Tsxb写在另一个unit里更好?
写那里都行,没有好不好的,看习惯
3.为什么我给窗体取的Name是sxbForm而程序自动改成TsxbForm?
这个不大可能,你是不是看错了
4.我的程序还有哪些问题,怎么改才能调通并显示结果?Tsxb = class
private
elem:array[1..maxlen] of elemtp;
curlen:0..maxlen;//这里可以编译通过么?
public
procedure init;
procedure prnt;
function dele(loc:integer):elemtp;
procedure inst(loc:integer;el:elemtp);
end;
从你下面的程序看这不不太像是链表阿,elem:array[1..maxlen] of elemtp这个就已经是个双链表了,数组名就是头指针
DELPHI入門方面的,你可以下載下來看看。
http://www.pcdog.com/book/html/2004126/61220042816_1.htm