热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我也谈谈窗体创建(读万一老师《使用多窗体时,关于节约内存和加快启动速度的思考与尝试》感想)...

最近看了一篇文章,是万一老师说关于窗体创建的http:www.cnblogs.comdelarchive201001191651483.html感触比较深࿰
最近看了一篇文章,是万一老师说关于窗体创建的

http://www.cnblogs.com/del/archive/2010/01/19/1651483.html  感触比较深,因为我经常使用TClipboard 却从来没有注意过这个问题,要反省。

看了文章中的例子,在我的项目也试了一下,成功,呵呵。可惜的是我觉得灵活性比较差,也许是我水平比较差,所以现在说出来,大家探讨一下

文章中的例子:

unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  end;

function Form2: TForm2;

implementation

{$R *.dfm}

var
  FForm: TForm2;

function Form2: TForm2;
begin
  if FForm = nil then
    FForm := TForm2.Create(Application);
  Result := FForm;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

end.

这样,我们就可以在别的单元直接使用Form2.ShowModal或者是Form2.Show等属性,但是我们要对于想要控制的窗体呢?比如说,在窗体是有3个Btn,我想根据特定的条件来设置Btn

的Enabled属性?那么也就是说,我们必须要Show或者ShowModal里面写这个控制代码。我常用的方法和万一老师说这个方法的比较。如下:

 

ExpandedBlockStart.gif
 1 procedure TForm1.BitBtnClick(Sender:TObject);     //我常用的方法
 2 
 3 var
 4 
 5  Form2:TForm2; 
 6 
 7  I:Integer;
 8 
 9 begin
10 
11   I:=0;
12 
13   Form2:=TForm2.Create(Self);
14 
15   if I=0 then    //通过 I 来进行控制
16 
17   begin
18 
19     Form2.BitBtn1.Enabled:=False;  
20 
21   end
22 
23   else
24 
25   begin
26 
27     Form2.BitBtn1.Enabled:=False;
28 
29   end;
30 
31   Form2.ShowModal;
32 
33   Form2.Free;
34 
35 end;
36 
37  
38 
39 procedure TForm1.BitBtnClick(Sender:TObject);
40 
41 var
42 
43   I:Integer;
44 
45 begin
46 
47   I:=0;
48 
49   if I=0 then    //通过 I 来进行控制 
50 
51   begin
52 
53     Form2.BitBtn1.Enabled:=False;   //但是这里就会有错误了,我想你已经看出来了,因为我们的窗体还没有创建
54 
55   end
56 
57   else
58 
59   begin
60 
61     Form2.BitBtn1.Enabled:=False;
62 
63   end;
64 
65   Form2.ShowModal;// 万一老师的方法,窗体是在Form2这个函数中创建的
66 
67 end;
68 
69 

 

通过比较之后,我个人觉得,如果要对新窗体的一些属性和控件进行控件,万一老师的方法就缺少了一些灵活性(当然我想万一老师写的这个文章不是要告诉我们用这个方法去创建窗体),我们虽然可以在新窗体的Show事件中解决一些问题,但是可能会把Show事件写的很复杂。或者利用全局变量在function中进行判断(个人觉得和Show事件中写代码本质都一样)。我还想到一个方法,就是定义多个function。来对应每一个需要如下:

ExpandedBlockStart.gif代码
function Form21:TForm2;

function From22:TForm2;

var

 Form:TForm2;

 

function Form21:TForm2;

begin

 
if Form=nil then 

 
begin 

  Form:
=TForm2.Create(Application);

  Form.BitBtn1.Enabled:
=True;

 
end;

 Result:
=Form;

end;

 

function Form22:TForm2;

begin

 
if Form=nil then 

 
begin 

  Form:
=TForm2.Create(Application);

  Form.BitBtn2.Enabled:
=True;

 
end;

 Result:
=Form;

end;

 

Other Unit;

 

procedure TForm1.BitBtnClick(Sender TObject);

var

  I:Integer;

begin

 I:
=0;

 
if I=0 then

 
begin

  Form21.ShowModal;

   
end

 
else

 
begin

  Form22.ShowModal;

 
end;

end;

第一次写技术文章,看起来有点糙,呵呵,希望大家多多指正。(希望万一老师能够进来点评一下)

转:https://www.cnblogs.com/zshsuming/archive/2010/02/08/1665727.html



推荐阅读
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
author-avatar
mobiledu2502889953
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有