DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: lambdaflow
今日帖子: 34
在线用户: 10
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 jsnjsmc (鱼) ★☆☆☆☆ -
盒子活跃会员
2004/7/15 9:00:56
标题:
我写的一个过程,各位大哥帮忙看一下,谢谢! 浏览:1218
加入我的收藏
楼主: 我的意图:

打开MDIChild窗体;只让打开当前想用的窗体,其它的MDIChild窗体都会关闭,因为要多次用到所以想写这样的一个过程:在下代码中我指了出错的位置;如果我不用这个过程而直接用这段代码没什么问题.各位大哥指教,谢谢!!!


procedure TMainForm.ShowNowForm(F: TForm);
var
  iCount: Integer;
  Found : Boolean;
begin
  For iCount := 0 to MDIChildCount - 1 do
  begin
    if MDIChildren[iCount] <> F then
       MDIChildren[iCount].Close;
  end;

  Found:=False;
  iCount:=0;

  while ((Found = False) and (iCount < MDIChildCount)) do
  begin
    if MDIChildren[iCount] = F then
      Found := true
    else
      iCount := iCount+1;
  end;

  if Found = false then
  begin
    F := TF.Create(self); //这个地方有问题,TF.Create(self);过不去;
    F.Show;
  end
  else
  begin
    F.Show;
  end;

end;



我直接用这段代码如下,没一点问题:



procedure TMainForm.N16Click(Sender: TObject);
var
  iCount: Integer;
  Found : Boolean;
begin
  For iCount := 0 to MDIChildCount - 1 do
  begin
    if MDIChildren[iCount] <> SetUserForm then
       MDIChildren[iCount].Close;
  end;

  Found:=False;
  iCount:=0;

  while ((Found = False) and (iCount < MDIChildCount)) do
  begin
    if MDIChildren[iCount] = SetUserForm then
      Found := true
    else
      iCount := iCount+1;
  end;

  if Found = false then
  begin
    SetUserForm := TSetUserForm.Create(self);
    SetUserForm.Show;
  end
  else
  begin
    SetUserForm.Show;
  end;
end;
----------------------------------------------
-
作者:
男 sephil (NAILY Soft) ★☆☆☆☆ -
盒子中级会员
2004/7/15 11:49:10
1楼: 遍历应该for iCount := MDIChildCount - 1 downto 0 do

----------------------------------------------
Copyright 2008 ? NAILY Soft

Click here to redirect to my home
Click here to redirect to my blog
作者:
男 jsnjsmc (鱼) ★☆☆☆☆ -
盒子活跃会员
2004/7/15 13:38:30
2楼: sephil 大哥呀,我说的问题不是出在那呀,在:

  if Found = false then
  begin
    F := TF.Create(self); //这个地方有问题,TF.Create(self);过不去;
    F.Show;
  end
  else
  begin
    F.Show;
  end;




F := TF.Create(self); //这个地方有问题,TF.Create(self);过不去
提示:
Undeclared identifier:'TF'

而如果我不用这个过程直接写那个FORM那就没这个问题,就象:

  if Found = false then
  begin
    SetUserForm := TSetUserForm.Create(self);//这个地方就不会出错
    SetUserForm.Show;
  end
  else
  begin
    SetUserForm.Show;
  end;
我那个过程写错了吗??



因为多处用到,才考虑写个过程涵数;
----------------------------------------------
-
作者:
男 sephil (NAILY Soft) ★☆☆☆☆ -
盒子中级会员
2004/7/15 16:16:51
3楼: ft

if not Found = false then F := TSetUserForm.Create(self);
F.Show;

----------------------------------------------
Copyright 2008 ? NAILY Soft

Click here to redirect to my home
Click here to redirect to my blog
作者:
男 tangxiaochun (txc) ★☆☆☆☆ -
盒子活跃会员
2004/7/15 16:28:30
4楼: 你试一下:
    F := TF.Create(nil);
----------------------------------------------
^-^
----------
加密狗破解群:53420284,18894766,87930333
软件破解群:23858342,40887927,427596
.net破解群:19067647
作者:
男 sephil (NAILY Soft) ★☆☆☆☆ -
盒子中级会员
2004/7/15 16:30:58
5楼: 楼上的
你看他的错误消息
TF未定义的说....

