几个低级控件开发问题,进来帮忙看看。(100分)

  • 主题发起人 主题发起人 crazycock
  • 开始时间 开始时间
C

crazycock

Unregistered / Unconfirmed
GUEST, unregistred user!
(1)继承来的属性,能否在派生类中掩藏掉?不让其在属性编辑器中出现??
(2)从TEdit派生出一个只能输入数字字符的TNumEdit,文字还是靠左边对其,如何让其靠右边对齐?见过类似控件,可惜没有源码,不知其如何实现~
(3)那种只能录入数字字符,光标离开Edit后,里面内容自动以“,”分组,而且可以指定小数点位数的Edit输入控件,会是从那个基类派生下来的呢?
哪位朋友有相关的控件,带有源码的,麻烦发一份给我学习学习,谢谢。
crazycock@avl.com.cn
 
我看了,就是著名的控件RxLib中的TCurrencyEdit所具有的功能,可是好像没有源码,我写这个只是为了练习组件开发,千万不要告诉我,用那个RxLib中的咚咚就行了啊。要不本来的灌水分都不给你了~~[:D]
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=870605
 
非常感谢zhihuali!!!!你的帖子真是很适合我学习啊~~:)
另外,我也找到RXLib中TCurrencyEdit的代码了,对于提高自己能力确实很有帮助,学习中。。。。。。。

另外,我的第一个问题还没有人回答呢~~~[:(]
 
1.就是把这个属性在子类中重写一遍,属性名字相同,但不要published就可以了。
 
to Highpeak:试了,不行啊。怎么写呢?请详细些。谢谢。
 
靠,真的不行耶。
建议重写一个父类的复本,在改复本重去掉公共属性的发布。
看看:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=424170
 
以前见过一个的
// TExEdit
//对原有的LableEdit上加入了OnlyInputNumber选项来控制只可以输入数字
{==============================================================================}
{ TExEdit }
TKeyDown = procedure(sender: Tobject; Key: Word) of object;
TExEdit = class(TLabeledEdit)
private
FOnlyInputNumber: Boolean;
FKeyDown: TKeyDown;
FCaption: string;
procedure WMKeyDown(var Message: Tmessage); message WM_KeyUP;
procedure SetCaption(const Value: string);
protected
procedure SetOnlyInputNumber(Flag: Boolean);
public
// destructor Destroy; override;
constructor Create(AOwner: TComponent); override;
published
property OnlyInputNumber: Boolean read FOnlyInputNumber write SetOnlyInputNumber;
property OnKeyDown: TKeyDown read FkeyDown write FkeyDown;
property Caption: string read FCaption write SetCaption;
end;


procedure TExEdit.WMKeyDown(var Message: Tmessage);
var
vKey: string;
begin
if message.WParam = VK_Return then Fn.SendKey(0, VK_TAB, vkeyClick);
//---
vkey := copy(text, SelStart, 1); //得到输入的字符
if length(text) > 0 then
begin
// if (message.WParam in [$41..$5A,$61..$7A,vk_space,187..189,191,226])and FOnlyInputNumber then
// begin
(*再次过滤防止小键盘的按键被过滤*)
if (vkey[1] in ['a'..'z', 'A'..'Z', ' ', '=', ',', '+', '-', '*', '/', '/']) and FOnlyInputNumber then
begin
self.SelStart := self.SelStart - 1;
Fn.SendKey(self.Handle, VK_Delete);
dobleep(800, 100);
end;
// end;
end;
if assigned(FKeyDown) then self.OnKeyDown(self, message.WParam);
message.Result := 0;
// Fn.Free;
end;


procedure TExEdit.SetCaption(const Value: string);
begin
FCaption := Value;
self.EditLabel.Caption := FCaption;
end;


procedure TExEdit.SetOnlyInputNumber(Flag: Boolean);
begin
if Flag <> FOnlyInputNumber then FOnlyInputNumber := flag;
end;


constructor TExEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
LabelPosition := lpLeft;
end;


 

Similar threads

D
回复
0
查看
844
DelphiTeacher的专栏
D
D
回复
0
查看
854
DelphiTeacher的专栏
D
D
回复
0
查看
588
DelphiTeacher的专栏
D
D
回复
0
查看
854
DelphiTeacher的专栏
D
后退
顶部