![]() |
Eingabe von Dezimalzahlen, Desktoprechner
Liste der Anhänge anzeigen (Anzahl: 1)
Meine Standardeingabe für Dezimalzahlen (nach Einfügen des Beitrags von shmia)
Die Eingabe und Edition von Zahlenwerten stellt in vielen Anwendungen einen wesentlichen Anteil der Bedienung dar, daher ihr eine besondere Bedeutung zu. Eingabe und Edition von Zahlen soll mit der rechten Hand, unter alleiniger Verwendung der Tasten im Nummernfeld, möglich sein. Nach vollendeter Eingabe soll der Text des Eingabefeldes mit StrToFloat(Trimm(Text)) in eine Zahl vom Typ extended konvertierbar sein. Die Eingabe neuer Zahlen soll durch zeichenweise Eingabe ihres Zahlenstrings ohne einen zusätzlichen Tastendruck erfolgen, z.B. -12.45 mit '-', '1', '2', '.', '4', '5' und Endzeichen. Der Dezimalpunkte soll mit der Komma-Taste eingegeben, Enter neben tab als Endzeichen verwendet werden können. Nach vollendeter Eingabe soll die Zahl formatiert mit fester Position des Dezimalpunktes im Fenster stehen. Um Tippfehler sofort korrigieren zu können, soll jederzeit der Übergang zur Edition der bereits eingegebene Zahl möglich sein. Verwendet werden MaskEdit-Komponenten mit dem Font ’Courier New’, AutoSelect true gesetzt und Masken wie: ’#######.999;1; ’, für vorzeichenbehaftete Zahlen; bzw. ’9999999.999;1; ’, für vorzeichenlose Zahlen. Die Anzahl der Dezimalstellen ist entsprechend der Maske in die Eigenschaft Tag der Komponente einzutragen. Eventhändler: Alle Komponenten sind für die Ereignisse OnKeyPress und OnExit mit den gemeinsamen Eventhändlern meKeyPress bzw. meExit zu verbinden. meKeyPress verhindert die Eingabe illegaler Vorzeichen, erlaubt die Eingabe des Dezimalpunktes als Komma und Enter als Endzeichen.
Delphi-Quellcode:
meExit bildet aus dem eingegebenen String einen konvertierbaren Zahlenstring und schreibt ihn in das Eingabefeld zurück.
procedure TForm1.MaskEditKeyPress(Sender: TObject; var Key: Char);
begin if (Key='+') then Key:= #0; // Vorzeichenbehandlung, '+' wird nicht verwendet if (Key='-') then begin // kein zweites '-' als negatives Vorzeichen, with Sender as TMaskEdit do // wenn nicht der ganze Text markiert if (SelLength<Length(Text)) and (Pos('-', Text)>0) then Key:= #0; if Key=',' then Key:= '.'; // Komma zur Eingabe Dezimalpunkt if Key=#13 then Perform(WM_NextDLGCTL,0,0) // weiter in der Tabulatorfolge end;
Delphi-Quellcode:
Desktoprechner
procedure TForm1.MaskEditExit(Sender: TObject);
var s: string; k: integer; w: extended; begin // Im Eingabefeld einen konvertierbaren String formatieren with Sender as TMaskEdit do begin s:= Trim(Text); k:= Pos(' ', s); // Alle Leerzeichen entfernen, while k>0 do begin Delete(s, k, 1); k:= Pos(' ', s) end; k:= Pos('-', s); // Vorzeichenbehandlung, setzt das '-' vor die Ziffern if k>1 then begin Delete(s, k, 1); s:= '-' + s end; if s<>'' then w:= StrToFloat(s) else w:= 0; // Den Rest wandeln, Str(w:MaxLength:Tag, s); // formatieren und Text:= s end; // zurückschreiben // Optional schließt hier die Zuweisung der Werte zu den Variablen an Ich zeige die Anwendung des Tips an einem Desktoprechner, das ist ein auf den Desktop gelegter Taschenrechner, dessen Operanden x und y in getrennten Eingabefeldern über die Tastatur eingegeben werden. Er zeichnet sich dadurch aus, dass nach jedem Rechenschritt die Operanden x und y, das Ergebnis z und ein Prompt, der angezeigt, wie das Ergebnis entstanden ist, sichtbar sind. Das Ergebnis lässt sich durch Verknüpfung beider Operanden mit +, -, *, / und div (ganzzahlige Division mit Rest) bilden oder als Funktion von x. In 10 Speichern lassen sich Werte von x, y oder z zwischenspeichern. Zum Weiterrechnen lassen sich diese und das Ergebnis z in die Operanden x und y transportieren. Winkel können in Grad- oder Bogenmaß verwendet werden. Die Anzeige erfolgt Wahlweise mit 1 – 9 Dezimalstellen oder im Gleitkommaformat. |
Re: Eingabe von Dezimalzahlen, Desktoprechner
Das Weiterschalten des aktuellen Controls lässt sich so ganz allgemein lösen:
Delphi-Quellcode:
Dadurch wird das nächste Steuerelement in der Tabulatorreihenfolge angesprungen.
Perform(WM_NEXTDLGCTL, 0, 0);
Delphi-Quellcode:
Perform(WM_NEXTDLGCTL, 1, 0); // rückwärts springen
|
Re: Eingabe von Dezimalzahlen, Desktoprechner
Vielen Dank an "shmia", das erspart eine Menge Arbeit
|
DP-Maintenance
Dieses Thema wurde von "fkerber" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Open-Source" verschoben.
Kein Code-Schnipsel im eigentlichen Sinne, sondern ein fertiges Programm |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz