AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Delphi Eingabe von Dezimalzahlen, Desktoprechner

Eingabe von Dezimalzahlen, Desktoprechner

Ein Thema von Dipl Phys Ernst Winter · begonnen am 27. Apr 2009 · letzter Beitrag vom 2. Mai 2009
Antwort Antwort
Dipl Phys Ernst Winter
Registriert seit: 14. Apr 2009
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.
Angehängte Dateien
Dateityp: exe areell_136.exe (190,0 KB, 19x aufgerufen)
Autor: DP Ernst Winter
 
shmia

 
Delphi 5 Professional
 
#2
  Alt 27. Apr 2009, 19:08
Das Weiterschalten des aktuellen Controls lässt sich so ganz allgemein lösen:
   Perform(WM_NEXTDLGCTL, 0, 0); Dadurch wird das nächste Steuerelement in der Tabulatorreihenfolge angesprungen.
   Perform(WM_NEXTDLGCTL, 1, 0); // rückwärts springen
Andreas
  Mit Zitat antworten Zitat
Dipl Phys Ernst Winter

 
Delphi 3 Professional
 
#3
  Alt 28. Apr 2009, 10:12
Vielen Dank an "shmia", das erspart eine Menge Arbeit
  Mit Zitat antworten Zitat
2. Mai 2009, 20:45
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
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:48 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