Delphi随笔二

原创 2002年03月31日 15:45:00

一、关于界面
  界面对于一个程序,仿佛就是容貌对于一个人,重要性是不言而喻的。
  一个程序的界面做的很漂亮是很好,但是如果界面不能很好的反映功能,那再漂亮的界面都是垃圾一堆,这方面我是有体会的,当你的大部分精力全放在如何

做一个漂亮的界面的时候,灾难就降临了,你将永远无法把程序的功能做好!如果想把程序做好,就不要考虑漂亮的界面,等到功能全部实现的时候,界面自然

就会出现,到时候美化也不迟。
  这个问题上,Delphi的程序员可能遇到的最多,因为满天飞的都是漂亮的控件,这个也好,那个也好,不用真是可惜,于是找个一堆控件,一个个的试验过来

,功能全然不顾。其实用户用一个软件,不是因为界面漂亮,而是因为功能强。即使是在DOS窗口下跑的程序,只要功能强,用户照样会津津有味的使用,如果功

能弱的一塌糊涂,即使界面做成无比酷,最后的命运也是被删除。所以,写一个软件的时候,请首先从功能入手,而不是界面!
  那么是不是不用考虑漂亮的界面呢?也不是。终究漂亮的界面是很吸引眼球的,但是要是按照我的意思,先弄个普通的界面,最后美化,会造成一个问题,就

是要修改很多代码,比如:

procedure TMainForm.Button1Click(Sender : TObject)
begin
  FWidth := StrToInt(Edit1.Text);
  FHeight := StrToInt(Edit2.Text);
  FScreenSize := FWidth * FHeight;
end;

  上面的代码运行的时候是没有什么问题的,但是一旦你换了一个Edit控件,或者是只是换了Edit的名字,工作量就出来了,一个两个的变化还没有问题,假如

这个Edit1.Text在代码里出现了100多个地方呢?怎么办?我的方法是把程序的界面和功能分开!代码尽量不要和具体的控件相关联。如下:
procedure TMainForm.SetParam(const Width, Height : string);
begin
  FWidth := StrToInt(Width);
  FHeight := StrToInt(Height);
  FScreen := FWidth * FHeight;
end;
procedure TMainForm.Button1Click(Sender : TObject)
begin
  SetParam(Edit1.Text, Edit2.Text);
end;
  这个例子有点极端,好像是画蛇添足,但是当你大量的修改控件或者更换控件名字的时候,作用就显示出来了。到你最后想美化界面的时候,修改代码的工作

量会减轻很多。因为只要传入的参数更换一次就可以,而不是在无数的地方进行修改。
  原则:界面和实现分开

二、全局变量
  不要使用全局变量!!!即使设定的全局变量你认为一万年也不会变,也不要使用,因为说不定那天修改了一个功能,这个全局变量就要拆成两个变量了,那

么问题就会出现,还是通过参数传递吧。还是来个例子:
//main
const
  ShowWidth = 384;
  ShowHeight = 288;
...

// SetParamDlg 子窗口
  SpinEdit1.Value := MainForm.ShowWidth;
  SpinEdit2.Value := MainForm.ShowHeight;

  上面的代码工作的不错,但是假如有一天客户说我要分辨率可变,怎么办?在const里重新加入ShowWidth1、ShowWidth2、、、?最后const的体积会越来越大

,查const的时候会累死你,那换一种方法:
//main
function ReadWidth : integer;
function ReadHeigth : integer;

SetParamDlg.Width := ReadWidth;
SetParamDlg.Height := ReadHeight;

//SetParamDlg
  SpinEdit1.Value := FWidth;
  SpinEdit2.Value := FHeight;

  是不是比较好一点?
  原则:尽量在一开始设计的时候把所有看起来目前不会变化的参数也做成动态的。

三、一个小问题
  这是我在一个网站上看到的,比较有意思,而且感觉很容易犯,这里就抄袭一下了,不过这只是编程技巧,不是方法
function sum(a : array of word; count : word) : longword;
var
 i : word;
begin
 result := 0;
 for i := 0 to count - 1 do inc(result, a[ i ]);
