Flexible Meldungsfenster

Keine Applikation kommt ohne Meldungsfenster (auch Message-Boxen oder Dialogboxen genannt) aus. Sei es um den Anwender zu informieren, seine Bestätigung einzuholen oder eine Entscheidung zu erfragen.

Im Rahmen eigener Entwicklungen haben wir ein Modul zur flexiblen Programmierung von Meldungsfenstern umgesetzt, das ich Ihnen in diesem Artikel vorstellen möchte.

Vorteile

Dialogboxen können in CONZEPT 16 bereits mit der Funktion WinDialogBox() angezeigt werden. Das am Ende des Artikels als Download angehängte Modul SysMsg bietet gegenüber dieser Funktion einige Vorteile:

  • Platzhalter
    Im Titel und Text können Platzhalter verwendet werden, die durch Ersetzungstexte und Steuerzeichen ersetzt werden. Beispiele:
    \1” – 1. Ersetzungstext
    \n” – Zeilenumbruch
    \t” – Tabulator
  • Textausrichtung
    Der Meldungstext kann links, rechts oder zentriert und oben, unten oder mittig ausgerichtet werden.
  • Vergrößerbar
    Das Meldungsfenster kann vom Anwender vergrößert werden.
  • Lokalisierbarkeit
    Die Schaltflächenbeschriftungen können in verschiedenen Sprachen angezeigt werden.
  • Abfragemeldungen
    Das Meldungsfenster kann den Anwender zur Eingabe einer Zeichenkette oder einer Zahl auffordern, die während der Eingabe validiert werden kann.
  • Eigene Objekte
    Dem Meldungsfenster können eigene Objekte hinzugefügt werden.
  • Eigene Schaltflächen
    Dem Meldungsfenster können eigene Schaltflächen hinzugefügt werden.

Beispiele

Information
Informationsmeldung mit Ersetzungstext
SysMsg:Msg.Info(
  'Verzeichnis leeren', // Titel
  'Das Verzeichnis "\1" wurde erfolgreich geleert.', // Text
  _Msg.Escape | _Msg.SoundNone, // Optionen
  0, // Übergeordnetes Fenster
  'MyDir' // 1. Ersetzungstext
);
Warnung
Warnungsmeldung mit Abbrechen-, Wiederholen- und Ignorieren-Schaltfläche
switch (SysMsg:Msg.Warn(
  'Datei speichern', // Titel
  'Eine Datei mit dem Namen "\1" ist bereits vorhanden.', // Text
  _Msg.Escape | _Msg.ButtonsAbortRetryIgnore, // Optionen
  0, // Übergeordnetes Fenster
  'MyFile.txt' // 1. Ersetzungstext
))
{
  // Abbrechen (Beenden)
  case _Msg.IDAbort  : { /*...*/ }
  // Wiederholen
  case _Msg.IDRetry  : { /*...*/ }
  // Ignorieren
  case _Msg.IDIgnore : { /*...*/ }
}
Fehler
Fehlermeldung mit links ausgerichtetem Text
SysMsg:Msg.Error(
  'Datei importieren', // Titel
  'Die Datei "\1" konnte nicht importiert werden.\n' +
  'Beim Lesen des XML-Dokumentes ist ein Fehler aufgetreten:\n' +
  '\n' +
  'Fehler\t: \2' +
  'Zeile\t: \3\n' +
  'Spalte\t: \4', // Text
  _Msg.Escape | _Msg.TextAlignLeft, // Optionen
  0, // Übergeordnetes Fenster
  'MyFile.xml', // 1. Ersetzungstext
  XMLError(_XMLErrorText), // 2. Ersetzungstext
  XMLError(_XMLErrorLine), // 3. Ersetzungstext
  XMLError(_XmlErrorColumn) // 4. Ersetzungstext
);
Bestätigung
Bestätigungsmeldung mit Nein-Schaltfläche als Standardschaltfläche
if (SysMsg:Msg.Confirm(
  'Datei löschen', // Titel
  'Soll die Datei "\1" wirklich gelöscht werden?\n' +
  '\n' +
  'Typ\t\t: \2\n' +
  'Größe\t\t: \3\n' +
  'Änderungsdatum\t: \4', // Text
  _Msg.Escape | _Msg.TextAlignLeft | _Msg.ButtonDefault2 | _Msg.Closable, // Optionen
  0, // Übergeordnetes Fenster
  'MyFile.txt', // 1. Ersetzungstext
  'XML-Dokument', // 2. Ersetzungstext
  '23,11 KB', // 3. Ersetzungstext
  'Mo., 3. Feb. 2014, 15:46 Uhr' // 4. Ersetzungstext
// Ja
) = _Msg.IDYes)
{
  // ...
}
Abfrage
Abfragemeldung mit ungültiger Eingabe
if (SysMsg:Msg.PromptAlpha(
  var tName, // Wert
  'Verzeichnis umbenennen', // Titel
  'Name:', // Text
  0, // Übergeordnetes Fenster
  0, // Optionen
  '', '', '', '', '', '', '', '', // Ersetzungstexte
  __PROC__ + ':PromptValidate' // Validierungsfunktion
// OK
) = _Msg.IDOK)
{
  // ...
}
Angepasste Meldung
Angepasste Meldung mit Listenobjekt und eigner Schaltfläche
// Meldung konfigurieren
SysMsg:Msg.Config(
  'Verzeichnis exportieren', // Titel
  'Das Verzeichnis "\1" konnte nicht vollständig exportiert werden.\n' +
  'Folgende Fehler sind aufgetreten:', // Text
  _Msg.Escape | _Msg.IconError | _Msg.TextAlignLeft | _Msg.Resizable | _Msg.ButtonsNone, // Optionen
  0, // Übergeordnetes Fenster
  'MyDir' // 1. Ersetzungstext
);
// Schaltfläche erzeugen
tWinButton # SysMsg:Msg.ButtonCreate('Gefällt mir!', _Msg.IDOK);
tWinButton->wpDefault # true;
tWinButton->WinFocusSet();
// Textanordnung ändern
SysMsg:Msg.TextAlignGroupingSet(_WinAlignGroupingTop);
// Mindesthöhe erhöhen
SysMsg:Msg.HeightMinSet(120, true);
tWinDataList # WinCreate(_WinTypeDataList);
tWinDataList->wpTabStop # false;
tWinDataList->wpAlignMarginTop # 8;
tWinColumn # WinCreate(_WinTypeListColumn, '', 'Datei', tWinDataList);
tWinColumn->wpClmWidth # 120;
tWinColumn # WinCreate(_WinTypeListColumn, '', 'Fehler', tWinDataList);
tWinColumn->wpClmStretch # true;
tWinDataList->WinLstDatLineAdd('MyFile.xml');
tWinDataList->WinLstCellSet('Datei bereits vorhanden und gesperrt.', 2);
// ...
// Objekt hinzufügen
SysMsg:Msg.ObjectAdd(tWinDataList);
// Meldung anzeigen
SysMsg:Msg.Run();
tWinDataList->WinDestroy();

