Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Nach Showmessage Daten aus einem Editfeld einlesen (https://www.delphipraxis.net/4388-nach-showmessage-daten-aus-einem-editfeld-einlesen.html)

kaddy 27. Apr 2003 12:37


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:
procedure TForm1.Button1Click(Sender: TObject);
var
per: integer;

begin
 
 //Eingabe der Maschinendaten
 showmessage('Anzahl Maschinen eingeben');
 mac:=strtoint(Eingabefeld.text);

end;
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.
Danke!
Gruß
Kaddy :bounce2:

[edit=DAniel B]Delphi-Tags ergänzt. MfG Daniel B.[/edit]

Christian Seehase 27. Apr 2003 12:47

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.

Stanlay Hanks 27. Apr 2003 12:49

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:

Duffy 27. Apr 2003 13:19

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

Daniel B 27. Apr 2003 13:34

Hallo,

siehe hier.

Grüsse, Daniel :hi:

kaddy 27. Apr 2003 14:37

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:
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;
Was mache ich falsch? Er kann nicht complieren und springt auf key.
Danke!
Kaddy 8)
[edit=Daniel B]Delphi-Tags ergänzt. MfG Daniel B.[/edit]

Christian Seehase 27. Apr 2003 14:43

Moin Kaddy,

der Fehler wird wohl in dieser Zeile geliefert:

Delphi-Quellcode:
TForm1.EingabefeldKeyDown(Sender,key,shift);
Du kannst zwar die Methode KeyDown auch direkt aufrufen, aber musst dazu natürlich die Parameter mit übergeben.
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?

Stanlay Hanks 27. Apr 2003 14:44

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:

Luckie 27. Apr 2003 14:48

Zitat:

Zitat von Stanlay Hanks
Word und Integer passt nicht zusammen.

Informier dich bitte mal über ganzzahl Datentypen.

Christian Seehase 27. Apr 2003 14:50

Moin Stanlay,

Zitat:

Zitat von Stanlay Hanks
...und Word und Integer passt nicht zusammen

Doch, warum nicht? Es handelt sich bei beiden Datentypen um ganzzahlige Typen, nur dass eben Word einen kleineren Wertebereich hat. Word 16 Bit ohne Vorzeichen, integer (bei 32 Bit Compilern) 32 Bit mit Vorzeichen.

@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?

Stanlay Hanks 27. Apr 2003 14:54

@ all. ich weiß schon dass ich grade nen riesen scheiß geschrieben hab. hab das irgendwie durcheinander gebracht. Hab an #13#10 als zeilenumbruch gedacht und das dann mit enter in Verbindung gebracht. Tut mir leid :oops: :oops: :oops:

kaddy 27. Apr 2003 15:01

okay, habe verstanden, dass ich bei der procedure Eingabefeldkeydown Werte mit übergeben muß. Wie muß ich die jetzt deklarieren?
Im Grunde will ich mit der Zile darauf hinaus, dass der Benutzer erst enter drücken muß bevor es weitergeht.
Viele Grüße
kaddy :?

Christian Seehase 27. Apr 2003 15:35

Moin Kaddy,

da muss ich nochmal auf das Thema ereignisgesteuerter Abläufe abschweifen:

Für mein Verständnis müsste das so ablaufen:
  1. Button1 wird geklickt
  2. Das Eingabefeld erscheint/wird freigeschaltet
  3. Es erfolgt eine Eingabe
  4. Es wird Enter gedrückt
  5. Die Eingabe wird übernommen

Bei Dir soll dies alles in einer Prozedur ablaufen.
Würde es sich um ein Konsolenprogramm handeln wäre das wohl machbar, bei einem fensterorientierten Programm müsste das aber so aussehen:

Delphi-Quellcode:
// Eingabefeld eingabebereit machen
procedure TForm1.Button1Click(Sender: TObject);

begin
data_init;
bedarf_init;
prod_struc_init;

//Eingabe der Maschinendaten
  Label1.caption:='Anzahl Maschinen eingeben';
end;

// Eingegebene Daten übernehmen
procedure TForm1.EingabefeldKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if key = VK_RETURN then
  begin
    mac := strtoint(Eingabefeld.text);
  end;
end;
Dazu muss dann die Variable mac die den Wert erhält natürlich global, oder als Feld, z.B. von TForm1 angelegt werden.

kaddy 27. Apr 2003 16:41

Danke Dir! Hat geklappt!
Gruß
Kaddy

BrainCode 28. Apr 2003 12:53

Auch wenn's zu spät ist: Hier meine Varianten: http://www.delphipraxis.net/viewtopic.php?t=4877


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 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