// Wer für Zahlen bzw. Währungen nicht TMaskEdit verwenden kann oder will,
// kann den nachfolgen Code für ein
TEdit nutzen.
// Bei drücken von ENTER oder beim Verlassen von Edit1 wird der darin
// enthaltene Wert formatiert
.

// Getestet mit D4 unter WinME

const 
  minus_rot = true;          // Bei True werden negative Werte rot angezeigt 
  dezimalstellen = 2;        // Je nach Bedarf 
  waehrung: char = '€';      // Währung darf nur 1 Zeichen haben ($, €, ¥, £) 
  trennzeichen = '.';        // Tausendertrennzeichen festsetzen 
  gruppierung = true;        // Tausendertrennzeichen einsetzen 
  WaehrungAnzeigen = true;   // False = keine Währungsanzeige 
  runden = true;             // Bei False werden höhere Dezimalstellen 
                             // einfach abgeschnitten 
 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  edit1.text := ''; 
  edit1.color := clwhite; 
end; 
 
// Eingabe überprüfen 
 
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); 
var p1, p2: integer; 
begin 
  if key = #13 then begin 
    key := #0; 
    Edit1Exit(Sender); 
    exit; 
  end; 
  if key = Thousandseparator then key := trennzeichen; 
  p1 := pos(DecimalSeparator, edit1.text); 
  p2 := pos(waehrung, edit1.text); 
  if (not (key in [#8, '0'..'9', trennzeichen, DecimalSeparator, '+', '-', 
    waehrung, #32])) 
    or (key = #32) and (edit1.selstart = 0) 
    or ((key = '+') or (key = '-')) and (edit1.selstart > 0) 
    or (pos('+', edit1.text) + 
    pos('-', edit1.text) > edit1.selstart + edit1.sellength) 
    or (key = DecimalSeparator) and (p1 > 0) and (p1 <= edit1.selstart) 
    or (p2 = edit1.selstart) and (p2 > 0) and (key <> #8) 
    or (key = waehrung) and ((p2 > 0) or (not WaehrungAnzeigen)) 
    then key := #0; 
end; 
 
// Formatieren 
 
procedure TForm1.Edit1Exit(Sender: TObject); 
var 
  frmt, vz, ttz: string; 
  x, p: integer; 
begin 
  if gruppierung then ttz := '#,##0' else ttz := '0'; 
  edit1.text := stringreplace(edit1.text, #32, '', [rfreplaceall]); 
  edit1.text := stringreplace(edit1.text, waehrung, '', [rfreplaceall]); 
  edit1.text := stringreplace(edit1.text, ThousandSeparator, '', [rfreplaceall]); 
  vz := copy(edit1.text, 1, 1); 
  if vz = '-' then edit1.text := copy(edit1.text, 2, length(edit1.text) - 1) 
  else vz := ''; 
  edit1.text := stringreplace(edit1.text, '+', '', [rfreplaceall]); 
  if edit1.text = '' then exit; 
  if dezimalstellen > 0 then begin 
    frmt := '.'; 
    for x := 1 to dezimalstellen do frmt := frmt + '0'; 
  end else frmt := ''; 
  p := pos(DecimalSeparator, edit1.text); 
  if (not runden) and (p > 0) then 
    edit1.text := copy(edit1.text, 1, p + dezimalstellen); 
  try 
    edit1.text := vz + formatfloat(ttz + frmt, strtofloat(edit1.text)); 
    edit1.text := stringreplace(edit1.text, Thousandseparator, trennzeichen, 
      [rfreplaceall]); 
    if WaehrungAnzeigen then edit1.text := edit1.text + #32 + waehrung; 
  except 
    edit1.text := '- Zuweisung ungültig -'; 
    beep; 
  end; 
end; 
 
// immer linksbündig halten 
 
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; 
  Shift: TShiftState); 
begin 
  if (key = vk_back) or (key = vk_delete) then begin 
    while copy(edit1.text, 1, 1) = #32 do edit1.text := 
      copy(edit1.text, 2, length(edit1.text) - 1); 
  end; 
end; 
 
// negative Werte rot ausgeben 
 
procedure TForm1.Edit1Change(Sender: TObject); 
begin 
  if (pos('-', edit1.text) > 0) and minus_rot then 
    edit1.font.color := clred else edit1.font.color := clblack; 
end; 



// ------------ Beispiele -----------------

// Zuweisung eines (ungültigen) Wertes.
// Edit1 enthält danach: "Zuweisung ungültig"
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  edit1.text := 'ABC';
  Edit1Exit(Sender);
end;
 
// Währung (auch für zukünftige Eingabe) ändern
 
procedure TForm1.Button1Click(Sender: TObject);
var neu: char;
begin
  neu := '$';
  edit1.text := stringreplace(edit1.text, waehrung, neu, [rfreplaceall]);
  waehrung := neu;
end;



Zugriffe seit 6.9.2001 auf Delphi-Ecke