Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Delphi Eingabe von Dezimalzahlen, Desktoprechner (https://www.delphipraxis.net/133183-eingabe-von-dezimalzahlen-desktoprechner.html)

Dipl Phys Ernst Winter 27. Apr 2009 13:59


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:
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;
meExit bildet aus dem eingegebenen String einen konvertierbaren Zahlenstring und schreibt ihn in das Eingabefeld zurück.

Delphi-Quellcode:
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
Desktoprechner
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.

shmia 27. Apr 2009 18:08

Re: Eingabe von Dezimalzahlen, Desktoprechner
 
Das Weiterschalten des aktuellen Controls lässt sich so ganz allgemein lösen:
Delphi-Quellcode:
   Perform(WM_NEXTDLGCTL, 0, 0);
Dadurch wird das nächste Steuerelement in der Tabulatorreihenfolge angesprungen.
Delphi-Quellcode:
   Perform(WM_NEXTDLGCTL, 1, 0); // rückwärts springen

Dipl Phys Ernst Winter 28. Apr 2009 09:12

Re: Eingabe von Dezimalzahlen, Desktoprechner
 
Vielen Dank an "shmia", das erspart eine Menge Arbeit

DP-Maintenance 2. Mai 2009 19:45

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 01:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz