Me ajudem a criar este componente (edit numérico)

Delphi

03/06/2005

Queria uma ajuda para [b:79e776f67e]implementar o componente [/b:79e776f67e]descrito abaixo:
este componente é um edit alinhado a direita o que já é muito útil.

No evento [b:79e776f67e]on change [/b:79e776f67e]deste componente eu uso um códio que chama uma função para que seja digitados somente números da direita para esquerda.

procedure Form.edit1Change(Sender: TObject);
begin
edit1.text := mascara(edit1.text); // aqui eu cahmo a funcao mascara
edit1.SelStart := Length(edit1.Text); // posiciono o cursor no final do edit
end;



Tudo já funciona e bem . O que eu queria era implementar esta função que eu chamo no OnChange dentro do próprio componente ai eu não precisaria escrever código no evento onChange de cada edit que eu colocasse na minha aplicação, pois esta rotina já estará embutida no componente.

Entao preciso que me digam como colocar essa rotina no código do componente?

[b:79e776f67e]Se possível escrevam o código aqui pois não tenho muita prática em ciração de componte.[/b:79e776f67e]
******************************************************
[b:79e776f67e]Componente[/b:79e776f67e]
******************************************************
unit ueditcomalinhamento;

interface

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

type
TEditAlinh = class(TEdit)
private
FAlinhamento : TAlignment;
procedure SetAlinhamento(const Value: TAlignment);

protected
procedure CreateParams(var Params: TCreateParams); override;

public
published
property Alinhamento: TAlignment read FAlinhamento write SetAlinhamento;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents(´Samples´, [TEditAlinh]);
end;

procedure TEditAlinh.CreateParams(var Params: TCreateParams);
const Alinhamentos: array[TAlignment] of Longint = (ES_LEFT, ES_RIGHT, ES_CENTER);
begin
inherited CreateParams(Params);

Params.Style := Params.Style or Alinhamentos[FAlinhamento];
end;

procedure TEditAlinh.SetAlinhamento(const Value: TAlignment);
begin
FAlinhamento := Value;
RecreateWnd;
end;

end.

****************************************************




#
[b:79e776f67e]Função[/b:79e776f67e]


function Mascara(Texto: String): String;
var
sAux: String;
i, iPos: Integer;
begin
{ Deixa só com os números }
for i := 1 to Length(Texto) do
begin
if not (Texto[i] in [´0´..´9´]) then
Delete(Texto,i,1);
end;

{ Completar com ´0´ para deixar tamanho correto }
//sAux := StringOfChar(´0´,11 - Length(Texto)) + Texto;

sAux := trim(texto);
case strlen(pchar(sAux)) of
1: sAux := ´00´ + sAux;
2: sAux := ´0´ + sAux;
end;
case strlen(pchar(sAux)) of
3: sAux := FormatMaskText(´0,00;0´,sAux);
4: sAux := FormatMaskText(´00,00;0´,sAux);
5: sAux := FormatMaskText(´000,00;0´,sAux);
6: sAux := FormatMaskText(´0.000,00;0´,sAux);
7: sAux := FormatMaskText(´00.000,00;0´,sAux);
8: sAux := FormatMaskText(´000.000,00;0´,sAux);
9: sAux := FormatMaskText(´0.000.000,00;0´,sAux);
10: sAux :=FormatMaskText(´00.000.000,00;0´,sAux);
11: sAux :=FormatMaskText(´000.000.000,00;0´,sAux);
end;
{ Mostrar somente a parte relevante }
iPos := 1;
for i := 1 to Length(sAux) do
begin
if sAux[i] = ´,´ then
begin
iPos := i -1;
Break;
end;

if not (sAux[i] in [´0´,´.´]) then
begin
iPos := i;
Break;
end;
end;
Result := Copy(sAux,iPos,Length(sAux));
end;
#


Ahn

Ahn

Curtidas 0

Respostas

Marcello

Marcello

03/06/2005

Caro colega,

Se quiser tenho o .PAS de um componente chamado NUMEDIT, q acho q faz e q vc precisa.

Passa seu email q te mando.


GOSTEI 0
POSTAR