保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 计算机论文 >> 正文

酒杯上的碟


t := Self;
Calc.Top := 100;
Calc.Left := 200;
// Uncomment these to try other Border effects:
// Calc.BorderStyle := bsEtched;
end;

begin
Application := TApplication.Create(nil);
Application.CreateForm(TTestForm, TestForm);
TestForm.Show;
Application.Run;
end.

附图 3: CLX计算器控件的工程文件


附图 4: 运行在Windows下的计算器控件.



附图 5: 运行在Red Hat Linux下的计算器控件.

就像你所看到的,TCalculator是TFrameControl的子类.TFrameControl继承自TWidgetControl的一个子类.它为你的控件提供了一个框架(frame),我们最感兴趣的属性是BorderStyle:

TBorderStyle = (bsNone, bsSingle, bsDouble, bsRaisedPanel,bsSunkenPanel,
bsRaised3d, bsSUnken3d, bs Etched, bsEmbossed);

在这个控件(TCalculator)中有两个重要的方法.BuildCalc创建所有的按钮,并且把它们摆放到正确的位置.正如你所看到的,我使用了一个叫TButtonType的枚举类型来控制按钮的"功能(function)",还有少量的信息做为整型保存在Tag属性里面.我在后面的Calc方法里面会讲到它.所有的计算器按钮保存在一个叫做Btns的受保护的(protected)记录数组里面,类型是TButtonRecord.

TButtonRecord = record
Top: Integer;
Left: Integer;
Width: Integer;
Height: Integer;
Caption: string;
Color: TColor;
end;

这样做能够

容易的在一个循环里面设置所有的按钮,而不用写一大串的TButton.Create调用.注意所有按钮的OnClick句柄都指派给了TCalculator的Calc方法.直接指派到一个自定义事件是不错的,因为所有按钮都在计算器的内部,并且这些事件都不用被published(见附图6)

for i := Low(TButtonType) to High(TButtonType) do
with TButton.Create(Self) do
begin
Parent := Self;
SetBounds(Btns[i].Left, Btns[i].Top, Btns[i].Width,
Btns[i].Height);
Caption := Btns[i].Caption;
Color := Btns[i].Color;
OnClick := Calc;
Tag := Ord(i);
end;
附图 6: 在这种情况下,直接指派一个自定义事件是明智的

我有一个叫FStatus的TLabel控件. TLabel也是TFrameControl的后代,我想在计算器里面使用它,所以我让它具有"sunken box"的外观来显示计算器的存储记忆,就像Windows里面的计算器一样.Qt标签的widget非常像VCL里面的TPanel控件.对于CLX里面的TLabel,我们没有发布(publish)它的框架(frame)属性,但是这并不妨碍你继承使用它.

在BuildCalc里面我做的最后一件事是创建一个edit控件来显示计算结果,正像你所看到的,计算器控件的Text属性和Edit控件的Text属性直接挂钩.

另一个重要的方法是Calc,它实质上是一个庞大的case语句,用来计算哪一个按钮被按下,并且决定该如何去做.我使用了私有域变量FCurrentValue, FLastValue 和 FRepeatValue来保存计算的值,所以我不必使用堆栈来实现.这个例子只是为了展示如何创建交叉平台控件,而不是如何写一个计算器.

很好,还记得吗,我在BuildCalc中使用了Tag属性来控制它的功能.在这个方法里面,我们将参数Sender强制转化成TButton,再将它的Tag强制转化成TButtonType类型,最后赋值给ButtonType. ButonType就是那个case语句里面的选择器表达式.

ButtonType := TButtonType(TButton(Sender).Tag);

对于我们如何把这些转换成交叉平台控件,你感到惊奇吗? 不? 非常好! 这说明你已经集中注意力了.这些代码可以同时在Windows和Linux下面编译,而不用改动任何地方.没有任何额外的步骤.正是仰仗于CLX的优点,控件已经全部完工了.

所有不得不交待的(All I Have to Give)(????)

你已经看到,写一个交叉平台控件和写一个VCL控件并不是完全不同.如果你是一个控件开发的新手,学习起来不会很难.如果你是一个经验丰富的VCL控件作者,你的大部分知识都将平滑地转移到Kylix

《酒杯上的碟(第3页)》
本文链接地址:http://www.oyaya.net/fanwen/view/173009.html

  • 上一篇范文: 网上订房之我见
  • 下一篇范文: 学生档案管理系统

  • ★温馨提示:你可以返回到 计算机论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。