说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在Delphi中实现类似VB中的控件数组。

HTML文档下载 WORD文档下载 PDF文档下载
在Delphi中实现类似VB中的控件数组。

在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; ?

备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