现有一个窗体模板,应用程序有一个增加按钮事件:每按一下将生成一个与模板一样的窗体;该模板窗体有一个关闭按钮事件:关闭生成的窗体。(50分)

  • 主题发起人 主题发起人 小邱
  • 开始时间 开始时间
这个问题我今天也想到了
估计QQ的信息窗口就这这样的
 
//创建一个工程,只有一个窗体form1
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure CloseClick(Sender: TObject);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
aForm: TForm1;
begin
aForm := TForm1.Create(self);
aForm.Show;
aform.Button1.OnClick := CloseClick;
end;

procedure TForm1.CloseClick(Sender: TObject);
begin
Screen.ActiveForm.Close;
end;
 
类似的你可以生成其他窗体的实例
 
创建的窗体不在标题栏显示?????
 
呵呵,我要的是这样的 :
任何两个生成的 窗体互不影响。比如,模板窗体ModalForm,上有一个Timer,
从零开始计数。
var
ModalForm: TModalForm;
i:byte;
procedure TModalForm.FormCreate(Sender: TObject);
begin
inherited;
i:=0;
lbTime.caption:=inttostr(i);
end;
procedure TModalForm.Timer1Timer(Sender: TObject);
begin
inherited;
i:=i+1;
lbtime.caption:=inttostr(i);
end;
应用程序Button事件触发,生成一个窗体,这时计数是0、2、4,
……因为模板窗体也同时更改着i的值。
====================
若把ModalForm add to repository 加到New Items 的Forms,
如何用代码把它Inheried到引用程序中去?
这样可行吗?
 
呵呵,我的意思是不能象上面所说的0、2、4、……,
而是要0、1、2、3……也就是互不影响拉
 
你的i是有可能一个全局变量,所以它的变化是全局相关的。
你可以将i声明成private,然后通过函数调用它的值,这样每一个实例就单独与i相关。
 
关闭一个窗体,最好要把它释放掉,而不是Screen.ActiveForm.Close;
根据应用程序的不同操作,动态窗体的窗体名、一些控件的初始值不同,并且各个窗体
都有可能在不同条件下进行不同的操作,比如,因为不能查到用户的银行帐户具体余额,
先用某个值去查,看是否足够,发现这个用户的余额够用10分钟,当第9分钟的时候再用
某个值去查,若不足,则提醒用户:余额不够,只剩一分钟;若足,继续执行……
有可能同时有3、4个用户,也有可能1、2用户,还有可能更多,这就要求有足够多的窗体
去对应相应的用户,用来显示用户的各种信息及不同情况……
有点复杂?呵呵……
用线程实现?
从New Items 的Forms中用代码把它Inheried到应用程序中去?该如何实现?
解决后再加100-200分!!!
 
to :小邱:

仔细看了你的程序,没有搞清你这样做的意图(为什么要这样做)。要出现你所说的顺序号。
wb_1的方法可以实现。你的用户是指什么意思?用户多有什么关系?
创建窗体就行了。不会是多个用户人同时操作同一个程序吧。
如果是数据库程序,在每个窗上定时更新不就行了。没这么复杂吧。
 
呵呵,是CALL CENTER 电话门诊的程序。
用户打电话进来,找某个合适的医生,进行一些医疗咨询。
坐席为他们开一个专门的窗体,显示一些信息,比如:
用户姓名
医生姓名
用户电话
医生电话
计时开始 08:00:00
……
计时结束;
当然,最重要的还是在这过程中要进行的一系列的操作;
比如,在计时开始之前,去查询该用户银行的大致余额,判断是否能够维持10分钟
(费用=时间×费率),若足够,不作任何操作,若不足,则对他们双方提示:“
不足10分钟……”,可能要不断循环地去查该用户地余额。在双方挂断时,还要提交
银行扣款、生成流水等等操作。考虑到一个坐席可能要应付多个用户和医生的联系,
所以,要触发多个窗体(该窗体最好是一个模板),各个窗体之间不能有任何影响,
即使其中任何一个出错,也不能影响到其他窗体。
还有一个想法是只有一个窗体,每个用户对应一个列表框或者面板(动态生成)。
具体要如何实现?
用线程的方法??
期待回答!!!
 
不论你用哪种方法,都要在模板窗体的OnClose 中加上 Action := caFree;
否则该窗体将无法释放,切记!切记!
 
多人接受答案了。
 
问:
接楼上
Action:=caFree;
?:=nil;
 
后退
顶部