Multi Dlg
Zuletzt geändert: 16.03.2026 04:37

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.

Der MultiDlg ist komplett unabhängig von der Datenbankstruktur. Er kann bestehende Datenbankfelder in anderer Sichtweise anzeigen oder eigene Zusatzfelder aus getrennten Tabellen editieren. Über das Dataset-Objekt lässt sich die Maske mit dem am Bildschirm angezeigten Datensatz synchronisieren (z.B. über Dataset.RefreshCurrent nach dem Schließen des Dialogs).

Der MultiDlg steht auch im Berichts-Designer in Pascal-Script zur Verfügung.

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
NativeFieldType(Typ)StringNativen Datentyp eines Feldtyps ermitteln
StrToFilename(Text)StringText in gültigen Dateinamen umwandeln

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, CalcIntegerNachkommastellen: 0 = keine, 1-6 = fest, >6 = Fließkomma
"SEPARATOR"Float, Calc, Integer1/0Tausendertrennzeichen (Standard: 1 = aktiv)
"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

NativeFieldType #

NativeFieldType(Typ: String): String

Gibt den nativen Datentyp zurück, der einem Feldtyp zugrunde liegt. Beispiele: "Combo" liefert "String", "Time" liefert "DateTime", "Color" liefert "Integer".

StrToFilename #

StrToFilename(Text: String): String

Wandelt einen beliebigen String in einen gültigen Dateinamen um. Es dürfen keine Laufwerke, Pfadangaben oder Extensions enthalten sein – nur der reine Dateiname.

Integration in EULANDA #

Wenn ein MultiDlg-Script fertig entwickelt ist, kann es in der SQL-Registry unter ROOT\OBJECTS\Dataobjects\<Abschnitt>\Actions abgelegt werden. Dort lässt sich zusätzlich ein Menütitel, ein Icon sowie ein Tastenkürzel (Shortcut) eintragen. So wird der Dialog in die Werkzeugleiste, Menüs, Infosysteme oder Kurzinfosysteme integriert.

Über das Dataset-Objekt lässt sich der Dialog mit dem aktuellen Bildschirm-Datensatz synchronisieren. Werte die über den MultiDlg direkt in den SQL-Server geschrieben werden, lassen sich über Dataset.RefreshCurrent nach dem Schließen des Dialogs in der Hauptmaske sichtbar machen.

Farbreferenz #

Der Feldtyp Color kann über SetOption "FeldName", "COLORSET", "..." mit verschiedenen Farbpaletten geladen werden. Zusätzlich können über AddFieldItem benutzerdefinierte Farben als "FarbName;Anzeigename" hinzugefügt werden.

Verfügbare ColorSets #

ColorSetBeschreibung
"DELPHI"Standard-Farben (16 Grundfarben)
"USER"Benutzerdefinierte Farben (via AddFieldItem)
"HTML"Netscape/HTML-Farben (140+ benannte Farben)
"X11"X11-Farben (alphabetisch)
"X11SORT"X11-Farben (nach Farbton sortiert)

Standard-Farben (DELPHI) #

Black, Maroon, Green, Olive, Navy, Purple, Teal, Gray, Silver, Red, Lime, Yellow, Blue, Fuchsia, Aqua, White, MoneyGreen, SkyBlue, Cream, MedGray.

Absolute Farben #

Farben können auch als Hexadezimalwert angegeben werden: #RRGGBB. Beispiele: #FFFFFF = Weiß, #000000 = Schwarz, #FF0000 = Rot.

.AddField "Farbe", "Color", 0, ""
.SetOption "Farbe", "ColorSet", "User"
.AddFieldItem "Farbe", "#FF6600;Mein Orange"
.AddFieldItem "Farbe", "Red;Standardrot"

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 #