----------------------------------------------
Copyright 2008 ? NAILY Soft

Click here to redirect to my home
Click here to redirect to my blog
作者:
男 baisnsf (cyc) ★☆☆☆☆ -
盒子活跃会员
2004/7/15 16:34:52
4楼: type TFormClass=class of TForm;

procedure TMainForm.ShowNowForm(F: TFormClass);
var
  iCount: Integer;
  Found : Boolean;
begin
  For iCount := 0 to MDIChildCount - 1 do
  begin
    if MDIChildren[iCount] <> F then
       MDIChildren[iCount].Close;
  end;

  Found:=False;
  iCount:=0;

  while ((Found = False) and (iCount < MDIChildCount)) do
  begin
    if MDIChildren[iCount] = F then
      Found := true
    else
      iCount := iCount+1;
  end;

  if Found = false then
  begin
    F.classtype.create(self).show;
  end
  else
  begin
    F.Show;
  end;

end;

这样调用
ShowNowForm(TSetUserForm);
----------------------------------------------
-
作者:
男 jsnjsmc (鱼) ★☆☆☆☆ -
盒子活跃会员
2004/7/15 18:05:14
6楼: 各位大哥呀,还是没搞定。

 baisnsf  大哥你说的那个type TFormClass=class of TForm;放在哪呀??
我放在这:
   procedure ShowNowForm(F: TForm);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;
  type TFormClass = class of TForm;

不行;
----------------------------------------------
-
作者:
男 jsnjsmc (鱼) ★☆☆☆☆ -
盒子活跃会员
2004/7/16 8:19:57
7楼: 各位大哥再看下,真的就没有解决的办法了吗?
----------------------------------------------
-
作者:
女 yatouruihua (芮芮) ★☆☆☆☆ -
盒子活跃会员
2004/7/16 13:11:23
8楼: 加一条type tf=class of TSetUserForm
调用时为tf.create(self)
试试看有问题咱们再讨论
----------------------------------------------
别笑我笨!我一直在努力!
作者:
男 jsnjsmc (鱼) ★☆☆☆☆ -
盒子活跃会员
2004/7/16 14:06:18
9楼: yatouruihua 大哥.

你说的没错,加了type tf=class of TSetUserForm
这句的确可以,但我是写的一个过程,比如还有一个MDIChild窗体要显示,那怎么办呀。

比如我出除了想ShowNowForm(SetUserForm);还想ShowNowForm(AddCallingCardForm);等等好几个,那怎么写呀;

要就调用这一个窗口我就直接写,因为多嘛所以才想写一个过程;


各位大哥再帮忙喽。
----------------------------------------------
-
作者:
女 yatouruihua (芮芮) ★☆☆☆☆ -
盒子活跃会员
2004/7/17 5:30:31
10楼: 呵呵,我不是大哥:)
type TFormClass=class of TForm为什么不行?应该可以,调用时加个tformclass.handle

----------------------------------------------
别笑我笨!我一直在努力!
作者:
男 jsnjsmc (鱼) ★☆☆☆☆ -
盒子活跃会员
2004/7/19 8:35:13
11楼: 各位高手,还是没搞定!!
没办法只有写成function了
function TMainForm.LookForNowForm(F: TForm): Boolean;
var
  iCount : Integer;
  Found  : Boolean;
begin
  For iCount := 0 to MDIChildCount - 1 do
  begin
    if MDIChildren[iCount] <> F then
       MDIChildren[iCount].Close;
  end;
  Found := False;
  iCount := 0;
  while ((Found = False) and (iCount < MDIChildCount)) do
  begin
    if MDIChildren[iCount] = F then
      Found := true
    else
      iCount := iCount+1;
  end;
  Result := Found;
end;

调用时:

procedure TMainForm.N16Click(Sender: TObject);
begin
  if not LookForNowForm(SetUserForm) then
  begin
    SetUserForm := TSetUserForm.Create(self);
    SetUserForm.Show;
  end;
end;

我的水平好差,只有这样写了,如果哪位大哥大姐能解决的,一定告诉小弟一下,感激不尽!!!
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行85.9375毫秒 RSS