![]() |
Nach Showmessage Daten aus einem Editfeld einlesen
Hallo Netz,
ich möchte wie oben schon angekündigt nach dem Befehl showmessage Daten aus einem Editfeld einlesen. Hier ist mein code:
Delphi-Quellcode:
Mein Problem ist nun, dass ich durch die Showmessage dem Benutzer sagen möchte, was er ins EditFeld eingeben soll. Wenn er nun okay klickt, stürtzt der Rechner ab, da er aus dem Editfeld nichts einlesen kann. Wenn ich vorher etwas eingebe funktioniert es, was ich aber nicht möchte. Hat jemand eine Idee. Ich bin nicht auf das showmessage festgelegt. Ich möchte grundsätzlich nur dem Benutzer sagen, was er eingeben soll und er soll dann die Zahlenwerte eingeben. Ich kann aber nicht für alles ein extra Editfeld mit Label bauen, da es zu viele Daten sind.
procedure TForm1.Button1Click(Sender: TObject);
var per: integer; begin //Eingabe der Maschinendaten showmessage('Anzahl Maschinen eingeben'); mac:=strtoint(Eingabefeld.text); end; Danke! Gruß Kaddy :bounce2: [edit=DAniel B]Delphi-Tags ergänzt. MfG Daniel B.[/edit] |
Moin Kaddy,
das klingt für mich so, als solltest Du noch mal das Layout überarbeiten, wenn alle Eingabefelder ohne Beschriftung sind, so dass eine Meldung erforderlich ist, was einzugeben ist. Und wenn es so viele Felder sind, dass es zu aufwendig wäre immer ein Label/Static hinzuzufügen, dürfte es für die Anwender recht nervig werden, immer wieder eine Meldung zu erhalten und bestätigen zu müssen. Das einzige was mir einfiele, wäre ein nicht modales Meldungsfenster, bzw. ein Bereich im Formular, in dem die Meldungen was einzugeben ist angezeigt werden (z.B in einer Statusbar), wobei dann das nicht modale Fenster bei jedem Focuswechsel programmseitig zu schliessen und ein neues zu öffnen wäre. Das Problem ist halt, dass Du bei einem modalen Meldungsfenster nichts in das Eingabefenster eingeben kannst. Ausserdem könnte es nichts schaden, wenn den Eingabefeldern noch ein Hint zugeordnet wäre. Die Exception bei StrToInt kannst Du mit StrToIntDef umgehen. |
Dein problem ist eigentlich nur, dass du dem Benutzer keine Zeit lässt, etwas einzugeben. Delphi arbeitet die Anweisungen von oben nach unten durch. Bei ShowMessage pausiert das Programm so lange, bis man die meldung schließt. Machs doch so: Zeig die Message ganz normal an. dann lässt du den Benutzer die Daten eingeben und dann machst du beim Onkeydown ereignis des EditFeldes eine Abfrage, ob es die Entertaste war, dann kann er die Daten einlesen. Sprich: Der Benutzer soll einfach seine Eingabe mit Enter bestätigen. Andererseits ginge es doch auch, dass du einfach ein Label nimmst, es auf das Formular setzt, und nach jeder bestätigten Eingabe den Inhalt Änderst, so dass der benutzer immer aktuelle Infos da hat, was er eingeben soll.
man liest sich, Stanlay :coder: |
Hallo,
eine andere Methode wäre, man läßt das Eingabefeld weg und benutzt InputBox oder InputQuery. Dann hat man Hilfetext und Antwort zusammen. Bye |
|
Hallo,
danke Euch für die vielen hilfreichen Antworten. Habe mich für die Variate Label und Enter entschieden. Habe leider aber etwas Probleme sie umzusetzen. Hier mein Code:
Delphi-Quellcode:
Was mache ich falsch? Er kann nicht complieren und springt auf key.
procedure TForm1.Button1Click(Sender: TObject);
var mac: integer; per: integer; begin data_init; bedarf_init; prod_struc_init; //Eingabe der Maschinendaten Label1.caption:='Anzahl Maschinen eingeben'; TForm1.EingabefeldKeyDown(Sender,key,shift); mac:=strtoint(Eingabefeld.text); end; procedure TForm1.EingabefeldKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key =13 then end; Danke! Kaddy 8) [edit=Daniel B]Delphi-Tags ergänzt. MfG Daniel B.[/edit] |
Moin Kaddy,
der Fehler wird wohl in dieser Zeile geliefert:
Delphi-Quellcode:
Du kannst zwar die Methode KeyDown auch direkt aufrufen, aber musst dazu natürlich die Parameter mit übergeben.
TForm1.EingabefeldKeyDown(Sender,key,shift);
Das heisst statt Sender,key,Shift musst Du die entsprechenden Werte angeben. Bei Sender hast Du nur Glück gehabt, dass Du die Methode aus einer anderen Methode, die Sender als Parameter erhält, aufgerufen hast, ansonsten wäre die Meldung schon bei Sender gekommen. Was mir nicht so ganz klar ist: Was willst Du mit dem Aufruf überhaupt bewirken? |
Du muss #13 schreiben, sonst meint er dass du eine Integer Zahl willst und Word und Integer passt nicht zusammen.
:wall: schmarrn. vergiss, was ich grad geschrieben hab. is totaler müll man liest sich Stanlay :bounce1: |
Zitat:
|
Moin Stanlay,
Zitat:
@Kaddy: Wenn ich mir so Deinen Code ansehe stellt sich mir eine Frage: Kann es sein, dass Du bislang noch nicht mit ereignisgesteuerten Programmen gearbeitet hast? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:48 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 by Thomas Breitkreuz