PDA

View Full Version : سوال: نوشتن کامپوننت



مجتبی جوادی
چهارشنبه 24 تیر 1388, 17:01 عصر
دوستان سلام
من یک کامپوننت با کلاس TEdit نوشته ام که در آن چند property قرار داده و در رویداد Change دستوری قرار داده ام که در هنگام تایپ ، اعداد را همزمان سه رقم ، سه رقم جدا می کند . این کامپوننت را تست کردم بجز یک اشکال کاملاً درست عمل می کند . اشکال آن این است که چون دستورات جدا کردن سه رقم ، سه رقم را در رویداد Change آن قرار داده ام ، در برنامه هایم رویدارد OnChange عمل نمی کند . لطفاً کمک کنید که کجا باید دستورات جدا کننده سه رقم ، سه رقم قرار دهم تا برنامه هایم بتوانم از رویداد OnChange آن استفاده کنم ؟
با تشکر

Hsimple11
چهارشنبه 24 تیر 1388, 17:53 عصر
باید در همان OnChange این کار را بکنید. یونیت کامپوننت خودتون رو کامل اینجا بذارید. مشکل از این نیست. باید رویداد Onchange مربوط به TEdit رو Override کنید.

در ضمن مشابه همین کاری که میخواهید بکنید قبلا انجام شده و کامپوننتش توی همین سایت (اگه اشتباه نکنم) هست.

مجتبی جوادی
چهارشنبه 24 تیر 1388, 19:04 عصر
دوست عزیز من رویداد OnChange را Override هم کردم

Hsimple11
چهارشنبه 24 تیر 1388, 19:19 عصر
عزیزم گفتم که مشکل از این چیزی که شما میگید نیست. مشکل جای دیگه ایه. من یه مثال کامل می نویسم:


unit MyEdit;

interface

uses
SysUtils, Classes, Controls, StdCtrls, ExtCtrls;

type
MyNewEdit= class(TEdit)
private
{ Private declarations }
protected
procedure change;override;
procedure KeyPress(var Key:char);override;
{ Protected declarations }
public
constructor create(Aowner:tcomponent);override;
{ Public declarations }
published
{ Published declarations }
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Hsimple11', [MyNewEdit]);
end;
//---------------------------------------------
constructor MyNewEdit.create(Aowner:TComponent);
begin
inherited Create(Aowner);
Parent := TEdit(Owner);
BiDiMode:=bdRightToLeft;
font.Name:='Tahoma';
font.Charset:=178;
end;
//---------------------------------------------
procedure MyNewEdit.KeyPress(var Key:char);
begin
if not (key in ['0'..'9',#8]) then
key:=#0;
end;
//---------------------------------------------

procedure MyNewEdit.change;
var
i:Integer;
begin

if text >'0' then
begin

if Length(Text) <> 0 then
begin
i := SelStart;
Text := FormatFloat('#,', StrToInt64(num(Text)));
SelStart := i + 1;
end;
end;
//------------

end;

end.

مجتبی جوادی
چهارشنبه 24 تیر 1388, 19:35 عصر
من Change را بصورت زیر تعریف کرده ام

procedure TCurrencyEdit.Change;
begin
if(Text<>'')and SetDigital then
Text:=SplitNum(Text);
end;

که در این کد SetDigital تعیین می کند که سه رقم ، سه رقم فعال باشد یا نه