05.04.2 Register zum Selbermachen (AUF43A, EKA751, LCV249, ...)
Erkennungsmerkmale
Der hier beschriebene Typ von Registerdialogen ist an folgenden Merkmalen zu identifizieren:
-
Im CGW ist ein Dialog enthalten, der dort, wo die Register angezeigt werden, einen Platzhalter (Container) mit einer [GuiTabControl]-Sektion in den SibDef-Angaben enthält.
Verwendete Technik
Die Register werden bei dieser Technik allein durch CGW-Einträge erzeugt. Basis der angezeigten Register ist dabei immer ein (vom Programm gestarteter) Dialog, der einen leeren Container als Platzhalter für die anzuzeigenden Register enthält. Die Angaben in der Sektion [GuiTabControl] des leeren Containers bestimmen dabei, aus welchen Dialogen die Register gebildet werden sollen. Zur Laufzeit wird dann lediglich der komplette Inhalt des jeweiligen Dialogs auf das Register kopiert.
Die Reitertexte werden bei dieser Technik ebenfalls aus den Titeln der jeweils für das Register verwendeten Dialoge gebildet.
Hinweis:
Um den Einsatz von SDF-Dateien zur Anpassung von Dialogelementen auf allen Registern zu ermöglichen, müssen die GritIDs der Dialogelemente ALLER Dialoge aus denen zur Laufzeit Register erzeugt werden, eindeutig sein (ggf. Tool INFCGW.EXE für die Prüfung einsetzen)!
Beispiel für Umwandlung eines Dialogs mit Verteilung auf 2 Register
Mit obiger Technik lässt sich aus einem infra-Standarddialog ein Registerdialog erzeugen, z.B. könnte die "113 Teilestammliste" ohne Programmänderung auf zwei Register für die Eingabe der Selektionsfelder umgestellt werden. Vorgehensweise:
-
PDV113.CGW kopieren und in PDV113I.CGW umbenennen.
-
Im Grit-Editor den Dialog PDV113_1 zweimal kopieren, einmal als Dialog PDV113_R_1 und einmal als Dialog PDV113_R_2.Tipp:Das Kopieren von Dialogen funktioniert in diesem Fall am Einfachsten wie folgt.Den zu kopierenden Dialog öffnen und mit der rechten Maustaste auf den untersten – also größten – Container klicken und im Kontextmenü BEARBEITEN-KOPIEREN wählen.Dann den Dialog schließen und einen neuen Dialog anlegen. Den neuen Dialog öffnen und wieder mit der rechten Maustaste auf den leeren Container des neuen Dialogs klicken.Im Kontextmenü LÖSCHEN wählen. Anschließend noch einmal mit der rechten Maustaste in den jetzt leeren Dialogbereich klicken und BEARBEITEN-EINFÜGEN wählen.Nun befindet sich der komplette Inhalt des zu kopierenden Dialogs im neuen Dialog.Falls zusätzlich zum Inhalt noch weitere Dialogdaten zu kopieren sind (z.B. SibDef-Angaben des Dialogs), muss das noch manuell durchgeführt werden.Für dieses Beispiel ist das aber nicht notwendig.
-
Im Dialog PDV113_1 können nun alle Eingabefelder und Labels entfernt werden, die später auf den Registerseiten angezeigt werden sollen, aber NICHT die Schaltflächen oder Hinweiszeile entfernen!
-
Im Bereich des Dialogs PDV113_1, in dem die Register angezeigt werden sollen, muss nun ein Container als Platzhalter eingefügt werden.Beim Platzhalter-Container müssen folgende SibDef-Angaben eingetragen werden:[GuiTabControl]TabPages=PDV113_RTabHelpFile=PDV113
-
In den Dialogen PDV113_R_1 und PDV113_R_2 können nun alle die Elemente gelöscht werden, die nicht auf der jeweils ersten Registerseite (PDV113_R_1) bzw. zweiten Registerseite (PDV113_R_2) angezeigt werden sollen.Neben den Schaltflächen und Hinweiszeilen können also beispielsweise im Dialog PDV113_R_1 alle Elemente unterhalb des Bereichs "Sortierfolge" und im Dialog PDV113_R_2 alle Elemente oberhalb des Bereichs "Auswahl" gelöscht werden.
-
Jetzt fehlt noch der ReplaceCGW-Eintrag in der INDIVID.INI für das geänderte CGW:[ReplaceCGW]PDV113=PDV113IHinweisFalls beim ReplaceCGW nur der geänderte Ursprungsdialog PDV113_1 eingetragen werden soll, muss beachtet werden, dass auch die neuen Register-Dialoge eingetragen werden müssen. Also beispielsweise so:[ReplaceCGW]PDV113,PDV113_1=PDV113I,PDV113_1PDV113,PDV113_R_1=PDV113I,PDV113_R_1PDV113,PDV113_R_2=PDV113I,PDV113_R_2
Register anpassen (ReplaceCGW)
Um ein komplettes Register zu ersetzen (z.B. für individuelle Felder, neue Anordnung, etc.) muss auch hier der Dialog, aus dem das betroffene Register erzeugt wird, ersetzt werden. Die Replace-Angabe dazu lautet beispielsweise:
[REPLACECGW]
AUF43A,AUF43A_1_3=IND43A,AUF43A_1_3
Durch eine Änderung des Dialogtitels kann auch der Reitertext des Registers geändert werden.
Einträge in SDF-Dateien
Genauso wie bei Stammdatenprogrammen ist hier beim Einsatz von SDF-Dateien zur Anpassung vorhandener Dialogelemente zu beachten, dass als DialogID immer die ID des am Bildschirm sichtbaren (Haupt-)Dialogs zu verwenden ist. Über die infra-Systemübersicht (F5-Taste) lässt sich die DialogID dieses Dialogs einfach herausfinden.
Um beispielsweise die Felder «Kunde von/bis» im Dialog AUF43A_1_1 auf Großbuchstaben-Eingabe zu ändern, muss in der Datei AUF43A.SDF folgendes hinterlegt werden (als Dialog muss AUF43A_1 und nicht AUF43A_1_1 angegeben werden !):
[AUF43A_1# AUF43A_1_F638013#GuiEdit]
Uppercase=Yes
[AUF43A_1# AUF43A_1_F838013#GuiEdit]
Uppercase=Yes
Tipps zur IMA-Programmierung
Auch bei diesem Register-Typ wird die GritID eines Registers zur Laufzeit aus Name des Ursprungs-CGWs+#+DialogID des Dialogs, aus dem das Register erzeugt wurde
gebildet, z.B. AUF43A#AUF43A_1_3.
Mit Hilfe dieser GritID kann dann in einer IMA auf das entsprechende Register zugegriffen werden.
Folgende IMA-Datei wählt in "43A Belege drucken" den zu druckenden Papiertyp (Auftragsbestätigung) und trägt im Register "Bestätigung" (AUF43A_1_3) im Selektionsfeld «Zustand bis» den Wert 20 ein:
|
GwCore dialog = NULL;
|
// Variable für Zeiger auf Dialog
|
|
GwCore reg = NULL;
|
// Variable für Zeiger auf Register. Variablenname Register darf nicht verwendet werden!
|
|
GwCore feld = NULL;
|
// Variable für Zeiger auf Feld
|
|
dialog = infra_wait_frame("AUF43A","AUF43A_1",5,1);
|
// AUF43A-Dialog finden
|
|
if ( !dialog )
|
// wenn nicht gefunden,…
|
|
return 0;
|
// IMA beenden
|
|
|
|
|
feld = infra_wait_child(dialog,"AUF43A","AUF43A_1_1",5,1);
|
// Markierung AB finden
|
|
if ( !feld )
|
// wenn nicht gefunden,…
|
|
return 0;
|
// IMA beenden
|
|
|
|
|
control_set_value(feld);
|
// Markierung setzen
|
|
|
|
|
reg = infra_find_child(dialog,"AUF43A","AUF43A#AUF43A_1_3");
|
// Register "Bestätigung" finden
|
|
if ( !reg )
|
// wenn nicht gefunden,…
|
|
return 0;
|
// IMA beenden
|
|
|
|
|
activate_control(reg);
|
// auf Register wechseln
|
|
|
|
|
feld = infra_wait_child(reg,"AUF43A","AUF43A_1_F46",5,1);
|
// Feld «Zustand bis» finden
|
|
if ( !feld )
|
// wenn nicht gefunden,…
|
|
return 0;
|
// IMA beenden
|
|
|
|
|
infra_set_text(feld,"20");
|
// Wert 20 eintragen
|