Dialog mit zwei zwei datenbankgestützten Popupmenüs.
Dialog mit zwei zwei datenbankgestützten Popupmenüs.
Die Funktion ist eingeschränkt auch in comet_pdf verfügbar. In diesem Fall werden Einträge der ersten Werteliste popupEntries im Terminal als Aufzählungsliste gezeigt und mit der Eingabe der Listennummer kann ein Eintrag ausgewählt werden. Mit den Parametern title und label kann die Liste zusätzlich beschrieben werden. Weitere Angaben werden von comet_pdf nicht unterstützt.
Beachten Sie bitte, dass dabei die Bearbeitung des Programmes bis zur Eingabe unterbrochen wird.
Name | Typ | Default | Beschreibung |
Return | int | 0 : Abbruch sonst : Okay |
|
title | char* | "" | Fenstertitel |
okay | char* | "" | Beschriftung des OK-Buttons "" : "Okay" |
cancel | char* | "" | Beschriftung des Abbrechen-Buttons "" : "Abbrechen" |
dbc | DBC | - | Datenbankverbindung, über die die Popupmenüs geladen werden |
label | char* | - | Kurze Beschriftung des Popupmenüs. Enthält der Name an beliebiger Stelle die Kennung '@INDEX' wird der Inhalt von mValue als Menü-Index (0-basiert) und nicht als ID ausgewertet. mValue == 2 ist dann also der dritte Eintrag im Popup, nicht der (erste) Eintrag mit der ID 2. |
mValue | int* | - | Beim Aufbau wird versucht, den Eintrag mit dem übergebenen Wert im Popup auszuwählen (ID oder Index bei label3 mit '@INDEX'). Nach Dialog-Ende mit "Okay" enthält die Variable die ID (oder den Index) des ausgewählten Eintrages. |
selectStmt | char* | - | Select zum Laden der Popupeinträge, liefert ID und Name, z.B select id, name, value from domain where id > 0 |
nullEntry | char* | - | Name des Popupeintrag für ID 0. Leerstring verhindert den Eintrag |
popupEntries | IDTypeList | - | Liste von Einträgen für das Popup. Ist der Parameter ungleich 0, werden die Angaben in dbc, selectStmt und nullEntry ignoriert und das Popup wird mit den ID1/String-Werten dieser Liste gefüllt. 0 - beliebige viele Zeichen |
⇨ Zweites Popup-Menü. Die Einträge werden bei Auswahländerungen im ersten Popup neu geladen (ab CS4). Dabei werden alle <ID> der Anweisung durch die aktuelle ID im ersten Popup ersetzt. Wurde das zweite Popup mit Werten einer Liste gefüllt (entriesPopup2 != 0), wird das Popup bei Änderungen des ersten Popupmenüs nicht neu geladen. |
|||
labelPopup2 | char* | - | Kurze Beschriftung des Popupmenüs. Enthält der Name an beliebiger Stelle die Kennung '@INDEX' wird der Inhalt von valuePopup2 als Menü-Index (0-basiert) und nicht als ID ausgewertet. valuePopup2 == 2 ist dann also der dritte Eintrag im Popup, nicht der (erste) Eintrag mit der ID 2. |
valuePopup2 | int* | - | Beim Aufbau des Dialoges wird versucht, den Popupentrag mit dieser ID auszuwählen. Enthält labelPopup2 die Markierung @INDEX, wird der Wert als (0-basierter) Index im Menü verwendet. Am Ende des Dialoges enthält die Variable die ID des ausgewählten Eintrages des zweiten Popupmenüs. |
selectStmtPopup2 | char* | - | Anweisung zum Füllen des zweiten Popupmenüs. Die Anweisung muss jeweils eine Zahl und einen String liefern. Die Zahl ist die ID des Eintrages, der String der angezeigte Text. |
nullentryPopup2 | char* | - | Nulleintrag für das zweite Popup. Ist die Angabe nicht leer, wird der Eintrag als erster in das Popup eingetragen. |
entriesPopup2 | IDTypeList | - | Zweites Popup mit Hilfe dieser Liste füllen. Ist die Angabe ungleich 0, werden selectStmtPopup2 und nullentryPopup2 ignoriert und das zweite Popup wird mit den ID1/String-Werten dieser Liste gefüllt. |
Das erste Menü enthält alle Templates, die Untertemplates haben. Im zweiten Popup werden jeweils die Untertemplates gezeigt.
#include "internal/types.h"
int main () { int id = 50; int id2 = 0; int ok; char mainTemplates [1024]; char subTemplates [1024];
strcpy (mainTemplates, "select id, name from pageitems where id > 0 and spreadid < 2"); strcpy (subTemplates, "select id, concat (name, ', Links') from pageitems where id = <ID>"); strcat (subTemplates, " union"); strcat (subTemplates, " select id, concat (name, ', Rechts') from pageitems where spreadid = 3 and leftid = <ID>"); strcat (subTemplates, " union"); strcat (subTemplates, " select id, concat (name, ', Fortsetzung-Links') from pageitems where rightid > 0 and rightid = (select id from pageitems where leftid > 0 and leftid = (select continueid from pageitems where id = <ID>))"); strcat (subTemplates, " union"); strcat (subTemplates, " select id, concat (name, ', Fortsetzung-Rechts') from pageitems where leftid > 0 and leftid = (select continueid from pageitems where id = <ID>)");
ok = askpopup2 ( "Templates importieren", "", "",
0,
"Templates", &id, mainTemplates, "", 0,
"Subtemplates", &id2, subTemplates, "", 0); if (!ok) return 0;
showmessage ("Popup1 : %d\nPopup2 : %d", id, id2);
return 0; }
Die beiden Popupmenüs enthalten jeweils alle Produkte, die gerade angezeigt werden. Als Eintragskennung wird jeweis der Index im Popup verwendet.
#include "internal/types.h" #include "internal/panels.h" #include "internal/products.h"
int main () { int ix1 = 0; int ix2 = 0; int ok; IDTypeList fullIDs = idtypelist::alloc (); ProductList products = productlist::get ("list"); Product p;
for (p = productlist::first (products); p; p = productlist::next (products)) { ++ix1; idtypelist::append ( &npsb; fullIDs, &npsb; ix1, &npsb; 0, &npsb; 0, &npsb; product::gets (p, kRow1)); }
ix1 = 0; ix2 = 1; ok = askpopup2 ( "Auswahl zweier Produkte", "", "", 0, "Produkt 1@INDEX", &ix1, "", "", fullIDs, "Produkt 2@INDEX", &ix2, "", "", fullIDs); if (!ok) return 0;
idtypelist::get_from_panel (fullIDs, kPanelProducts, kAll);
showmessage ("Produkt 1 : [%d, %d, %d, '%s']", idtype::id (idtypelist::get (fullIDs, ix1)), idtype::id2 (idtypelist::get (fullIDs, ix1)), idtype::id3 (idtypelist::get (fullIDs, ix1)), idtype::stringid (idtypelist::get (fullIDs, ix1))); showmessage ("Produkt 2 : [%d, %d, %d, '%s']", idtype::id (idtypelist::get (fullIDs, ix2)), idtype::id2 (idtypelist::get (fullIDs, ix2)), idtype::id3 (idtypelist::get (fullIDs, ix2)), idtype::stringid (idtypelist::get (fullIDs, ix2)));
return 0; }
Und hier ein Beispiel für comet_pdf, das folgende Ausgabe erzeugt:
int main () { int res; IDTypeList li = idtypelist::alloc (); IDType id;
idtypelist::append (li, 1, 0, 0, "aaa"); idtypelist::append (li, 2, 0, 0, "bbb"); idtypelist::append (li, 3, 0, 0, "ccc"); idtypelist::append (li, 4, 0, 0, "ddd"); idtypelist::append (li, 5, 0, 0, "eee");
if (askpopup2 ( "This is a testt", "", "", 0, "Your choice", &res, 0, 0, li)) { id = idtypelist::get (li, res); printf ("Result : Index %d, Value '%s'\n", res, idtype::stringid (id)); }
return 0; }
Alphabetic index HTML hierarchy of classes or Java