<font color=red>改写的控件只能"用"一次,并且2</font>,查,也查不出什么.........(100分)

  • 主题发起人 主题发起人 千中元
  • 开始时间 开始时间

千中元

Unregistered / Unconfirmed
GUEST, unregistred user!
控件应该是在用户输入完成后,自动为输入的内
容加上一个前缀。代码很简单:
TmyDBwaterBook = class(TDBEdit)
private
{ Private declarations }
FPrefixion : String;
procedure SetPrefixion(Value:String);
protected
procedure DoExit;override;
{ Protected declarations }
public
constructor Create(AOwner:TComponent);override;
{ Public declarations }
published
property Prefixion : String read FPrefixion write SetPrefixion;
//可以这样理解:prefixion的值是通过读FPrefixion而来,
//而FPrefxion是通过setPrefixion来赋值;
{ Published declarations }
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Md', [TmyDBwaterBook]);
end;

{ TmyDBwaterBook }

constructor TmyDBwaterBook.Create(AOwner: TComponent);
begin
inherited create(Aowner);

end;

procedure TmyDBwaterBook.DoExit;
begin
inherited;
if pos(FPrefixion,text)&lt;&gt;1 then
text:=text+FPrefixion;

end;

procedure TmyDBwaterBook.SetPrefixion(Value: String);
begin
Fprefixion:=Value;
end;

end.
安装,在测试程序里对delphi带的数据库进行操作
在formcreate时候,Table1.edit;
测试中出现两种情况的错误

.错误一:出现unkown Database: Alias:try
错误二:在输入的时候Recordlocked by another user
table:D:/try/locate/B.db
user qian
 
错误三:报告说内存不够
 
g622 兄刚才好象有人用了你的oicq,后来把我给仍到黑名单里去了:(
 
unit tempDBEdit;

interface

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

type
TtempDBEdit = class(TDBEdit)
private
fQZ: string;
procedure SetQZ(const Value: string);
{ Private declarations }
protected
procedure DoExit;override;
{ Protected declarations }
public
{ Public declarations }
published
property QZ:string read fQZ write SetQZ;
{ Published declarations }
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Standard', [TtempDBEdit]);
end;

{ TtempDBEdit }

procedure TtempDBEdit.DoExit;
var tempStr:string;
begin
inherited;
tempStr:=Field.AsString;
if pos(fQZ,tempStr)&lt;&gt;1 then begin
Field.DataSet.Edit;
Field.AsString:=fQZ+Field.AsString;
end;
end;

procedure TtempDBEdit.SetQZ(const Value: string);
begin
fQZ := Value;
end;

end.
 
有时会出现。。。怪哉
错误二:在输入的时候Recordlocked by another user
table:D:/try/locate/B.db
user qian
 
添加前缀操作不应该写在 DoExit 中,优先级太低了。TDBEdit 不同于普通 Edit,DoExit
发生的时候,数据修改操作已经全部完成了,这时候再强行修改 Text 属性就会导致错误。
重载 ValidateEdit 方法吧。
procedure TDBEdit.UpdateData(Sender: TObject);
begin
ValidateEdit; // 修改之前首先校验文本是否正确,重载该函数可以有机会修改数据
FDataLink.Field.Text := Text;
end;
procedure TXXXX.ValidateEdit; override;
begin
inherited;
// Add you prefix here
// Note: you should assign value to EditText property, not Text property
end;
应该是可以的。
btw: 老千什么时候开始写控件了?
 
嘿嘿,我的目标是一年后能成为像现在的BakuBaku那样的高手
现在的BaKuBaku会写控件,
所以我要开始学写控件了
等试过再分分
 
嘿嘿,不敢当。王寒松、Another_eYes 他们才是高手。
 
我给出的例子已经回答了你的问题了,
老千你为什么不给我分?
 
》错误三:报告说内存不够

1。可以结束别的程序
2。买几个内存条
3。扩充虚拟内存
4。重启!
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
527
import
I
I
回复
0
查看
759
import
I
I
回复
0
查看
682
import
I
I
回复
0
查看
467
import
I
后退
顶部