Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Escrever da Direita para Esquerda em Edit


Pirambu!

Pergunta

9 respostass a esta questão

Posts Recomendados

  • 0
Alguém sabe como eu posso fazer para escrever em um edit da direita para esquerda em forma de Moeda?

Douglas_Soares ....Inverte ele, huahuhauha, brincadeira

Douglas é exatamente isso que tem que ser feito ... a unica diferença é quando voce vai escrever em formato de moeda

exemplo: use 2 edits e um botão

procedure TForm1.Button1Click(Sender: TObject);
var i, x : integer; s,s1,s2 : string;
begin
   x := length(Edit1.text);
   s1 := ''; s2 := '';
   edit2.clear;
   for i := 1 to x do
      begin
         Edit2.MaxLength := 20;
         s := '';
         s := '%'+inttostr(20-i)+'s';
         if i = 1 then
            s1 := Format(s,[Edit1.Text[i]])
         else
            s1 := Edit1.Text[i];

         insert(s1,s2,20+i);
         Edit2.Text := s2;
         Edit2.Refresh;
         delete(s2,1,2);
         sleep(500);
      end;

end;
OBS: neste exemplo o que estiver digitado no Edit1 será digitado no Edit2 da direita para a esquerda Com algumas alterações no código, voce pode digitar da direita para a esquerda no mesmo edit , obrigando o Edit a aceitar apenas numeros e coloca-lo no formato de moeda exemplo:
function FNUMD(Objeto: TEdit; Texto, VKey: String; Espaco, Decimal: Integer): String;
Var
vChar, vDiv : String;
I : Integer;
begin
   vDiv := '1';
   For I := 1 to Decimal do
     vDiv := vDiv + '0';

   vChar := copy(Texto,1,length(Texto));

   if (vchar = '') or (vchar = '0') then
      vchar := vkey
   else
      vchar := vchar + vkey;

   While ( pos( ',', vChar ) > 0 ) or ( pos( '.', vChar ) > 0 ) do
     begin
     Delete( vChar, pos( '.', vChar ), 1 );
     Delete( vChar, pos( ',', vChar ), 1 );
     end;
   Objeto.MaxLength := Espaco;
   Objeto.Text := Format('%*.*n',[Espaco,Decimal,StrToFloat(vchar)/StrToInt(vDiv)]);
   Objeto.SelStart := length(Objeto.text);
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
    if not (key in ['0'..'9',',', #8]) then
       key := #0
    else
       FNUMD(Edit1,trim(Edit1.text),key,20,2);

end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Pronto era isso que procurava, mas tem como no proprio edit aparacer "R$" antes do valor?

Poxa Pirambu ... acho que voce tem um bom conhecimento na linguagem, então não deveria ser tão dificil para voce conseguir resolver este pequeno problema.

Veja a mudança no código:

function FNUMD(Objeto: TEdit; Texto, VKey: String; Espaco, Decimal: Integer): String;
Var
vChar, vDiv : String;
I : Integer;
begin
   vDiv := '1';
   For I := 1 to Decimal do
     vDiv := vDiv + '0';

   vChar := copy(Texto,1,length(Texto));

   if (vchar = '') or (vchar = '0') then
      vchar := vkey
   else
      vchar := vchar + vkey;

   While ( pos( ',', vChar ) > 0 ) or ( pos( '.', vChar ) > 0 ) do
     begin
     Delete( vChar, pos( '.', vChar ), 1 );
     Delete( vChar, pos( ',', vChar ), 1 );
     end;
   Objeto.MaxLength := Espaco;
   Objeto.Text := Format('%*.*n',[Espaco,Decimal,StrToFloat(vchar)/StrToInt(vDiv)]);
   Objeto.SelStart := length(Objeto.text);
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
    if pos('R$',Edit1.Text) > 0 then
       Edit1.Clear;

    if key = #13 then
       begin
          Edit1.text := format('%20s',['R$ '+ trim(Edit1.text)]);
          exit;
       end;

    if not (key in ['0'..'9',',', #8]) then
       key := #0
    else
       FNUMD(Edit1,trim(Edit1.text),key,20,2);

end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Achei excelente essa dica. Eu também estava precisando para um programa que estou fazendo. Porém, eu gostaria que quando teclassemos a tecla BackSpace fosse apagado o último número digitado.

Exemplo:

Digito 1 - 0,01

Digito 2 - 0,12

Digito 3 - 1,23

Ai teclo BackSpace uma vez e fica 0,12

Teclo novamente e fica 0,01

Se puder me ajudar agradeço.

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0
Achei excelente essa dica. Eu também estava precisando para um programa que estou fazendo. Porém, eu gostaria que quando teclassemos a tecla BackSpace fosse apagado o último número digitado.

Basta fazer essa modificação

procedure TForm1.Edit1Enter(Sender: TObject);
begin
  Edit1.Clear;
  SysLocale.MiddleEast := true;
  Edit1.BiDiMode := bdRightToLeft;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
   if pos('R$',Edit1.Text) > 0 then
       Edit1.Clear;

    if key = #13 then
       begin
          Edit1.text := 'R$ ' + formatfloat(',0.00',strtofloat(trim(Edit1.text)));
          exit;
       end;

    if not (key in ['0'..'9',',', #8]) then
       key := #0;
end;

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...