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