如何根据INI文件,动态建立主窗体(50分)

  • 主题发起人 主题发起人 nutian
  • 开始时间 开始时间
N

nutian

Unregistered / Unconfirmed
GUEST, unregistred user!
程序启动时,根据一个INI配置文件确定,在窗体上显示几个按钮,每个按钮我对应启动一个程序。
 
INI文件可以这样
[Button]
功能1=false;
功能2=true;
功能3=true;
[other]

根据True或False决定button是否显示。
 
INI文件我是这样设定:
[Button]
BN=X (按钮总数,为0就一个按钮也没有)
B1=XXXXXXX (第一个按钮启动这里指定的路径的程序)
B2=XXXXXXX

我的问题是在怎么动态创建窗体上,怎么来初始化主或子窗体!请给出代码!
 
在form.create时读INI文件,根据INI文件内容生成按钮
 
动态加控件
var btn:TButton;

begin
btn:=TButton.Create(self);
btn.Parent:=self;
btn.Caption:='test';
end;
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,shellAPI;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure text(sender: TObject);
public
{ Public declarations }

end;

var
Form1: TForm1;

implementation

{$R *.DFM}



procedure TForm1.FormCreate(Sender: TObject);

const
n=4;
var
i: integer;
button: array of TButton;//BUTTON动态数组,可动态设置
str: string;//路径
begin
SetLength(button,n);
for i := 0 to n-1 do begin
button := TButton.Create(self);
button.Parent := Self;
button.Caption := 'button'+inttostr(i);
str := 'c:/winnt/notepad.exe';//读出要执行程序的路径 及名称
button.Hint := str;//把路径信息存到BUTTON的一个属性里
button.ShowHint := False;
button.OnClick := text; //定义它的执行动作,
button.Left := 10;
button.Top := 10+(Button.Height+10)*i;
end;
end;


procedure TForm1.text(sender: TObject);
begin
ShellExecute(handle, 'open', Pchar(TButton(sender).hint),nil, nil, SW_SHOWNORMAL)
end;

end.
 
button: array of TButton;//BUTTON动态数组,可动态设置
最好定义成全程变量,或tform1的公共变量
 
to wfzha:
我按照你的代码,怎么一个按钮也没生成?就只有一个空白的主窗体!
 
应该还要设置button的位置和长宽属性。
 
不行啊,我把各种属性都加了还是没有按钮创建出来!
请那位指出下原因,奇怪!!
 
找到原因了,是我的问题,我没把OnCreate和FormCreate函数关联起来。创建窗体时
根本就没有调用FormCreate函数,当然没有按钮出现了!
 
我不知道怎么老是不能提问啊,提示我说没有进入本论坛,所以只好借个位置了
我用下面的代码动态生成圆,我想要生成的圆都在一条弧线上,怎么做啊
图形说明:http://pcwak.8u8.com/1.jpg
特急,希望老大能尽快帮忙

代码:
var
  Form1: TForm1;
  shape:Array of TShape;
  j:integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
shape:Array of TShape;
i:integer;
begin
   j:=strtoint(edit1.text);
   setlength(shape,j);
   for i:=0 to j-1 do
    begin
     shape:=Tshape.Create(form1);
     with shape do
     begin
       parent:=form1;
       top:=150;
       left:=left+i*50;
       width:=8;
       height:=8;
       brush.Color:=clred;
       shape:=stcircle;
     end;
   end;
 
楼上的。我试了下,
我到这里编译没通过:
shape:=Tshape.Create(form1);
错误提示:
[Error] Unit1.pas(41): Incompatible types: 'TShape' and 'dynamic array'
还没找到原因!
 
我改了下,这样是可以,你自己改下!
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,shellAPI, ExtCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }

public
{ Public declarations }

end;

var
Form1: TForm1;

implementation

{$R *.DFM}



procedure TForm1.FormCreate(Sender: TObject);
const
n=4;
var
shape:Array of TShape;
i:integer;
begin
//j:=strtoint(edit1.text);
setlength(shape,n);
for i:=0 to n-1 do
begin
shape:=Tshape.Create(form1);
with shape do
begin
parent:=form1;
top:=150;
left:=left+i*50;
width:=8;
height:=8;
brush.Color:=clred;
shape:=stcircle;
end;

end;
end;


end.

 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
916
SUNSTONE的Delphi笔记
S
后退
顶部