end;

  上面的代码有问题么?乍看是没有问题,但是说不定什么时候他就当掉了。为什么?因为Count是个WORD,假如传入参数的时候Count=0会发生什么事情呢?对

了,WORD翻转了,那就等他循环FFFF次吧:)所以请注意无符号类型的操作!


累了,自己都感觉没写好,休息ing,欢迎砖头,欢迎高手来发表意见....

博客园首页新随笔联系管理订阅 随笔- 7 文章- 0 评论- 4 ElasticSearch 5.0.1 java API操作

博客园首页新随笔联系管理订阅 随笔- 7  文章- 0  评论- 4  ElasticSearch 5.0.1 java API操作   ...
  • gaoqiao1988
  • gaoqiao1988
  • 2016年12月25日 09:15
  • 618

2016新年随笔

前言 题外话:【我爱王梦】 生活:        高考时的失利,让我在很大的一段时间内都走不出来,那段时间真的不知道自己在想什么?又到底在做着什么?说真的,那段时间我感觉到了真正的孤独,没...
  • wangmeng951011
  • wangmeng951011
  • 2016年02月11日 12:02
  • 466

Delphi 的RTTI机制浅探2

本文上篇基本上是 RTTI 入门介绍,续篇介绍了所有 TypInfo.pas 中的函数,附加了 Classes.pas、Graphics.pas、Con...
  • simb
  • simb
  • 2006年09月15日 09:35
  • 1749

GDI+ 在Delphi程序的应用 -- 图像二值化

    图像的二值化,无论是理论,还是方法都很多,网上搜索一大堆,本人水平有限,没法完全搞清楚,只在这里针对GDI+在Delphi中如何做一般二值化处理,写一个简单例子。    其实,这个例子在昨天本...
  • maozefa
  • maozefa
  • 2007年01月30日 23:27
  • 4166

寒假计划随笔

未来畅想      大三过半,已经到了为未来做打算的时候了。我打算不考研了,我认为本专业的实践能力比较重要,早些着手实践,工作一段时间以后有精力的话就准备考研,提升自己的知识储备。大学三年我的实践能...
  • yangyayan21
  • yangyayan21
  • 2018年01月20日 10:39
  • 36

博客园的 “随笔、文章、日记”有什么区别?

博客园的 “随笔、文章、日记”有什么区别?生成的url有区别“p/articles/diary”,并且日记不公开...
  • yunweifun
  • yunweifun
  • 2017年12月17日 09:25
  • 253

Delphi 7 中使用RAVE报表(三)

Delphi 7 中使用RAVE报表(三)      ——建立一张简单的报表     前面两篇,向大家介绍了RAVE的组件,从今天开始向大家介绍如何建立报表。首先要感谢li jack等各位朋友给我发的...
  • highway_programmer
  • highway_programmer
  • 2004年12月29日 10:53
  • 3984

博客园的 “随笔、文章、新闻、日记”有啥区别

今天才发现:博客园的随笔,文章,日记的区别 随笔:是一些比较杂乱的技术类东西且有待修改和讨论的文章,假如是原创则只是作者随时提笔写下的内容,而并没有经过太多的推敲,甚至措辞也没有得到很合理的...
  • chongtianfeiyu
  • chongtianfeiyu
  • 2013年09月06日 16:27
  • 3198

Delphi数学常用操作函数二

1. Inc procedure Inc(var X [ ; N: Longint ] );:整数自加N。其中,X为变量;N为要增加的长度。例如: [delphi] view ...
  • wozengcong
  • wozengcong
  • 2013年12月27日 22:20
  • 622

企业战略管理笔记

天津大学 赵国杰教授:企业战略管理 MBA课程 管理是指在一定组织中的管理者,运用一定的职能和手段来协调他人的劳动,使别人同自己一起超高效率地实现组织既定目标的活动过程。 社会科学,人类行为科学-...
  • snicolashe
  • snicolashe
  • 2016年08月30日 01:10
  • 984
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Delphi随笔二
举报原因:
原因补充:

(最多只允许输入30个字)