Multi Dlg
Zuletzt geändert: 28.02.2026 19:21

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 #

EigenschaftTypStandardBeschreibung
TitleStringTitel im Kopfbereich (groß, fett)
SubTitleStringUntertitel im Kopfbereich
CaptionString"Eingabedialog"Fenstertitel in der Titelleiste
IconUrlStringSymbol im Kopfbereich (z.B. "folder", "gearwheel")
GridLinesInteger0Gitterlinien (siehe Konstanten)
HeightIntegerautoDialoghöhe in Zeilen (je 18 Pixel)
HelpStringHTML-Hilfe oder URL im unteren Bereich
HtmlHelpStringAlias für Help
HtmlHelpHeightInteger0Höhe des Hilfebereichs in Pixeln
ExplorerStyleBooleanFalseExplorer-Stil für Kategorien
DotNetStyleBooleanFalseDotNet-Darstellung
FlowStyleBooleanFalseBand-Layout (mehrere Spalten)
MajorVersionInteger2Hauptversion (nur lesen)
MinorVersionInteger3Nebenversion (nur lesen)
DeletePressedBooleanFalseTrue wenn Löschen gedrückt wurde (nur lesen)

Button-Eigenschaften #

EigenschaftTypStandardBeschreibung
OkVisibleBooleanTrueOK-Button anzeigen
OkCaptionString"Übernehmen"Beschriftung OK-Button
CancelVisibleBooleanTrueAbbrechen-Button anzeigen
CancelCaptionString"Verwerfen"Beschriftung Abbrechen-Button
DeleteVisibleBooleanFalseLöschen-Button anzeigen
DeleteCaptionString"Löschen"Beschriftung Löschen-Button
PrintVisibleBooleanFalseDrucken-Button anzeigen
PrintCaptionString"Drucken"Beschriftung Drucken-Button
PrintPreviewVisibleBooleanFalseVorschau im Kontextmenü
PrintPreviewCaptionString"Vorschau"Beschriftung Vorschau
ExportVisibleBooleanFalseExport-Button anzeigen
ExportCaptionString"Exportieren"Beschriftung Export-Button

Druck- und Export-Eigenschaften #

EigenschaftTypStandardBeschreibung
ReportTitleString(= Caption)Titel im Druckbericht
PrintJobTitleString(= Caption)Name des Druckauftrags
ExportFileNameStringDesktop + Caption + .xlsStandard-Dateiname für Excel-Export
UserNameVisibleBooleanFalseBenutzername im Druckkopf anzeigen
DateVisibleBooleanTrueDatum im Druckkopf anzeigen
PageNoVisibleBooleanTrueSeitenzahlen im Druckfuß anzeigen

Methoden #

MethodeRückgabeBeschreibung
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)VariantFeldwert lesen
SetHints(Name, Text)Tooltip setzen
Hints(Name)StringTooltip lesen
ExecuteBooleanDialog anzeigen (True = OK)
LoadState(Version)Gespeicherten Zustand laden
SaveStateAktuellen Zustand speichern
ExpandAllAlle Kategorien aufklappen
CollapseAllAlle Kategorien zuklappen
ClearAlle Felder entfernen
SampleDemo-Daten einfügen
AddHandler(Handler)Event-Handler registrieren
AddButton(Name, Title)ObjectBenutzerdefinierten Button hinzufügen
Buttons(Index)ObjectButton nach Index abrufen
ButtonCountIntegerAnzahl benutzerdefinierter Buttons

Feldtypen #

Der zweite Parameter von AddField bestimmt den Typ des Eingabefeldes.

Standard-Typen #

TypWert in VBSEditorBeschreibung
"String"StringTexteingabeEinzeiliger Text
"Memo"StringMehrzeiligMehrzeiliger Text (Blob-Editor)
"Integer"IntegerZahleneingabeGanzzahl
"Float"DoubleDezimaleingabeDezimalzahl (2 Nachkommastellen)
"Currency"CurrencyWährungWährungsbetrag
"Calc"DoubleTaschenrechnerZahl mit Rechner-Popup
"Boolean"BooleanCheckboxWahr/Falsch
"DateTime"DateKalender + UhrDatum und Uhrzeit
"Date"DateKalenderNur Datum (mit Kalenderwochen)
"Time"DateZeiteingabeNur Uhrzeit
"Combo"StringDropdownAuswahlliste (siehe AddFieldItem)
"Radio"IntegerRadiogruppeOptionsschalter (0-basiert)
"Spin"IntegerDrehfeldZahl mit Hoch/Runter-Buttons
"Track"IntegerSchiebereglerSlider (Standard: 0-100)
"Color"IntegerFarbauswahlFarbwähler mit Palette
"Font"StringSchriftauswahlDropdown mit Schriftarten
"Shell"StringOrdnerauswahlDatei-/Ordner-Browser
"Image"VariantBildfeldBild-Anzeige und -Auswahl

Typ-Modifikatoren (Prefix) #

Feldtypen können mit Präfixen kombiniert werden:

PräfixSyntaxBeschreibung
+"+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)
ParameterBeschreibung
NameFeldname (oder "Anzeige@Schlüssel")
TypFeldtyp (siehe Tabelle oben), optional mit Präfix
DefaultVorgabewert (Null für leer)
HintTooltip-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:

OptionGilt fürWertBeschreibung
"FIXED"ComboDropdown nicht editierbar
"EDIT"ComboDropdown editierbar (Freitext möglich)
"READONLY"Alle1/0Schreibschutz
"HEIGHT"AlleIntegerZeilenhöhe (Vielfaches von 17px)
"HIDEFIELDNAME"Alle1/0Feldbezeichnung ausblenden
"DECIMALS"Float, CalcIntegerAnzahl Nachkommastellen
"SEPARATOR"Float, Calc1/0Tausendertrennzeichen
"COLORSET"ColorStringFarbpalette ("DELPHI", "HTML", "X11")
"INLINE"ImageBild in Originalgröße anzeigen
"ICON"ImageBild als Symbol anzeigen
"EXPAND"KategorieKategorie aufklappen
"COLLAPSE"KategorieKategorie 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 #

WertRAP-KonstanteBeschreibung
0vglNoneKeine Gitterlinien
1vglHorizontalNur horizontal
2vglVerticalNur vertikal
3vglBothHorizontal 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:

EreignisAuslöserBeschreibung
Dialog_OnConnectNach Erstellung, vor AnzeigeInitialisierung
Dialog_OnDisconnectNach SchließenAufräumen
<ButtonName>_OnClickKlick auf benutzerdefinierten ButtonButton-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 #