2015-04-17 15 views
1

我想在TEDIT格式化##.###.###-#,我使用下面的代碼:TEDIT OnChangeTracking

procedure TfrmPropiedad.edtRUTChangeTracking(Sender: TObject); 
var 
    texto, digito: string; 
begin 
    with Sender as TEdit do 
    begin 
    if Length(Text) > 1 then 
    begin 
     texto := ReplaceStr(ReplaceStr(Text, '.', ''), '-', ''); 
     if Length(texto) > 1 then 
     begin 
     digito := Copy(texto, Length(texto), 1); 
     texto := FormatFloat(',0', StrToFloat(Copy(texto, 1, Length(texto) - 1))); 
     texto := ReplaceStr(texto, ',', '.'); 
     texto := texto + '-' + digito; 
     OnChangeTracking := nil; 
     Text := ''; 
     Text := AnsiUpperCase(texto); 
     OnChangeTracking := edtRUTChangeTracking; 
     GoToTextEnd; 
     end; 
    end; 
    end; 
end; 

GotoTextEnd並不總是奏效。

+0

重新格式化的文本 –

回答

0

問題是您在OnChange中放置的代碼在編輯組件的新文本中設置,並且通過引發新的OnChange事件。如果您將代碼移動到ChangeTracking事件,則它可以工作:

procedure TForm15.edtRUTChangeTracking(Sender: TObject); 
var 
    texto, digito: string; 
begin 
    with Sender as TEdit do 
    begin 
    if Length(Text) > 1 then 
    begin 
     texto := String(Text).Replace('.', '').Replace('-', ''); 

     if Length(texto) > 1 then 
     begin 
     digito := Copy(texto, Length(texto), 1); 
     texto := FormatFloat(',0', StrToFloat(Copy(texto, 1, Length(texto) - 1))); 
     texto := texto.Replace(',', '.'); 
     texto := texto + '-' + digito; 
     OnChangeTracking := nil; 
     Text := ''; 
     Text := AnsiUpperCase(texto); 
     OnChangeTracking := edtRUTChangeTracking; 
     GoToTextEnd; 
     end; 
    end; 
    end; 
end;