Dies ist die alte 4D Dokumentations-Website. Die neue und aktualisierte Dokumentation finden Sie unter developer.4d.com

Home

 
4D v20 R7
CALL FORM

CALL FORM 


 

CALL FORM ( Fenster ; Methode {; Param}{; Param2 ; ... ; ParamN} ) 
Parameter Typ   Beschreibung
Fenster  WinRef in Referenznummer des Fensters
Methode  Objekt, Text in Name der aufzurufenden Projektmethode
Param  Ausdruck in Parameter zur Methode

Der Befehl CALL FORM führt die Projektmethode mit dem in Methode übergebenen Namen aus, mit dem optionalen Param im Kontext eines Formulars, das in Fenster angezeigt wird, unabhängig vom Prozess, zu dem das Fenster gehört.

Wie bei der auf Workern basierenden Interprozesskommunikation (siehe Über Worker), ist dem Fenster eine Nachrichtenbox zugeordnet, die verwendet werden kann, wenn das Fenster ein Formular anzeigt (nach dem Formularereignis On Load). CALL FORM bindet Methodenname und Befehlsargumente in eine Nachricht ein, die in die Nachrichtenbox gelegt werden. Das Formular führt die Nachricht dann in einem eigenen Prozess aus.

In der Formel legen Sie fest, dass der 4D Code im Kontext des übergeordneten Prozesses des Fensters ausgeführt werden soll. Sie können entweder übergeben:

  • ein Formel-Objekt (siehe Formel-Objekte). Formelobjekte können beliebige ausführbare Ausdrücke kapseln, einschließlich Funktionen und Projektmethoden;
  • eine String, der den Namen einer Projektmethode enthält. 

Sie können auch Parameter an die Formel übergeben, indem Sie einen oder mehrere optionale param-Parameter verwenden. Sie können sequenzielle Parameter oder, wenn der Ausdruck der Formel eine Funktion oder eine Projektmethode ist, benannte Parameter verwenden. Beim Start der Ausführung im Kontext des Prozesses empfängt die Prozessformel die Parameterwerte entweder in den benannten Parametern oder in $1$2, usw. Denken Sie daran, dass Arrays nicht als Parameter übergeben werden können. Darüber hinaus müssen im Zusammenhang mit dem Befehl CALL FORM die folgenden zusätzlichen Überlegungen berücksichtigt werden:

  • Zeiger auf Tabellen oder Felder sind erlaubt.
  • Zeiger auf Variablen, insbesondere lokale und Prozessvariablen werden nicht empfohlen, da sie zum Zeitpunkt, wo die Prozessmethode auf sie zugreift, undefiniert sein können.
  • Übergeben Sie einen Parameter vom Typ Objekt oder Collection, erstellt 4D im Zielprozess eine Kopie des Objekts oder der Collection (anstelle einer Referenz), wenn das Formular nicht in dem Prozess liegt, den der Befehl CALL FORM aufruft.

Über den Befehl CALL FORM eigene Einstellungen für ein Formular setzen, z.B. Werte zur Konfiguration - ohne Verwenden von Prozessvariablen:

 $win:=Open form window("form")
 CALL FORM($win;Formula(configure);param1;param2)
 DIALOG("form")

Im gleichen Formular zwei unterschiedliche Fenster öffnen (mit anderen Hintergrundfarben und anderen Meldungen), die Nachrichten dann senden und im jeweiligen Dialogfenster anzeigen.

Eine Schaltfläche im Hauptformular öffnet die beiden Dialoge:

  //Objektmethode des Formulars erstellen
  // erstes Fenster
 formRef1:=Open form window("FormularNachricht";Palette form window;On the left)
 SET WINDOW TITLE("MeinFormular1";formRef1)
 DIALOG("FormularNachricht";*)
 SHOW WINDOW(formRef1)
 
  //zweites Fenster
 formRef2:=Open form window("FormularNachricht";Palette form window;On the left+500)
 SET WINDOW TITLE("MeinFormular2";formRef2)
 DIALOG("FormularNachricht";*)
 SHOW WINDOW(formRef2)
 
  //Farben senden
 CALL FORM(formRef1;"doSetColor";0x00E6F2FF)
 CALL FORM(formRef2;"doSetColor";0x00F2E6FF)
  //Meldung aufbauen
 CALL FORM(formRef1;"doAddMessage";Current process name;"Hello Form 1")
 CALL FORM(formRef2;"doAddMessage";Current process name;"Hello Form 2")

Die Methode doAddMessage fügt nur eine Zeile in einer Listbox im Formular "FormularNachricht" hinzu:

 C_TEXT($1// Name des Aufrufers (caller)
 C_TEXT($2// Nachricht zum Anzeigen
  // Nachricht von $2 empfangen und die Nachricht in die Listbox setzen
 $p:=OBJECT Get pointer(Object named;"Spalte1")
 INSERT IN ARRAY($p->;1)
 $p->{1}:=$1+" sendet "+$2

Beim Ausführen erhalten Sie folgendes Ergebnis:

Sie können dann andere Nachrichten hinzufügen. Dazu müssen Sie lediglich den Befehl CALL FORM erneut ausführen:

 CALL FORM(formRef1;"doAddMessage";Current process name;"Hello 2 Form 1")
 CALL FORM(formRef2;"doAddMessage";Current process name;"Hello 2 Form 2")



Siehe auch 

CALL WORKER
DIALOG
Download HDI database

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Formularereignisse
Nummer: 1391

Dieser Befehl kann in preemptive Prozessen laufen

 
SEITENINHALT 
 
GESCHICHTE 

Erstellt: 4D v15 R5
Geändert: 4D v16 R4
Geändert: 4D v19 R6

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v20 R7)