AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Überprüfen, ob Variable einem gewissen Typ entspricht
Thema durchsuchen
Ansicht
Themen-Optionen

Überprüfen, ob Variable einem gewissen Typ entspricht

Ein Thema von MarquiseDeSade · begonnen am 21. Mai 2007 · letzter Beitrag vom 22. Mai 2007
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von MarquiseDeSade
MarquiseDeSade

Registriert seit: 18. Apr 2007
Ort: Mainz
55 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Überprüfen, ob Variable einem gewissen Typ entspricht

  Alt 21. Mai 2007, 18:49
Danke für eure zahlreichen Antworten. Ich werde gleich mal ein bissl rumprobieren. Die Eingabe ist zu 100 % über Buttons geregelt. Der Taschenrechner hat das selbe Layout, wie der Standartrechner von Windows...

Kannst du mal die Anwendung von TryStrToFloat an einem Beispiel zeigen ?
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#12

Re: Überprüfen, ob Variable einem gewissen Typ entspricht

  Alt 21. Mai 2007, 18:50
Zitat von Apollonius:
Du versuchst einfach, die Benutzereingabe mit TryStrToFloat in einen Float umzuwandeln.
Wie stellst du dir die praktische Umsetzung vor? Das Programm kann dem User wohl schlecht auf die Fingerchen hauen, sobald dieser "3," eingibt.
Bei Fließkommazahlen ist eine sofortige Validierung und entsprechende Fehlermeldung/Anpassung einfach unmöglich, weshalb ich sie vollständig auf den Zeitpunkt nach der Eingabe (Fokusverlust, Button-Klick, ...) verlagern würde (dann würde ich wirklich TryStrToFloat empfehlen ).
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Überprüfen, ob Variable einem gewissen Typ entspricht

  Alt 21. Mai 2007, 18:52
Hm. Hast recht. Aber wenn die Überprüfung wirklich erst im onExit oder ButtonClick ist, dann geht es (wie du gesagt hast).
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von MarquiseDeSade
MarquiseDeSade

Registriert seit: 18. Apr 2007
Ort: Mainz
55 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Überprüfen, ob Variable einem gewissen Typ entspricht

  Alt 21. Mai 2007, 19:07
Dachte nicht, dass dieses Thema so unterschiedliche Umsetzungsvarianten zur Verfügung stellt

Da ich aber erst ca. 3 wochen Delphierfahrung habe, würde ich mich über ein konkretes Beispiel mit der TryStrToFloat-Anweisung freuen....
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Überprüfen, ob Variable einem gewissen Typ entspricht

  Alt 21. Mai 2007, 19:12
Delphi-Quellcode:
procedure TForm1.EingabePruefen;
var h:float;
begin
if not TryStrToFloat(edit1.text,h) then
 begin
  showmessage('Sie Schuft! Geben Sie gefälligst eine gültige Fließkommazahl ein!');
  edit1.text:='';
 end;
end;
Der Text der MessageBox ist natürlich nach Belieben
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von MarquiseDeSade
MarquiseDeSade

Registriert seit: 18. Apr 2007
Ort: Mainz
55 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Überprüfen, ob Variable einem gewissen Typ entspricht

  Alt 21. Mai 2007, 19:30
So sieht es bei mir im Code aus:

Delphi-Quellcode:
procedure TForm1.Button15Click(Sender: TObject);
var
  h:double;

begin
  if TryStrToFloat(edit1.Text,h) then
  edit1.Text:=edit1.text+','
    else
      begin
        showmessage('Sie haben schon ein Kommata');
        edit1.Text:=' ';
      end;

end;
Nun zu meinem Problem. Es arbeitet alles einwandfrei, aber erst ab dem 3. Kommata

Beispiel:
Der User kann eingeben... 2,2,3, erst beim rotem Kommata erscheint die Fehlermeldung. Die Fehlermeldung soll aber schon beim 2. Komma erscheinen
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: Überprüfen, ob Variable einem gewissen Typ entspricht

  Alt 21. Mai 2007, 19:35
Bei welcher Gelegenheit wird dieser Button denn geklickt? Um ein Komma zu setzen? Das funktioniert nicht, du darfst erst ganz am Ende, wenn die Zahl komplett sein soll, prüfen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von MarquiseDeSade
MarquiseDeSade

Registriert seit: 18. Apr 2007
Ort: Mainz
55 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: Überprüfen, ob Variable einem gewissen Typ entspricht

  Alt 21. Mai 2007, 19:54
Mh, ich glaube, ich muss ein bissl besser erklären...

Also, der Rechner besteht aus einem edit1, welches readOnly=true gesetzt ist. Die Eingabe der Zahlen erfolgt über 9 Buttons. Weitere 4 Buttons für die Rechenarten und 1 Button für das Kommata. Nun soll der Benutzer über die Buttons seine Zahlen eingeben. Wenn er dann z.B. die Zahl 1,2,3 eingibt(indem er auf den Kommata-Button drückt), soll schon beim 2. Kommata die Meldung erscheinen, das dies nicht möglich ist.

Wie kann ich das realisieren ?

Im Anhang ist ein ScreenShot vom Rechner...

Ah, und warum lässt sich die Farbe der Zahlen auf den Butten eigentlich nicht verändern ?
Miniaturansicht angehängter Grafiken
rechner_783.jpg  
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: Überprüfen, ob Variable einem gewissen Typ entspricht

  Alt 21. Mai 2007, 20:19
Wenn du das so machen willst, ist es mit trystrtofloat nicht möglich, du solltest pos verwenden, um zu prüfen, ob schon ein Komma da ist. TryStrToFloat geht nur dann, wenn die Zahl schon vollständig vorliegt.

Die Einzahl von Kommata lautet übrigens Komma
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
willnix

Registriert seit: 14. Apr 2007
Ort: Heidelberg
27 Beiträge
 
Delphi 7 Professional
 
#20

Re: Überprüfen, ob Variable einem gewissen Typ entspricht

  Alt 21. Mai 2007, 20:48
Wenn du das rein mit Buttons machst kannst du natürlich auch einfach eine Zählvariable mit dem Komma Button koppeln.
Also wenn der Button geklickt wird erhöhst du die variable um 1 und prüfst bei jedem klick auf den button auch ob die variable schon erhöht wurde oder nicht.
Nur wenn nicht wird ein Komma geschrieben.
Wenn eine Operationstaste Taste wie +,-,*,\,sqrt usw... gedrückt wird setzt du die variable zurück.

Als Code könnte ich mir so etwas denken:
Delphi-Quellcode:
procedure TForm1.KommaButton1Click(Sender: TObject);
begin
  if KommaCount < 1 then
    begin
    Edit1.Text := Edit1.Text+',';
    inc(KommaCount);
    end
  else
    begin
    ShowMessage('Ähäm.. Nur EIN Komma!');
    end;
end;

procedure TForm1.OperationsButton2Click(Sender: TObject);
begin
KommaCount := 0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
KommaCount := 0;
end;
Willnix
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 00:43 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