MultiDlg #
Der MultiDlg ist ein universeller Eingabedialog mit vertikalem Property-Grid. Er ermöglicht die Abfrage beliebig vieler Felder unterschiedlicher Typen (Text, Zahlen, Datum, Combos, Farben, Bilder u.v.m.) in einem einzigen Dialog. Felder können in Kategorien gruppiert werden. Der Dialog unterstützt Drucken, Excel-Export und eine integrierte HTML-Hilfe.
Set Dialog = Client.CreateDialog("Eulanda.MultiDlg", "MeineInstanz")
var Dialog = Client.CreateDialog("Eulanda.MultiDlg", "MeineInstanz");
Der zweite Parameter (Instance) steuert die Speicherung des Fensterzustands. Dialoge mit unterschiedlichen Instanznamen merken sich Position und Spaltenbreiten getrennt.
Schnelleinstieg #
Option Explicit
Dim Dialog
Set Dialog = Client.CreateDialog("Eulanda.MultiDlg", "")
With Dialog
.Title = "Kundendaten"
.SubTitle = "Bitte die Daten eingeben"
.IconUrl = "folder"
.GridLines = 3 ' eulGridLinesBoth
.AddField "Vorname", "String", "Max", ""
.AddField "Nachname", "String", "Mustermann", ""
.AddField "Alter", "Integer", 42, ""
.AddField "Aktiv", "Boolean", True, ""
If .Execute Then
MsgBox "Vorname: " & .Values("Vorname") & vbCrLf & _
"Nachname: " & .Values("Nachname") & vbCrLf & _
"Alter: " & CStr(.Values("Alter"))
End If
End With
Set Dialog = Nothing
Übersicht #
Eigenschaften #
| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
Title | String | Titel im Kopfbereich (groß, fett) | |
SubTitle | String | Untertitel im Kopfbereich | |
Caption | String | "Eingabedialog" | Fenstertitel in der Titelleiste |
IconUrl | String | Symbol im Kopfbereich (z.B. "folder", "gearwheel") | |
GridLines | Integer | 0 | Gitterlinien (siehe Konstanten) |
Height | Integer | auto | Dialoghöhe in Zeilen (je 18 Pixel) |
Help | String | HTML-Hilfe oder URL im unteren Bereich | |
HtmlHelp | String | Alias für Help | |
HtmlHelpHeight | Integer | 0 | Höhe des Hilfebereichs in Pixeln |
ExplorerStyle | Boolean | False | Explorer-Stil für Kategorien |
DotNetStyle | Boolean | False | DotNet-Darstellung |
FlowStyle | Boolean | False | Band-Layout (mehrere Spalten) |
MajorVersion | Integer | 2 | Hauptversion (nur lesen) |
MinorVersion | Integer | 3 | Nebenversion (nur lesen) |
DeletePressed | Boolean | False | True wenn Löschen gedrückt wurde (nur lesen) |
Button-Eigenschaften #
| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
OkVisible | Boolean | True | OK-Button anzeigen |
OkCaption | String | "Übernehmen" | Beschriftung OK-Button |
CancelVisible | Boolean | True | Abbrechen-Button anzeigen |
CancelCaption | String | "Verwerfen" | Beschriftung Abbrechen-Button |
DeleteVisible | Boolean | False | Löschen-Button anzeigen |
DeleteCaption | String | "Löschen" | Beschriftung Löschen-Button |
PrintVisible | Boolean | False | Drucken-Button anzeigen |
PrintCaption | String | "Drucken" | Beschriftung Drucken-Button |
PrintPreviewVisible | Boolean | False | Vorschau im Kontextmenü |
PrintPreviewCaption | String | "Vorschau" | Beschriftung Vorschau |
ExportVisible | Boolean | False | Export-Button anzeigen |
ExportCaption | String | "Exportieren" | Beschriftung Export-Button |
Druck- und Export-Eigenschaften #
| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
ReportTitle | String | (= Caption) | Titel im Druckbericht |
PrintJobTitle | String | (= Caption) | Name des Druckauftrags |
ExportFileName | String | Desktop + Caption + .xls | Standard-Dateiname für Excel-Export |
UserNameVisible | Boolean | False | Benutzername im Druckkopf anzeigen |
DateVisible | Boolean | True | Datum im Druckkopf anzeigen |
PageNoVisible | Boolean | True | Seitenzahlen im Druckfuß anzeigen |
Methoden #
| Methode | Rückgabe | Beschreibung |
|---|---|---|
AddCategory(Caption) | – | Kategorie (Abschnitt) hinzufügen |
AddField(Name, Typ, Default, Hint) | – | Eingabefeld hinzufügen |
AddFieldItem(Name, Item) | – | Eintrag zu Combo/Radio hinzufügen |
SetOption(Name, Option, Wert) | – | Feldoption setzen |
SetValue(Name, Wert) | – | Feldwert setzen |
Values(Name) | Variant | Feldwert lesen |
SetHints(Name, Text) | – | Tooltip setzen |
Hints(Name) | String | Tooltip lesen |
Execute | Boolean | Dialog anzeigen (True = OK) |
LoadState(Version) | – | Gespeicherten Zustand laden |
SaveState | – | Aktuellen Zustand speichern |
ExpandAll | – | Alle Kategorien aufklappen |
CollapseAll | – | Alle Kategorien zuklappen |
Clear | – | Alle Felder entfernen |
Sample | – | Demo-Daten einfügen |
AddHandler(Handler) | – | Event-Handler registrieren |
AddButton(Name, Title) | Object | Benutzerdefinierten Button hinzufügen |
Buttons(Index) | Object | Button nach Index abrufen |
ButtonCount | Integer | Anzahl benutzerdefinierter Buttons |
Feldtypen #
Der zweite Parameter von AddField bestimmt den Typ des Eingabefeldes.
Standard-Typen #
| Typ | Wert in VBS | Editor | Beschreibung |
|---|---|---|---|
"String" | String | Texteingabe | Einzeiliger Text |
"Memo" | String | Mehrzeilig | Mehrzeiliger Text (Blob-Editor) |
"Integer" | Integer | Zahleneingabe | Ganzzahl |
"Float" | Double | Dezimaleingabe | Dezimalzahl (2 Nachkommastellen) |
"Currency" | Currency | Währung | Währungsbetrag |
"Calc" | Double | Taschenrechner | Zahl mit Rechner-Popup |
"Boolean" | Boolean | Checkbox | Wahr/Falsch |
"DateTime" | Date | Kalender + Uhr | Datum und Uhrzeit |
"Date" | Date | Kalender | Nur Datum (mit Kalenderwochen) |
"Time" | Date | Zeiteingabe | Nur Uhrzeit |
"Combo" | String | Dropdown | Auswahlliste (siehe AddFieldItem) |
"Radio" | Integer | Radiogruppe | Optionsschalter (0-basiert) |
"Spin" | Integer | Drehfeld | Zahl mit Hoch/Runter-Buttons |
"Track" | Integer | Schieberegler | Slider (Standard: 0-100) |
"Color" | Integer | Farbauswahl | Farbwähler mit Palette |
"Font" | String | Schriftauswahl | Dropdown mit Schriftarten |
"Shell" | String | Ordnerauswahl | Datei-/Ordner-Browser |
"Image" | Variant | Bildfeld | Bild-Anzeige und -Auswahl |
Typ-Modifikatoren (Prefix) #
Feldtypen können mit Präfixen kombiniert werden:
| Präfix | Syntax | Beschreibung |
|---|---|---|
+ | "+String" | Feld wird Unterelement der letzten Kategorie |
Gruppe. | "Addr.String" | Felder mit gleicher Gruppe erscheinen in einer Zeile |
| Kombination | "+Addr.String" | Beides kombiniert |
Feldname mit Anzeigename #
Der Feldname kann über @ in Anzeigename und internen Schlüssel getrennt werden:
.AddField "Anzeigename@InternerKey", "String", "", ""
Ohne @ wird der Feldname sowohl als Anzeige als auch als Schlüssel verwendet.
Methoden im Detail #
AddCategory #
AddCategory(Caption: String)
Fügt eine Kategorie-Überschrift ein. Alle folgenden Felder mit +-Präfix im Typ werden dieser Kategorie untergeordnet.
.AddCategory "Adresse"
.AddField "Strasse", "+String", "", ""
.AddField "PLZ", "+String", "", ""
.AddField "Ort", "+String", "", ""
AddField #
AddField(Name: String, Typ: String, Default: Variant, Hint: String)
| Parameter | Beschreibung |
|---|---|
Name | Feldname (oder "Anzeige@Schlüssel") |
Typ | Feldtyp (siehe Tabelle oben), optional mit Präfix |
Default | Vorgabewert (Null für leer) |
Hint | Tooltip-Text (leerer String für keinen Tooltip) |
AddFieldItem #
AddFieldItem(Name: String, Item: String)
Fügt einen Eintrag zu einem Combo-, Radio- oder Color-Feld hinzu. Muss nach AddField aufgerufen werden.
.AddField "Land@Country", "Combo", "DE", ""
.AddFieldItem "Country", "DE"
.AddFieldItem "Country", "AT"
.AddFieldItem "Country", "CH"
SetOption #
SetOption(Name: String, Option: String, Wert: Variant)
Setzt eine Feldoption. Verfügbare Optionen:
| Option | Gilt für | Wert | Beschreibung |
|---|---|---|---|
"FIXED" | Combo | – | Dropdown nicht editierbar |
"EDIT" | Combo | – | Dropdown editierbar (Freitext möglich) |
"READONLY" | Alle | 1/0 | Schreibschutz |
"HEIGHT" | Alle | Integer | Zeilenhöhe (Vielfaches von 17px) |
"HIDEFIELDNAME" | Alle | 1/0 | Feldbezeichnung ausblenden |
"DECIMALS" | Float, Calc | Integer | Anzahl Nachkommastellen |
"SEPARATOR" | Float, Calc | 1/0 | Tausendertrennzeichen |
"COLORSET" | Color | String | Farbpalette ("DELPHI", "HTML", "X11") |
"INLINE" | Image | – | Bild in Originalgröße anzeigen |
"ICON" | Image | – | Bild als Symbol anzeigen |
"EXPAND" | Kategorie | – | Kategorie aufklappen |
"COLLAPSE" | Kategorie | – | Kategorie zuklappen |
Values #
Values(Name: String): Variant
Liest den Wert eines Feldes nach Ausführung des Dialogs. Der Name muss dem internen Schlüssel entsprechen (bei @-Syntax der Teil nach dem @).
Execute #
Execute: Boolean
Zeigt den Dialog modal an. Gibt True zurück, wenn der Benutzer “Übernehmen” klickt, False bei “Verwerfen” oder Schließen.
Tastenkürzel: Strg+Enter = Übernehmen, Esc = Verwerfen.
LoadState / SaveState #
LoadState(StateVersion: Integer)
SaveState
LoadState lädt einen gespeicherten Dialogzustand (Spaltenbreiten, auf-/zugeklappte Kategorien). Der Parameter StateVersion stellt sicher, dass bei Änderungen am Feldlayout ein veralteter Zustand nicht geladen wird. Wenn LoadState aufgerufen wurde, wird der Zustand beim Schließen automatisch gespeichert.
Konstanten #
GridLines #
| Wert | RAP-Konstante | Beschreibung |
|---|---|---|
| 0 | vglNone | Keine Gitterlinien |
| 1 | vglHorizontal | Nur horizontal |
| 2 | vglVertical | Nur vertikal |
| 3 | vglBoth | Horizontal und vertikal |
In VBScript/JavaScript als Integer verwenden. In RAP-Scripten stehen die Konstanten auch über consts.eulGridLinesBoth etc. zur Verfügung.
Event-Handler #
Der Dialog unterstützt Event-Handler über AddHandler. Das Handler-Objekt kann folgende Ereignisse implementieren:
| Ereignis | Auslöser | Beschreibung |
|---|---|---|
Dialog_OnConnect | Nach Erstellung, vor Anzeige | Initialisierung |
Dialog_OnDisconnect | Nach Schließen | Aufräumen |
<ButtonName>_OnClick | Klick auf benutzerdefinierten Button | Button-Aktion |
Beispiele #
A. Einfacher Eingabedialog (VBScript) #
Option Explicit
Dim Dialog
Set Dialog = Client.CreateDialog("Eulanda.MultiDlg", "")
With Dialog
.Title = "Neuer Artikel"
.SubTitle = "Artikeldaten eingeben"
.IconUrl = "gearwheel"
.GridLines = 3
.AddField "Artikelnummer@ArtNr", "String", "", "Die eindeutige Artikelnummer"
.AddField "Bezeichnung@Bez", "String", "", ""
.AddField "Preis", "Float", 0, "Verkaufspreis in EUR"
.AddField "Aktiv", "Boolean", True, ""
If .Execute Then
MsgBox .Values("ArtNr") & " - " & .Values("Bez") & _
" - " & CStr(.Values("Preis")) & " EUR"
End If
End With
Set Dialog = Nothing
B. Kategorien und Combos (VBScript) #
Option Explicit
Dim Dialog, StateVersion
Randomize
StateVersion = CInt(Rnd * 1000)
Set Dialog = Client.CreateDialog("Eulanda.MultiDlg", "Bestellung")
With Dialog
.Title = "Bestellung"
.SubTitle = "Versandoptionen konfigurieren"
.IconUrl = "folder"
.GridLines = 3
.LoadState StateVersion
.AddCategory "Versand"
.AddField "Versandart@Versand", "+Combo", "Standard", ""
.AddFieldItem "Versand", "Standard"
.AddFieldItem "Versand", "Express"
.AddFieldItem "Versand", "Abholung"
.SetOption "Versand", "FIXED", 0
.AddField "Lieferdatum@Datum", "+Date", Now, ""
.AddField "Anmerkung@Notiz", "+Memo", "", "Optionaler Hinweis"
.SetOption "Notiz", "HEIGHT", 3
.AddCategory "Zahlung"
.AddField "Zahlart@Zahl", "+Radio", 0, ""
.AddFieldItem "Zahl", "Rechnung"
.AddFieldItem "Zahl", "Vorkasse"
.AddFieldItem "Zahl", "Nachnahme"
.AddField "Rabatt@Rabatt", "+Track", 0, "Rabatt in Prozent"
If .Execute Then
MsgBox "Versand: " & .Values("Versand") & vbCrLf & _
"Datum: " & CStr(.Values("Datum")) & vbCrLf & _
"Zahlart: " & CStr(.Values("Zahl")) & vbCrLf & _
"Rabatt: " & CStr(.Values("Rabatt")) & "%"
End If
End With
Set Dialog = Nothing
C. Dialog mit Drucken und Export (VBScript) #
Option Explicit
Dim Dialog
Set Dialog = Client.CreateDialog("Eulanda.MultiDlg", "Report")
With Dialog
.Title = "Lagerbestand"
.Caption = "Lagerbestand"
.GridLines = 3
.PrintVisible = True
.ExportVisible = True
.ReportTitle = "Lagerbestand - Übersicht"
.ExportFileName = "Lagerbestand.xls"
.DateVisible = True
.PageNoVisible = True
.AddField "Artikel", "String", "Widget A", ""
.AddField "Bestand", "Integer", 150, ""
.AddField "Mindestbestand", "Integer", 50, ""
.Execute
End With
Set Dialog = Nothing
D. Einfacher Dialog (JavaScript) #
var Dialog = Client.CreateDialog("Eulanda.MultiDlg", "");
Dialog.Title = "Einstellungen";
Dialog.SubTitle = "Konfiguration anpassen";
Dialog.GridLines = 3;
Dialog.AddField("Name", "String", "", "");
Dialog.AddField("Alter", "Integer", 30, "");
Dialog.AddField("Farbe", "Color", 0, "Lieblingsfarbe");
Dialog.SetOption("Farbe", "COLORSET", "HTML");
if (Dialog.Execute()) {
Client.MsgBox("Name: " + Dialog.Values("Name") +
"\nAlter: " + Dialog.Values("Alter"));
}
Dialog = null;
E. Felder in einer Zeile gruppieren (VBScript) #
Option Explicit
Dim Dialog
Set Dialog = Client.CreateDialog("Eulanda.MultiDlg", "")
With Dialog
.Title = "Adresse"
.GridLines = 3
.AddField "Vorname", "Name.String", "", ""
.AddField "Nachname", "Name.String", "", ""
.AddField "PLZ", "Ort.String", "", ""
.AddField "Stadt", "Ort.String", "", ""
.Execute
End With
Set Dialog = Nothing
Felder mit demselben Gruppennamen (hier Name und Ort) werden in einer Zeile nebeneinander dargestellt.
F. Externer Zugriff über COM (VBScript ohne EULANDA-Host) #
Wenn ein VBScript außerhalb der EULANDA-Anwendung läuft, kann der MultiDlg über die COM-Schnittstelle instanziert werden:
Option Explicit
Dim App, Lib, Client
' EULANDA-Application instanzieren
Set App = CreateObject("Eulanda.Application")
App.UDL = "C:\Users\Public\EULANDA_1 PluginsLokal.udl"
App.Open
Set Lib = App.ellib
Set Client = App.Client
' Dialog wie gewohnt verwenden
Dim Dialog
Set Dialog = Client.CreateDialog("Eulanda.MultiDlg", "")
With Dialog
.Title = "Externer Zugriff"
.SubTitle = "Dialog wird von externem VBScript aufgerufen"
.GridLines = 3
.AddField "Bemerkung", "String", "", ""
.AddField "Datum", "Date", Now, ""
If .Execute Then
MsgBox "Eingabe: " & .Values("Bemerkung")
End If
End With
Set Dialog = Nothing
' Aufräumen
App.Close
Set Client = Nothing
Set Lib = Nothing
Set App = Nothing
Hinweis: Für den externen Zugriff muss EULANDA® auf dem System installiert und eine gültige UDL-Datei vorhanden sein. Die Eulanda.Application-Klasse stellt Client, ellib und weitere Objekte bereit.
G. Event-Handler mit benutzerdefiniertem Button (VBScript) #
Option Explicit
' Handler-Klasse definieren
Class MyHandler
Public objDialog
Sub Dialog_OnConnect()
' Wird beim Verbinden aufgerufen
End Sub
Sub Berechnen_OnClick()
' Wird beim Klick auf den Button "Berechnen" aufgerufen
Dim Preis, Menge
Preis = objDialog.Values("Preis")
Menge = objDialog.Values("Menge")
objDialog.SetValue "Gesamt", Preis * Menge
End Sub
End Class
Dim Dialog, Handler
Set Handler = New MyHandler
Set Dialog = Client.CreateDialog("Eulanda.MultiDlg", "")
With Dialog
.Title = "Kalkulation"
.GridLines = 3
.AddField "Preis", "Float", 10.0, ""
.AddField "Menge", "Integer", 1, ""
.AddField "Gesamt", "Float", 0, ""
.SetOption "Gesamt", "READONLY", 1
.AddButton "Berechnen", "Berechnen"
.AddHandler Handler
.Execute
End With
Set Dialog = Nothing
Set Handler = Nothing
Dialogaufbau #
+------------------------------------------------------------------+
| Kopfbereich (Title + SubTitle + Icon) |
+------------------------------------------------------------------+
| Vertikales Property-Grid |
| Feldname | Eingabefeld |
| Kategorie --------|------------------------------------------- |
| +Unterfeld | Eingabefeld |
+------------------------------------------------------------------+
| Hilfebereich (optional, wenn Help gesetzt) |
+------------------------------------------------------------------+
| [Drucken] [Export] [Löschen] [Übernehmen] [Verwerfen]|
+------------------------------------------------------------------+
Siehe auch #
- Client.CreateDialog - Dialoge erstellen
- Eulanda.MultiSelect-Dialog - Mehrfachauswahl-Dialog
- Mail-Objekt - E-Mail-Versand