Em que evento inicializar propriedade

Delphi

04/05/2004

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é+


Paulo_amorim

Paulo_amorim

Curtidas 0

Respostas

Dopi

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;


GOSTEI 0
Paulo_amorim

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é+


GOSTEI 0
Dopi

Dopi

04/05/2004

Em qual seção voce declarou a sua Propriedade ?

Published ?


GOSTEI 0
Valdir.santos

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.

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
POSTAR