Em que evento inicializar propriedade
Olá
Estou criando uma classe descendente de TCustomEdit e encontrei 2 problemas sobre a inicialização das propriedades.
1- tenho a propriedade [i:23073a4f18]InitialValue: Integer[/i:23073a4f18] que define qual o valor inicial.
O Texto do meu edit sera esse valor... nao posso usar .Text pois quero Integer
eu fiz [i:23073a4f18]Text := IntToStr(InitialValue);[/i:23073a4f18] e deu certo...mas: Onde colocar isso?
2- propriedade [i:23073a4f18]Oper: TCustomEdit[/i:23073a4f18] define um Edit de operação.
Quero colocar no evento OnExit desse Oper um método meu...
eu fiz [i:23073a4f18]TEdit(FOper).OnExit := MeuMetodo;[/i:23073a4f18] e deu certo...mas: onde colocar isso
Meu objeto deve incializar com as 2 coisas listadas acima ja definidas...
entretanto, quando eu coloquei no Create vi o problema:
Ele ainda não tinha definido os valores das variáveis...
assim, quando tento fazer isso, encontro sempre [b:23073a4f18]InitialValue = 0[/b:23073a4f18] e [b:23073a4f18]Oper = nil[/b:23073a4f18]
Onde devo inserir as linhas acima descritas?
Obrigado
Até+
Estou criando uma classe descendente de TCustomEdit e encontrei 2 problemas sobre a inicialização das propriedades.
1- tenho a propriedade [i:23073a4f18]InitialValue: Integer[/i:23073a4f18] que define qual o valor inicial.
O Texto do meu edit sera esse valor... nao posso usar .Text pois quero Integer
eu fiz [i:23073a4f18]Text := IntToStr(InitialValue);[/i:23073a4f18] e deu certo...mas: Onde colocar isso?
2- propriedade [i:23073a4f18]Oper: TCustomEdit[/i:23073a4f18] define um Edit de operação.
Quero colocar no evento OnExit desse Oper um método meu...
eu fiz [i:23073a4f18]TEdit(FOper).OnExit := MeuMetodo;[/i:23073a4f18] e deu certo...mas: onde colocar isso
Meu objeto deve incializar com as 2 coisas listadas acima ja definidas...
entretanto, quando eu coloquei no Create vi o problema:
Ele ainda não tinha definido os valores das variáveis...
assim, quando tento fazer isso, encontro sempre [b:23073a4f18]InitialValue = 0[/b:23073a4f18] e [b:23073a4f18]Oper = nil[/b:23073a4f18]
Onde devo inserir as linhas acima descritas?
Obrigado
Até+
Paulo_amorim
Curtidas 0
Respostas
Dopi
04/05/2004
Voce deve inicializar valores no metodo Create mesmo...
defina dentro do Public da sua classe:
Public
Constructor create( sPorta : String) ;
// Isso fará uma sobrecarga do Construtor padrao:
//Escreva o medoto Inicializando as suas variaves e depois chame o construtor da classe Mae.
constructor SuaClasse.create(Pamateros : String);
begin
// execura o seu codigo, se necessário usando Parametros
Text := IntToStr(InitialValue);
OnExit := MeuMetodo;
// Chama o Create da Classe mae
inherited Create( ParametrosDaClasseOriginal )
end;
defina dentro do Public da sua classe:
Public
Constructor create( sPorta : String) ;
// Isso fará uma sobrecarga do Construtor padrao:
//Escreva o medoto Inicializando as suas variaves e depois chame o construtor da classe Mae.
constructor SuaClasse.create(Pamateros : String);
begin
// execura o seu codigo, se necessário usando Parametros
Text := IntToStr(InitialValue);
OnExit := MeuMetodo;
// Chama o Create da Classe mae
inherited Create( ParametrosDaClasseOriginal )
end;
GOSTEI 0
Paulo_amorim
04/05/2004
Olá
Eu tinha feito isso mesmo. Só que eu me deparei com um problema... a variavel InitialValue ainda não tinha sido carregada com o valor digitado no ObjectInspector...
Tanto eh que se eu coloco p.ex. 10 no ObjInspector e rodo, ele NÃO aparece 10 no Text...
Mas quando fecho e abro denovo, aí sim ele aparece (pois ele carregou o Text com 10 APÓS eu ter mandado [i:20a1a34868]Text := ...[/i:20a1a34868] ...
Ainda assim, obrigado pela preocupação. Se vc tiver, ou alguem tiver, outras soluções estarei agradecido
Até+
Eu tinha feito isso mesmo. Só que eu me deparei com um problema... a variavel InitialValue ainda não tinha sido carregada com o valor digitado no ObjectInspector...
Tanto eh que se eu coloco p.ex. 10 no ObjInspector e rodo, ele NÃO aparece 10 no Text...
Mas quando fecho e abro denovo, aí sim ele aparece (pois ele carregou o Text com 10 APÓS eu ter mandado [i:20a1a34868]Text := ...[/i:20a1a34868] ...
Ainda assim, obrigado pela preocupação. Se vc tiver, ou alguem tiver, outras soluções estarei agradecido
Até+
GOSTEI 0
Dopi
04/05/2004
Em qual seção voce declarou a sua Propriedade ?
Published ?
Published ?
GOSTEI 0
Valdir.santos
04/05/2004
Olá,
Eu nunca criei componentes, mas hoje estava tentando criar um Edit que preenchesse o Text com o número de zeros de MaxLength, e me deparei com este problema. Queria que em tempo de design, ao alterar o valor de Maxlength, o Text também se alterasse.
Este é o código. Olhando a procedure SetMaxLength, talvez resolva o seu problema. No seu caso, seria SetInitialValue.
Valdir.
Eu nunca criei componentes, mas hoje estava tentando criar um Edit que preenchesse o Text com o número de zeros de MaxLength, e me deparei com este problema. Queria que em tempo de design, ao alterar o valor de Maxlength, o Text também se alterasse.
Este é o código. Olhando a procedure SetMaxLength, talvez resolva o seu problema. No seu caso, seria SetInitialValue.
unit EditZeros; interface uses Windows, SysUtils, Classes, Controls, StdCtrls, StrUtils; type TEditZeros = class(TEdit) private FMaxLength: integer; protected procedure SetMaxLength(Value: integer); procedure CMEnter(var Message: TCMGotFocus); message CM_ENTER; procedure KeyDown(var Key: Word; Shift: TShiftState); override; procedure KeyPress(var Key: Char); override; public constructor Create(AOwner : TComponent); override; destructor Destroy; override; published property MaxLength: integer read FMaxLength write SetMaxLength; end; procedure Register; implementation procedure Register; begin RegisterComponents(´Standard´, [TEditZeros]); end; procedure TEditZeros.CMEnter(var Message: TCMGotFocus); begin if Text=´´ then Text:=StringOfChar(´0´,MaxLength); SelStart:=Length(Text); end; constructor TEditZeros.Create(AOwner : TComponent); begin inherited Create(AOwner); Width:=42; FMaxLength:=2; Text:=´00´; end; destructor TEditZeros.Destroy; begin inherited Destroy; end; procedure TEditZeros.KeyDown(var Key: Word; Shift: TShiftState); begin inherited; if Key = VK_LEFT then begin Key:=0; Keybd_Event(8,0,0,0); end; end; procedure TEditZeros.KeyPress(var Key: Char); begin inherited; if not (Key in [´0´..´9´,8]) then begin Key:=0; Exit; end; case Key of ´0´..´9´: if LeftStr(Text,1) = ´0´ then Text:=RightStr(Text,MaxLength-1)+Key; 8: Text:=´0´+LeftStr(Text,MaxLength-1); else Exit; end; Key:=0; SelStart:=MaxLength; end; procedure TEditZeros.SetMaxLength(Value: integer); begin Text:=StringOfChar(´0´,Value); FMaxLength := Value; end; end.
Valdir.
GOSTEI 0