Delphi知识中心
www.delphi.ee
提供Delphi技术知识
与Delphi程序员共同进步


在线服务QQ:99923144 随时恭候您的光临
首页 基础知识 WIN系统 组件使用 组件开发 数据库 ACTIVEX 多媒体技术 网络技术 关于
文章类别:组件使用    你尚未登陆,会员功能无法使用,请从 网站首页 登陆。
  控件使用技巧  
 
控件使用技巧

丰富多彩的标签。

  我们已经不满足于Delphi提供的简单的标签,能不能在标签中有不同的字体,有不同的颜色,以此来丰富我们的表现能力。回答是肯定的,并且用不着第三方提供的控件,我们只要巧妙的利用Delphi自己提供的TRichEdit就可以了。首先将TRichEdit控件的边框去除: RichEdit1.

BorderStyle:ΚbsNone;同时设置只读属性为真:RichEdit1.ReadOnly:ΚTrue;然后,你利用write之类的软件制作好RichText格式的文本,通过以下语句就可以显示出来了:

  RichEdit1.PlainText:ΚFalse;
  RichEdit1.Lines.LoadFromFile(′c:ιtest.rtf′);
在Delphi中实现类似VB中的控件数组。

你可以通过设置一组相应控件的TAG属性来实现这一功能。首先在窗体中放置3个BUTTON控件,然后分别设置这三个控件的TAG属性为1、2、3。接下来双击任意一个按钮,

在其代码部分输入如下代码:
procedureTForm1.Button1Click(Sender:TObject);
varcap:string;
begin
caseTButton(sender).Tagof
1:ShowMessage(′1stButtonPressed′);
2:ShowMessage(′2ndButtonPressed′);
3:ShowMessage(′3rdButtonPressed′);
end;
end;

最后在其他两个按钮的ONCLICK事件中选择已经编好的代码。这样一来就可以实现以上功能了。
在Delphi中实现不同风格的SPEEDBUTTON。


在许多常用的软件(如WORD)中经常会遇到这样的快捷按钮(SPEEDBUTTON):若干个按钮做为一组来工作,同一时刻只能有一个按钮处于按下状态,比如WORD中的四个段落排版按钮。在Delphi中实现这样的功能只需要简单的一个步骤:设置若干个SPEEDBUTTON按钮的 GROUPINDEX属性设置为同一个大于0的整数。

还有另外一种快捷按钮,我们称之为开关按钮,比如WORD中的“粗体”按钮,这种按钮每按一次状态就改变一次。在Delphi中实现这种按钮只需要两步设置:首先设置按钮的GROUPINDEX属性为一个大于0的整数,第二步设置 ALLOWALLUP属性为TRUE。这样就完成了开关按钮的建立。
通过调用API确定MEMO控件中的当前行和列。

你可以调用WINDOWSAPI中的EM—LINEFROMCHAR和EM—LINEINDEX函数来确定MEMO控件中的当前行和列,具体调用的过程见下面的过程。

varLineNum:longint;
CharsBeforeLine:longint;
begin
LineNumΚSendMessage(Memo1.Handle,EM—LINEFROMCHAR,Memo1.SelStart,0);
CharsBeforeLine:=SendMessage(Memo1.Handle,EM—LINEINDEX,LineNum,0);
Label1.Caption:=′Line′+IntToStr(LineNum+1)
Lab
el2.Caption:=′Position′+IntToStr((Memo1.SelStart-CharsBeforeLine)+1);
end;
动态产生构件并相应事件

方法:
var
MyBu : TBUTTON;
begin
MyBu:=TBUTTON.Create(Form1);
MyBu.Parent:=Form1;
MyBu.Left:=10;
MyBu.Top:=10;
MyBu.OnClick:=MyOnClick;
MyBu.Show;
end;
注:MyOnClick为响应的事件过程.
几个构件共用一段代码

方法:
(Sender as TStringGrid).Width:=5;
注:这样将发送消息的构件强制类型转换成TStringGrid类,并改变它的属性.
回车替Tab下移控件

需要用回车键代替TAB键下移一个控件时,把KeyPress设为True,加入下列代码拦截击键:

Procedure TForm1.FormKeyPress(Sender:Tobject;Var Key:Char);
Begin
 if key=#13 then { 判断是按执行键}
 if not (ActiveControl is TDbgrid) Then
 Begin { 不是在TDbgrid控件内}
  key:=#0;
  perform(WM_NEXTDLGCTL,0,0);{移动到下一个控件}
 end else
 if (ActiveControl is TDbgrid) Then{是在 TDbgrid 控件内}
 begin
  With TDbgrid(ActiveControl) Do
  if Selectedindex<(FieldCount-1) then
  Selectedindex:=Selectedindex+1{ 移动到下一字段}
  else Selectedindex:=0;
 end;
End;
分行提示

  无论你什么时候要分行显示的时候,只需要在字符串中间加入“#13”就可以了,但在属性框里却不能这么干,以下就几种控件加以说明:

begin
Label1.caption :='垂'+#13+'直'+#13+'显'+#13+'示';
Edit1.Hint :='输入框说明:'+#13+'文本的输入';
end;

运行时生成控件

  ㈠、运行时生成可视控件:以下以TEdit 控件为例
1.在Form的Public中定义TEdit控件
  Edit1:TEdit;
2.在需要生成的地方加入以下代码:
  Edit1:=TEdit.Create(Self);
  Edit1.Parent:=Form1;
  Edit1.Left ?:=20;
  Edit1.Top :=20;
  Edit1.Text :='Edit1 Text';
3.使用完毕后,释放分配的资源
  if? Assigned(Edit1) then Edit1.Free; ?

  ㈡、运行时生成非可视控件:以下以 TTimer控件为例
1.在Form的Public中定义TTimert控件
  Timer1:TTimber;
2.在需要生成的地方加入以下代码:
  Timer1:=TTimer.Create(Self);
  Timer1.OnTimer:=YourAction;
YourAction是自己定义的OnTimer事件,使用
procedure TForm1.YourAction(Sender:TObject); 完成
3.使用完毕后,释放分配的资源
  if Assigned(Timer1) then Timer1.Free;

 

在线服务QQ:99923144 Delphi程序员QQ群(139442)
Delphi知识中心 www.delphi.ee 最专业的Delphi技术资料网站