请帮我把它写成一个Tedit控件(100分)

  • 主题发起人 biyesheng
  • 开始时间
B

biyesheng

Unregistered / Unconfirmed
GUEST, unregistred user!
我不会做控件,谁能帮我把一个控制在Edit里输出文字格式的小程序写成一个Tedit的
控件?代码如下:
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Edit1: TEdit;
procedure Edit1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
var
EditFlag:boolean;

{$R *.dfm}

procedure TForm1.Edit1Change(Sender: TObject);
var
s,s1,s2:string;
n:integer;
begin
s:=Edit1.Text;
n:=length(s);
s1:=copy(s,n,1);
s2:=copy(s,n-1,1);
if (EditFlag) and (n>1) then
begin
Edit1.SelStart := Length (Edit1.Text);
if (s1<>' ') and (s2<>' ') then
begin
s:=s+' ';
Edit1.SelStart := Length (Edit1.Text);
setfocus;
Edit1.Text:=s;
end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
EditFlag:=true;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
sk:string;
ss:integer;
begin
ss:=Edit1.SelStart;
sk:=copy(Edit1.Text,ss+1,1);
if key=chr(vk_back) then
begin
EditFlag:=false;
//aa |bb cc时不允许删除空格
if copy(Edit1.Text,ss,1)=' ' then
key:=#0;
exit;
end
else
EditFlag:=true;



if (ss<>length(edit1.Text)) and (key<>chr(vk_back)) then
begin
EditFlag:=false;
//(aa |bb cc) or (aa |b cc)
if (sk<>' ') and (copy(Edit1.Text,ss,1)=' ') then
//(aa |bb cc)
if copy(Edit1.Text,ss+2,1)<>' ' then
Edit1.SelLength:=1;
//aa b|b cc
if (sk<>' ') and (copy(Edit1.Text,ss,1)<>' ') then
Edit1.SelLength:=1
else
begin
//(aa bb| cc) or (aa b| cc)
if (sk=' ') and (copy(Edit1.Text,ss,1)<>' ') then
//(aa bb| cc)
if copy(Edit1.Text,ss-1,1)<>' ' then
begin
Edit1.SelStart:=ss+1;
Edit1.SelLength:=1;
end;
end;
end
else
EditFlag:=true;
end;

end.
 
那容易啊,,
我给你一条路子(方法),然后你自己动手做吧!

首先,你从File->New 中选择 Component ,
在出现的对话框中,祖先你选择 TEdit ,名字随便你取,
安装的组件夹名字你也可以随便取,
现在就可以生成默认的跟TEdit 功能还一模一样的 控件了。
你要注意你的单元文件,默认是在 borland/delphi6/Lib 下。

然后你写类似下面的代码:

TMYEdit = class( TEdit)
private
procedure Change(Sender: TObject);
procedure KeyPress(Sender: TObject;Var key: Char);
public
constructor Create(AOwner: TComponent);override;
published
end;
...............

constructor Create(AOwner: TComponent);
begin
inherited Create(AOwner);
OnChange := Change;
OnkeyPress := keypress;
end;
procedure Change(Sender: TObject);
begin
// 把你的代码粘过来。
end;
procedure Keypress(Sender: TObject;Var key:Char);
begin
// 相应的代码。。
end;

组件的代码基本这样就完成。
你需要安装组件,这时,你选择 Component 菜单下的 Install Component..
你选择你上面这个控件的单元文件,你安装好后,你就可以在控件面板里你最先指定的那个
组件夹里找到你现在这个已经扩展功能了的 TMyEdit 组件了。

:)
 
呵呵,差了个最关键的过程:Register
 
用向导自动生成时,可以不用管啦,
如果有增加才需要用 Register 了。
:)
 
顶部