Wie Eingabe von FORM2 in FORM1 verarbeiten?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Der Proband
Beiträge: 7
Registriert: Di 24. Mai 2016, 09:47

Wie Eingabe von FORM2 in FORM1 verarbeiten?

Beitrag von Der Proband »

Hallo,
folgende Situation:
Form1 verabeitet eine Tatstatureingabe und macht z.B. aus der Eingabe 'abd' den Wert '124', außerdem kann man über einen Button Form2 öffnen. Form2 hat einen 'Beenden' Button der dieses schließt und Form1 ist wieder aktiv, eine etwaige Tastatureingabe wird von Form2 bisher nicht berücksichtigt. So weit so gut. Schön wäre aber:

1. wenn auch Form2 eine etwaige Tastatureingabe annehmen würde
2. danach Form2 beendet und die Tastatureingabe an Form1 übergeben werden würde
3. die Tatstatureingabe aus Form2 von Form1 verarbeitet werden würde als wäre sie direkt über Form1 eingeben worden

Punkt 1 und 2 sind keine Probleme aber womit erreicht man Punkt3?

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Wie Eingabe von FORM2 in FORM1 verarbeiten?

Beitrag von Mathias »

3. die Tatstatureingabe aus Form2 von Form1 verarbeitet werden würde als wäre sie direkt über Form1 eingeben worden

Dies wäre eine Variante:

Code: Alles auswählen

procedure TForm2.FormKeyPress(Sender: TObject; var Key: char);
begin
  Form1.FormKeyPress(Sender, Key);
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

siro
Beiträge: 730
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Wie Eingabe von FORM2 in FORM1 verarbeiten?

Beitrag von siro »

Hallo,
ich hab das jetzt so verstanden, daß er von Form1 auf die Komponenten von Form2 zugreifen kann.
Dann müste in die USES Anweisung von Form1 zusätzliche die "unit2" mit aufgenommen werden.
Dann kann er von Form1 aus auf alle Komponenten und Eingaben von Form2 zugreifen.

// in Form1 also unit2 mit aufnehmen:

Code: Alles auswählen

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,StdCtrls,
  unit2;  // die Unit für Form2 mit angeben.
 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  // Der Label auf Form1 bekommt den Text vom Editfeld auf Form 2
  Label1.caption:=Form2.Edit1.caption;;
end;


Bin mir aber nicht sicher ob es so gemeint war...
Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Wie Eingabe von FORM2 in FORM1 verarbeiten?

Beitrag von Mathias »

Das ist natürlich die Frage, meint er mit Eingabe, ZB. ein TEdit, oder einfach Zeichen drücken in einem Form ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Der Proband
Beiträge: 7
Registriert: Di 24. Mai 2016, 09:47

Re: Wie Eingabe von FORM2 in FORM1 verarbeiten?

Beitrag von Der Proband »

Es ist ein TEdit und die Eingabe stammen von einem Strichcodescanner. Im Form2 ist das TEdit Feld versteckt. Wenn jetzt im Form2 trotzdem ein Strichcode gescannt wird landet der Wert im Tedit und das zugehörige Ereignis schreibt den Wert auch in die TEdit Variable von Form1 wo sie auch bei einem normalen Scanvorgang innerhalb von Form1 stünde und schließt Form2. Im Form1 steht dann der Scannstring aber es geht nicht weiter, weil ich nicht weiß mit welchen Ereignis ich dann die Weiterverabeitung, wie bei der direkten Eingabe in Form1, auslöse.
Aslo:
Normal: Form1 -> Scan -> Umwandlung EAN zu Name
Gesucht: Form1 -> Form2 -> Scan -> Scanwert Form2 and Form1 übergeben und Form2 schleißen (bis hier kein Problem)-> Scanwert in Form1 wie unter 'Normal' auswerten

Ziel ist die Vereinfachung des Handlings, damit nicht extra im Form2 der Beenden button gedrückt werden muß und erst dann wieder gescannt werden kann.
Ich hoffe das war verständlich.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Wie Eingabe von FORM2 in FORM1 verarbeiten?

Beitrag von Mathias »

Ein Strichcodescanner verhält sich wie eine Tastatur-
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Der Proband
Beiträge: 7
Registriert: Di 24. Mai 2016, 09:47

Re: Wie Eingabe von FORM2 in FORM1 verarbeiten?

Beitrag von Der Proband »

Genau, deswegen erwähnte ich es anfangs auch nicht extra weil es keinen Unterschied zu einer normalen Tastatureingabe, die mit <Return> abgeschlossen wird, macht. Ich werde deine Lösung mal einbauen.

siro
Beiträge: 730
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Wie Eingabe von FORM2 in FORM1 verarbeiten?

Beitrag von siro »

in dem Editfeld kannst Du die Bestätigung abfangen
also die Return Taste und das Formular dann schliessen, das sähe dann so aus:

Code: Alles auswählen

procedure TForm2.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if Key = $0D then close;  // Form2 schliessen
end;   


In deinem Formular must Du ShowModal nicht Show benutzen, sonst reagiert es falsch

Code: Alles auswählen

procedure TForm1.ButtonScanClick(Sender: TObject);
var s:string;
begin
  form2.showModal;   // ShowModal ist wichitg, nur Show geht nicht
  s:=Form2.Edit1.Text;
      //  hier jetzt deine Ausführung was passieren soll
  caption:=s;
end;   
 

vielleicht hilft Dir das weiter.
Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

Antworten