Fazit

Mit diesem Modul können Sie Meldungsfenster ganz nach Ihren Bedürfnissen gestalten. Im Quelltext lassen sich auch die Abstände und Farben individuell festlegen. Gerne können Sie das Modul ausprobieren und uns hier Rückmeldung geben =).

Hinweis: Zum ordnungsgemäßen Ausführen des Moduls, wird die Version 5.7.07 des CONZEPT 16-Clients vorausgesetzt.

Download

Zum downloaden hier klicken SysMsg.zip (65.03 KB)
Sie müssen angemeldet sein, um die Datei herunterladen zu können.

Klicken Sie hier, um die Nutzungsbedingungen für unseren Blog zu lesen.

2 Antworten

  1. Ein wesentlicher Vorteil ist zum Beispiel, dass man die Zeichenketten "kontextunabhängig" als define oder in einer Übersetzungstabelle speichern kann. Also etwa "Das Verzeichnis ‘1’ …" für die Deutsche Sprache und "The directory ‘1’ …" für die Englische.

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Leave the field below empty!

Wünsche, Fragen oder Feedback sind willkommen:

Nutzungsbedingungen der Kommentarfunktion im Blog

1. Allgemeines

Vectorsoft AG („Anbieter“) stellt für Internetnutzer („Nutzer“) auf der Website
vectorsoft.de einen öffentlichen Blog bereit. Der öffentliche Blog dient dem
Informations- und Gedankenaustausch. Die Nutzer, welche sich mit Beiträgen und
Kommentaren beteiligen, verpflichten sich dazu, die Blog-Nutzungsbedingungen
einzuhalten und tragen die Verantwortung für die Richtigkeit und Angemessenheit
sowie Freiheit von Rechtsverletzungen ihrer Beiträge. Mit Nutzung der
Kommentarfunktion in unserem Blog akzeptieren Sie diese Nutzungsbedingungen.

2. Netiquette

Wir bitten Sie von persönlichen Angriffen und Provokationen aufgrund anderer
Meinungen abzusehen. Bitte argumentieren Sie sachlich und bewegen Sie sich auf
der Basis einer konstruktiven Diskussionskultur. Ihr Kommentar sollte stets im
Zusammenhang mit dem jeweiligen Thema sein, um Ausschweifungen in andere
Themenbereiche zu vermeiden. Das mehrmalige Posten desselben Kommentars
oder mehrerer ähnlicher Kommentare ist nicht erlaubt.

3. Verbot rechtswidriger Inhalte

Mit Absenden Ihres Kommentars bestätigen Sie, dass Sie keine Urheberrechte oder andere Rechte Dritter verletzen. Volksverhetzende, rassistische Äußerungen, Anleitungen zu Straftaten und deren Verherrlichung, Gewaltdarstellungen, pornografische Inhalte und Äußerungen, die Persönlichkeitsrechte verletzen sind untersagt.

4. Keine Werbung

Die Nutzung der Kommentarfunktion ist für kommerzielle oder parteipolitische
Zwecke nicht erlaubt. Werbliche Beiträge aller Art werden von uns umgehend
gelöscht.

5. Angaben zum Namen

Bei der Eingabe Ihres Namens achten Sie auf die zuvor genannten Grundsätze.

6. Quellenangaben

Bitte geben Sie bei der beabsichtigten Veröffentlichung von Zitaten oder Beiträgen
Dritter die jeweiligen Quellen an und erläutern dessen Bezug zum Blogbeitrag.

7. Verstoß gegen die Nutzungsbedingungen

Beiträge, die gegen diese Richtlinie verstoßen werden umgehend gelöscht. Sollten
Sie selbst Verstöße bemerken, so senden Sie uns bitte den Link des betreffenden
Kommentars per E-Mail an . Wir weisen ausdrücklich daraufhin, dass wir einzelne Nutzer bei wiederholten oder schweren Verstößen gegen diese
Nutzungsbedingungen ausschließen werden.

Stand: Sept. 2024

Deine Trial Version - jetzt anfordern!

Teste yeet - unverbindlich und kostenfrei

IHRE EVALUIERUNGSLIZENZ - JETZT ANFORDERN!

TESTEN SIE DIE CONZEPT 16 VOLLVERSION - UNVERBINDLICH und KOSTENFREI

Melden Sie sich bei unserem Newsletter an

Anrede*
     
Zustimmung zur Datenverarbeitung gem. DSGVO*



WordPress Cookie-Hinweis von Real Cookie Banner