Dialog mit zwei Eingabefeldern und zwei datenbankgestützten Popupmenüs.
Dialog mit zwei Eingabefeldern und zwei datenbankgestützten Popupmenüs. Die Felder können einzeln unsichtbar gemacht werden. Der Dialog wird dann automatisch neu gestaltet.
| Name | Typ | Default | Beschreibung |
| Return | int | 0 : Abbruch sonst : Okay |
|
| str1 | String oder char* | - | Starttext des ersten Eingabefeldes, bei Okay aktueller Inhalt des ersten Eingabefeldes |
| label1 | String oder char* | - | Kurze Beschriftung des ersten Eingabefeldes |
| enabled1 | int | - | Ist das erste Feld sichtbar (>0) oder soll es unsichtbar (0) sein? |
| str2 | String oder char* | - | Starttext des zweiten Eingabefeldes, bei Okay aktueller Inhalt des zweiten Eingabefeldes |
| label2, | String oder char* | - | Kurze Beschriftung des zweiten Eingabefeldes |
| enabled2, | int | - | Ist das zweite Feld sichtbar (>0) oder soll es unsichtbar (0) sein? |
| dbc | DBC | - | Datenbankverbindung, über die das Popup geladen wird |
| selectStmt | String oder char* | - | Select zum Laden der Popupeinträge, liefert ID und Name, z.B select id, name, value from domain where id > 0 |
| nullEntry | String oder char* | - | Name des Popupeintrag für ID 0. Leerstring verhindert den Eintrag |
| 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. |
| label3 | 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. |
| enabled3 | int | - | Ist das Popup sichtbar (>0) oder soll es unsichtbar (0) sein? |
| title | String oder char* | "" | Fenstertitel |
| okay | String oder char* | "OK" | Beschriftung des OK-Buttons |
| cancel | String oder char* | "Abbrechen" | Beschriftung des Abbrechen-Buttons |
| maxchars1 | int | 0 | Maximale Länge der Eingabe im ersten Feldes. Die Variable str muss für die abschließende 0 mind. ein Byte größer sein als dieser Wert. 0 - beliebige viele Zeichen |
| maxchars2 | int | 0 | Maximale Länge der Eingabe im zweiten Feld. Die Variable str muss für die abschließende 0 mind. ein Byte größer sein als dieser Wert. 0 - beliebige viele Zeichen |
| popupEntries | IDTypeList | 0 | 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. |
| 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. |
|||
| selectStmtPopup2 | String oder char* | 0 | 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 | String oder char* | 0 | Nulleintrag für das zweite Popup. Ist die Angabe nicht leer, wird der Eintrag als erster in das Popup eingetragen. |
| valuePopup2 | int* | 0 | 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. |
| labelPopup2 | String oder 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. |
| showPopup2 | int | 0 | Soll das zweite Popup gezeigt werden? 0 : Nein 1 : Ja, Popup zeigen |
| entriesPopup2 | IDTypeList | 0 | 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. |
#include "internal/types.h"
int main () { String s1 = string::alloc("Text 1"); String s2 = string::alloc("Text 2"); int id = 3; // will be 'δ' from lli int ok; int enable1 = 1; int enable2 = 1; int enable3 = 1; IDTypeList lli = idtypelist::alloc ();
idtypelist::append (lli, 1, 0, 0, "α"); idtypelist::append (lli, 2, 0, 0, "β"); idtypelist::append (lli, 3, 0, 0, "γ"); idtypelist::append (lli, 4, 0, 0, "δ"); idtypelist::append (lli, 5, 0, 0, "ε");
ok = askstring2 ( s1, "This is label 1", enable1, s2, "This is label 2", enable2, 0, 0, "", &id, "Popupmenu-Label", enable3, "My title", "-Okay-", "-Cancel-", 0, 0, lli); if (!ok) return 1;
showmessage ("1: <%s>\r2: <%s>\r3: %d", s1, s2, id);
string::release(s1); string::release(s2); idtypelist::release (lli);
return 0; }
Das Skript ist ein gültiges Bibliotheken-Import-Skript (Panelstatement 124, ). Für den Importdialog werden zuerst alle Bibliotheken eines Ordners gesammelt und dann im Popup des Dialog angezeigt.
#include "internal/types.h"
int main () { char t1 [412]; char t2 [412]; int id = 0; int ok; char destPath[4000]; char path [4000]; char ext [256]; IDTypeList ids = idtypelist::alloc (); int i, ix = 0;
strcpy (t1, ""); strcpy (t2, ""); strcpy (destPath, "$DESKTOP/MyLibraries"); for (i = 0; i < file::count (destPath); i++) { strcpy (path, file::get_nth (destPath, i)); file::extender (ext, path); if (strcmp (ext, "indl") == 0) { idtypelist::append (ids, ix, 0, 0, path); ix = ix +1; } }
ok = askstring2 ( t1, "", 0, // Text1 t2, "", 0, // Text2 0, "", "", // Popup über DB &id, "Bibliothken", 1, "Bibliothek importieren", "", "", -1, -1, // Beschränkung Text1 und Text2 ids); if (!ok) return 0;
strcpy (path, idtype::stringid (idtypelist::get (ids, id)));
library::open (path);
return 0; }
Zeige zwei Popupmenüs im Dialog. Das erste Menü enthält alle Templates, die Untertemplates haben. Im zweiten Popup werden jeweils die Untertemplates gezeigt.
#include "internal/types.h"
int main () { char t1 [412]; char t2 [412]; int id = 59; int id2 = 0; int ok; char mainTemplates [1024]; char subTemplates [1024];
strcpy (t1, "Text1"); strcpy (t2, "Text2"); 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"); strcat (subTemplates, " and rightid = (select id from pageitems where leftid > 0"); strcat (subTemplates, " and leftid = (select continueid from pageitems where id = <ID>))"); strcat (subTemplates, " select id, concat (name, ', Fortsetzung-Links') from pageitems where rightid > 0"); strcat (subTemplates, " and rightid = (select id from pageitems where leftid > 0"); strcat (subTemplates, " 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"); strcat (subTemplates, " and leftid = (select continueid from pageitems where id = <ID>)");
ok = askstring2 ( t1, "Beschriftung Text1", 0, // Text1 t2, "Beschriftung Text2", 0, // Text2 0, mainTemplates, "", // Popup über DB laden &id, "Templates", 1, // Popup1 "Templates importieren", // Dialog-Titel "", "", // Buttons -1, -1, // Längenbeschränkung Text1 und Text2 0, // Popup1 mit dieser Liste füllen subTemplates, "", &id2, "Subtemplates", 1, 0); // Popup2 if (!ok) return 0;
showmessage ("Popup1 : %d\nPopup2 : %d", id, id2);
return 0; }
Ein Beispiel mit zwei zwei IDType-Listen zum Füllen der Popupmenüs finden Sie unter askpopup2.
Alphabetic index HTML hierarchy of classes or Java