谁来教我做界面(100分)

  • 主题发起人 主题发起人 luckystar
  • 开始时间 开始时间
L

luckystar

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做一个网络数据库,现正做到自动生成的录入界面,我想做成
属性编辑器的样子,我想知道
听说用把edit,按钮等等东西放在listbox里可以做出来,那么如何
做呢,我现在没有时间了,请各位大侠尽可能 提供一个详细的思路
 
express 公司提供类似属性编辑器的控件,你可以在super page,或DELPHI深度历险中找道。
 
无非Enter时对可显示性,显示风格作点修改,在当前编辑处放上Edit,Button等等,Exit时把编辑结果写下。
 
super page是什么我都不知道:(

 
深度历险:www.vcl.vclxx.com
super page:sunsite.icm.edu.pl/delphi
 
我在生成界面时遇到了问题,我想生成edit和label,把它们各放在一个数组中,用两个
中间变量给它们赋值...好麻烦的说 delphi不支持动态数列真糟糕
运行后没有东西出现.我该怎么办?
......
type Label1=array[1..30] of Tlabel; //要生成的label和edit放在数组中
type edit1=array[1..30]of Tedit;
var
Form1: TForm1;
mylabel:label1;
myedit:edit1;
implementation
......
procedure TForm1.test1Click(Sender: TObject); //请看这一段,窗体上已
经有了一个edit和
label,它们是两个数组mylabel,myedit第一个元素,为以后的元件提供基准位置
var i:integer;
llabel:Tlabel;
eedit:Tedit; //我把eedit,llabel做中间变量,create后
赋 给数组,赋完了
把它destroy,不知可否

begin
llabel:=Tlabel.Create(self);
eedit:=Tedit.Create(self);
mylabel[1]:=llabel;
myedit[1]:=eedit;
mylabel[1].caption:=content[0].field_bz;
myedit[1].text:=table1.FieldByName(content[0].field_name).asstring;
llabel.Destroy;
eedit.Destroy;
for i:=2 to count do begin //count是表的字段数
llabel:=Tlabel.Create(self);
mylabel:=llabel;
myLabel.caption:=content[i-1].field_bz;//content是一个记录类型的数
组,放数据字
典的,不必理它
mylabel.top:=mylabel[i-1].top+25; //按上一个元件的位置为基准生成
mylabel.left:=mylabel[i-1].left;
mylabel.width:=mylabel[i-1].width;
mylabel.height:=mylabel[i-1].height;
mylabel.parent:=self;
mylabel.visible:=true;
llabel.Destroy;
end;
end;

我用form1的componentcount方法看不到组件生成.按理说在初始化时就该为两个Tlabel和Tedit类型的数组分配内存的?

 
//mylabel[1]:=llabel;
//myedit[1]:=eedit;
改成Assign行不行?直接赋值大概不行。生成后立即指定parent,然后再定位。
 
to avant:不行,有访问冲突

问题大概出在我把中间变量llable赋给mylabel后,析构了llable,
导致 mylabel也没了------它们同指向一个内存地址

但是究竟应该如何解决这个问题呢,有谁做过类似的东西?
....我的头快炸了....
 
你可以用TList来当作一个动态控件数组

var
llabel: TLabel;
List: TList;
begin
List := TList.Create;
llabel := TLabel.Create(Self);
List.Add(llabel);
llabel.parent := self;
llabel.visible := true;
//不要在此Destroy它,在窗体关闭时才Destroy
//TLabel(List.Items[0]).Caption := ...
//TLabel(List.Items[0]).SetBounds...
end;

 
同Zephyr
另外,Delphi 4 起就支持动态数组了: 试试这样行不行
type Label=array of Tlabel;
var myLabel Label;

SetLength(myLabel, Count);
for i:= to Count-1 do begin
myLabel:=TLable.Create;
myLabel.parent:=Form1;
.....
end;
 
终于做好了,好满意的说
因为机器速度慢,一直用d3,只有在用midas时才开d4,不知道d4支持动态
数组。
我的修改是,去掉了几个destroy,程序最终通过,delphi对类的声明是
引用而不是指向与c++ 不同
几位大侠稍等,一会给你们加分
末了,我最后还想请教一个问题,我有一个生成的dbgrid,要在程序中设为
不能编辑,即把options的dsediting设为false.我试了不行,看邦助options
是集合类型,但根据我所学知识,集合类型是不能直接访问的?
 
options:=options-[dsediting];
 
哇噻!太神奇了!
hubdog,你是怎么想到的?
 
我最怕做报表。
BTW:深度历险是哪里的?我怎么一直连不上。
 
why not "readonly := false" do?
 
多人接受答案了。
 

Similar threads

回复
0
查看
863
不得闲
D
回复
0
查看
867
DelphiTeacher的专栏
D
D
回复
0
查看
836
DelphiTeacher的专栏
D
后退
顶部