messagebox — n_pbt_messagebox #
← Komponentenreferenz · Inhalt des Handbuchs
Modales Dialogfeld im Design der Anwendung, mit synchronem Rückgabewert: der direkte Ersatz für das
MessageBox()von PowerBuilder, mit Rich-Text, frei wählbaren Schaltflächen, Symbolen und Kontrollkästchen.
▶ Live ansehen — Demoanwendung, Kachel Message box: die Vorschau, der zugehörige Code und diese Seite, nebeneinander.
Auf einen Blick #
| Objekt | n_pbt_messagebox — nicht visuell: nichts, was im Fenster platziert werden muss |
| Wofür | Eine Frage stellen oder ein Ergebnis melden, anstelle des starren und nicht gestalteten nativen MessageBox() |
| Rückgabewert | Synchron: of_show() blockiert und liefert den Index der angeklickten Schaltfläche |
Anders als die visuellen Komponenten wird dieses Objekt nicht in ein Fenster eingefügt: Sie erzeugen, konfigurieren, zeigen und zerstören es.
// Lokale Variablen
n_pbt_messagebox lnv_mb
// Das Dialogobjekt erzeugen
lnv_mb = create n_pbt_messagebox
// ... Konfiguration ...
// Das Dialogobjekt freigeben
destroy lnv_mb
Schnellstart #
// Lokale Variablen
n_pbt_messagebox lnv_mb
// Das Dialogobjekt erzeugen
lnv_mb = create n_pbt_messagebox
// Das Dialogfeld konfigurieren
lnv_mb.is_title = "Löschen"
lnv_mb.is_icon = lnv_mb.ICON_WARNING
lnv_mb.is_message = "[b]12 Ordner[/b] endgültig löschen ?[br][br]Diese Aktion kann nicht rückgängig gemacht werden."
// Die Schaltflaechen hinzufuegen : Abbrechen ist die Standardschaltflaeche, die Eingabetaste loescht nichts
lnv_mb.of_add_button(/*text*/ "Löschen", /*default*/ true, /*cancel*/ false) // -> 1
lnv_mb.of_add_button(/*text*/ "Abbrechen", /*default*/ true, /*cancel*/ true) // -> 2
// Modal anzeigen, dann auf die erste Schaltflaeche reagieren
if lnv_mb.of_show(/*hwnd*/ Handle(this)) = 1 then
of_delete()
end if
// Das Dialogobjekt freigeben
destroy lnv_mb
of_show wartet auf die Antwort des Benutzers: Die nächste Zeile wird erst nach dem Klick ausgeführt, genau wie bei MessageBox().
Eigenschaften #
Vor of_show zu setzen.
| Eigenschaft | Typ | Standard | Zweck |
|---|---|---|---|
is_title | string | "" | Titel, der in der Kopfzeile des Dialogfelds angezeigt wird |
is_message | string | "" | Text der Meldung. Akzeptiert die Rich-Text-Auszeichnung ([b], [i], [br], [accent], [picture=…]…). Der Text der Meldung und der Anweisung lässt sich markieren und kopieren. Ein Wert aus Ihren Daten geht zuerst durch of_escape_markup: sonst würde eine Klammer darin als Auszeichnung gelesen — ein [action=x] in einem Kundennamen würde das Dialogfeld schließen |
is_instruction | string | "" | Hauptanweisung: die Frage selbst, größer über der Meldung angezeigt. Titel / Anweisung / Meldung ist der Aufbau, der einen Dialog auf einen Blick lesbar macht — „42 Zeilen löschen?“ dann „Dies kann nicht rückgängig gemacht werden“ — statt eines gleichförmigen Blocks. Nimmt die Auszeichnung an |
is_icon | string | "" | Symbol: eine ICON_*-Konstante oder Ihr eigenes Bild (Dateipfad oder DLL-Ressource meine.dll:NAME) |
is_details | string | "" | Details, unter der Meldung hinter einer Schaltfläche „Details anzeigen“ eingeklappt: ein Bericht, ein Aufrufstapel, eine SQL-Anweisung. Klartext in einer scrollenden Zone mit fester Zeichenbreite — eine Klammer bleibt eine Klammer. Strg+C kopiert ihn auch eingeklappt: Das ist es, was der Support verlangt |
is_details_label | string | "" | Beschriftung der Schaltfläche, die is_details aufklappt ("" = das übersetzte „Details anzeigen / ausblenden“) |
is_footer | string | "" | Eine Fußnote unter den Schaltflächen: ein Hilfelink, eine Erinnerung. Rich-Text; ein [hyperlink] darin öffnet den Browser und lässt das Dialogfeld offen |
is_footer_icon | string | "" | Kleines Symbol vor der Fußnote: eine ICON_*-Konstante oder Ihr eigenes Bild ("" = keines) |
is_checkbox | string | "" | Text eines optionalen Kontrollkästchens im Stil „nicht mehr nachfragen" ("" = kein Kontrollkästchen) |
ib_checked | boolean | false | Anfangszustand des Kontrollkästchens (der Endzustand wird mit of_checked() gelesen) |
ib_input | boolean | false | Fügt ein gestaltetes Eingabefeld hinzu (umbenennen, Grund, Kommentar), sodass eine Anwendung kein selbstgebautes Fenster mehr braucht, das weder dem Thema noch der Leserichtung folgt. Mit of_input_value() nach of_show auslesen. Alles in einem Aufruf: of_prompt — er berücksichtigt die vorher gesetzten Einstellungen des Feldes (Beschriftung, Maske, Pflicht, mehrzeilig, Länge, Muster) |
is_input_label | string | "" | Beschriftung über dem Feld ("" = keine). Erfordert ib_input . Sie benennt das Feld für einen Bildschirmleser, und ein Klick darauf gibt dem Feld den Fokus; Rich-Text erlaubt, eine [action]-Zone darin antwortet wie eine Wahl |
is_input_value | string | "" | Anfangsinhalt des Feldes. Er ist beim Öffnen ausgewählt: Tippen ersetzt ihn, wie in jedem Umbenennen-Dialog |
is_input_placeholder | string | "" | Hinweis, solange das Feld leer ist. Es ist kein Wert: Tippt der Benutzer nichts, wird nichts zurückgegeben |
ib_input_password | boolean | false | Verbirgt die eingegebenen Zeichen . Ein Auge am Ende des Feldes zeigt sie an — mit der Maus oder Alt+F8 über die Tastatur. Der Wert wird nie von Strg+C kopiert noch dem Kennwort-Manager angeboten |
ib_input_required | boolean | false | Die Standard-Schaltfläche bleibt deaktiviert, solange das Feld leer ist. Absenden zu lassen, um danach zurechtgewiesen zu werden, hilft niemandem; die Abbrechen-Schaltfläche bleibt erreichbar. Ein Countdown auf dieser Schaltfläche (of_add_button_timed) klickt sie nicht, solange das Feld leer ist: Er läuft ab, und die Schaltfläche wartet auf eine Hand. Eine Schaltfläche, die zugleich Standard und Abbrechen ist, ist ebenfalls außer Reichweite: Esc und Alt+F4 schließen das Dialogfeld dann ohne Auswahl (0) . Leerzeichen allein füllen das Feld nicht (der Wert kommt wie getippt zurück) |
ib_input_multiline | boolean | false | Das Feld nimmt mehrere Zeilen auf (ein Kommentar, eine Adresse): Die Eingabetaste beginnt eine neue Zeile, Strg+Eingabe antwortet mit der Standardschaltfläche. Ein maskiertes Feld bleibt einzeilig |
il_input_max_length | long | 0 | Höchstzahl an Zeichen (0 = keine Grenze); ein längerer Anfangswert wird gekürzt |
is_input_pattern | string | "" | Ein regulärer Ausdruck, dem der ganze Wert entsprechen muss ([0-9]{4}: vier Ziffern). Solange er es nicht tut, erscheint eine Meldung unter dem Feld und die Standardschaltfläche bleibt außer Reichweite. Ein leeres Feld regelt ib_input_required |
is_input_error | string | "" | Die Meldung unter einem Wert, den is_input_pattern ablehnt ("" = das übersetzte „Dieser Wert ist ungültig.“) |
ib_buttons_reverse | boolean | false | Reihenfolge der Schaltflächen: false = von links nach rechts in der Reihenfolge des Hinzufügens; true = umgekehrt |
ib_movable | boolean | true | Lässt sich das Fenster verschieben? Es hat keine Titelleiste — es zeichnet seine eigene Karte — also hat Windows keinen Griff daran: wir geben ihm einen, die Karte zieht das Fenster, außer dem, was schon auf einen Klick antwortet, und dem Meldungstext, der sich markieren lässt. Standardmäßig wahr, denn ein Dialog, der genau das verdeckt, was man zum Antworten lesen muss, ist eine Falle. Auf falsch setzen für ein Fenster, das bleiben muss, wo es ist . Eine Abkürzung wie of_info behält diese Einstellung |
ib_closable | boolean | false | Esc und Alt+F4 bei einem Dialogfeld ohne Abbrechen-Schaltfläche. false folgt Windows: Ein Dialogfeld mit einer einzigen Schaltfläche schließt über diese (of_info liefert 1), eines mit mehreren (Ja / Nein) muss beantwortet werden — keine der beiden Tasten schließt es. true schließt es ohne Auswahl: of_show liefert 0 |
ib_sound | boolean | true | Der Windows-Ton des Symbols beim Öffnen (Information, Warnung, Fehler, Frage). false = ein stummes Dialogfeld. Ein Dialogfeld ohne Symbol oder mit eigenem Bild spielt nichts |
is_position | string | POSITION_OWNER | Zentrierung: POSITION_OWNER (auf dem aufrufenden Fenster) oder POSITION_SCREEN (auf dem Bildschirm) |
il_min_width | long | 0 | Mindestbreite in Pixeln (0 = automatisch, 320); nie unter 200 |
il_max_width | long | 0 | Maximalbreite in Pixeln (0 = automatisch): Der Text bricht innerhalb dieser Grenze um; nie unter 200 |
il_max_height | long | 0 | Maximalhöhe in Pixeln (0 = automatisch): Darüber hinaus wird der Meldungstext gescrollt, statt das Fenster zu vergrößern |
il_accent | long | -1 | Akzentfarbe dieses Dialogfelds: Die Standardschaltfläche und das Kontrollkästchen übernehmen sie, und die lesbare Textfarbe wird daraus abgeleitet. -1 (Standard) folgt der Anwendung. Ein Fehler in Rot, ein Erfolg in Grün, ohne das Design anzutasten . Eine Abkürzung wie of_error behält ihn: setzen Sie ihn, dann rufen Sie die Abkürzung auf |
Konstanten #
| Konstante | Wert | Verwendung |
|---|---|---|
ICON_INFORMATION | "information" | Neutrale Information |
ICON_WARNING | "warning" | Warnung, riskante Aktion |
ICON_ERROR | "error" | Fehlschlag, Fehler |
ICON_QUESTION | "question" | Geschlossene Frage |
ICON_SUCCESS | "success" | Bestätigung eines Erfolgs |
ICON_NONE | "none" | Kein Symbol |
POSITION_OWNER | "owner" | Auf dem aufrufenden Fenster zentriert |
POSITION_SCREEN | "screen" | Auf dem Bildschirm zentriert |
BUTTONS_OK | "ok" | of_messagebox: OK |
BUTTONS_OK_CANCEL | "okcancel" | OK / Abbrechen |
BUTTONS_YES_NO | "yesno" | Ja / Nein |
BUTTONS_YES_NO_CANCEL | "yesnocancel" | Ja / Nein / Abbrechen |
BUTTONS_RETRY_CANCEL | "retrycancel" | Wiederholen / Abbrechen |
BUTTONS_ABORT_RETRY_IGNORE | "abortretryignore" | Abbrechen / Wiederholen / Ignorieren |
Methoden #
| Methode | Zweck | |
|---|---|---|
of_add_button (string as_text) → long | Fügt eine einfache Schaltfläche hinzu. Liefert ihren Index ab 1 | |
of_add_button (string as_text, boolean ab_default, boolean ab_cancel) → long | Dasselbe, wobei die Schaltfläche als Standard (Eingabetaste) und/oder als Abbrechen (Esc) gekennzeichnet wird. Liefert seinen Index, ab 1 | |
of_add_button (string as_text, string as_icon, boolean ab_default, boolean ab_cancel) → long | Dasselbe, mit einem Symbol auf der Schaltfläche. Liefert seinen Index, ab 1 | |
of_add_button_timed (string as_text, boolean ab_default, boolean ab_cancel, long al_enable_secs, long al_click_secs) → long | Schaltfläche mit Countdown: bleibt al_enable_secs Sekunden lang deaktiviert (mit sichtbarem Zähler) und klickt sich dann selbst nach al_click_secs Sekunden (0 = Zeitgeber inaktiv). Solange eine Abbrechen-Schaltfläche noch herunterzählt, schließen weder Esc noch Alt+F4 das Dialogfeld: die Wartezeit soll zum Lesen bringen. Liefert seinen Index, ab 1 | |
of_count ( ) → long | Liefert die Anzahl der Schaltflächen, die der Dialog trägt. Sie werden über ihren Rang angesprochen — den of_add_button liefert und den of_show zurückgibt — sie tragen also keinen Schlüssel: of_keys_at und of_has gibt es hier nicht | |
of_show (long al_hwnd) → long | Zeigt das modale Dialogfeld und liefert den Index der angeklickten Schaltfläche. 0 = ohne Schaltfläche geschlossen: eine [action]-Zone oder eine Wahl (of_action), oder Esc / Alt+F4 mit ib_closable. Ohne Abbrechen-Schaltfläche antworten Esc und Alt+F4 über die einzige Schaltfläche eines Dialogfelds mit einer Schaltfläche und schließen keines mit mehreren — wie Windows. Ein negativer Wert bedeutet, dass kein Dialogfeld angezeigt werden konnte: -4, oder -6, wenn die WebView2-Laufzeit fehlt — of_get_last_error() nennt den Grund. Schließt sich das Besitzer-Fenster, während das Dialogfeld offen ist (ein Timer, ein Ereignis), verschwindet das Dialogfeld mit ihm und of_show liefert 0 | |
of_get_last_error ( ) → string | Warum sich das letzte Dialogfeld nicht öffnen ließ — leere Zeichenkette, wenn es sich geöffnet hat. Nach einem of_show (oder einer Kurzform wie of_info) mit negativem Wert zu lesen, oder nach einem of_choose oder of_prompt, das eine leere Zeichenkette lieferte | |
of_checked ( ) → boolean | Zustand des Kontrollkästchens zum Zeitpunkt des letzten of_show | |
of_input_value ( ) → string | Beim letzten of_show eingegebener Text (leer, wenn ib_input aus war) | |
of_action ( ) → string | Id der angeklickten [action=id]-Zone — in der Meldung, im Titel, in der Anweisung, in einer Beschriftung oder in der Fußnote — oder Schlüssel der angeklickten Wahl; sonst eine leere Zeichenkette. Eine solche Zone ist eine im Text selbst angebotene Wahl: sie schließt den Dialog und of_show liefert 0. Eine [hyperlink=url]-Zone dagegen öffnet im Browser und lässt den Dialog stehen — der Aufrufer steckt in of_show fest, ein Link kann also keine Antwort sein | |
of_info (long al_hwnd, string as_title, string as_message) → long | Dialog in einer Zeile, so wie MessageBox() einer ist: Informationssymbol und eine einzige OK-Schaltfläche, liefert 1. Die Beschriftungen stammen aus den Übersetzungen der Bibliothek (6 Sprachen), statt in jeder Anwendung geschrieben zu werden — genau dafür gibt es diese Kurzformen (negativ: kein Dialogfeld angezeigt, siehe of_get_last_error) Auch Esc liefert 1, wie MessageBox(…, OK!). | |
of_warning (long al_hwnd, string as_title, string as_message) → long | Warnsymbol, eine OK-Schaltfläche. Liefert 1 (negativ: kein Dialogfeld angezeigt, siehe of_get_last_error) | |
of_error (long al_hwnd, string as_title, string as_message) → long | Fehlersymbol, eine OK-Schaltfläche. Liefert 1 (negativ: kein Dialogfeld angezeigt, siehe of_get_last_error) | |
of_success (long al_hwnd, string as_title, string as_message) → long | Erfolgssymbol, eine OK-Schaltfläche. Liefert 1 (negativ: kein Dialogfeld angezeigt, siehe of_get_last_error) | |
of_confirm (long al_hwnd, string as_title, string as_message { , long al_default }) → long | Frage + OK / Abbrechen. Liefert 1 = OK, 2 = Abbrechen (auch Esc). al_default wählt die Standardschaltfläche: 2 legt die Eingabetaste auf Abbrechen, die sichere Vorgabe einer zerstörenden Aktion (-5 außerhalb des Bereichs) (negativ: kein Dialogfeld angezeigt, siehe of_get_last_error) | |
of_yes_no (long al_hwnd, string as_title, string as_message { , long al_default }) → long | Frage + Ja / Nein. Liefert 1 = Ja, 2 = Nein. Wie ein Ja/Nein-Dialogfeld von Windows schließen Esc und Alt+F4 es nicht: Es muss beantwortet werden (ib_closable = true lässt sie 0 liefern). al_default wählt die Standardschaltfläche (-5 außerhalb des Bereichs) (negativ: kein Dialogfeld angezeigt, siehe of_get_last_error) | |
of_yes_no_cancel (long al_hwnd, string as_title, string as_message { , long al_default }) → long | Frage + Ja / Nein / Abbrechen. Liefert 1, 2, 3 (Abbrechen, auch Esc). al_default wählt die Standardschaltfläche (-5 außerhalb des Bereichs) (negativ: kein Dialogfeld angezeigt, siehe of_get_last_error) | |
of_retry_cancel (long al_hwnd, string as_title, string as_message) → long | Fehler + Wiederholen / Abbrechen, Wiederholen als Standard. Liefert 1 = Wiederholen, 2 = Abbrechen (auch Esc) (negativ: kein Dialogfeld angezeigt, siehe of_get_last_error) | |
of_messagebox (long al_hwnd, string as_title, string as_text { , icon ae_icon { , button ae_buttons { , long al_default } } }) → long | Das MessageBox() von PowerBuilder, Argument für Argument: Setzen Sie lnv_mb.of_messagebox(Handle(this), vor einen MessageBox(-Aufruf, und er kompiliert — Question!, YesNo! und die Standardschaltfläche, wie Sie sie geschrieben hatten. Liefert die Nummer der gedrückten Schaltfläche wie MessageBox() (Abbrechen 1 / Wiederholen 2 / Ignorieren 3). Die Texte erscheinen unverändert: eine Klammer bleibt eine Klammer, ~r~n bricht die Zeile um. Esc folgt Windows: die Abbrechen-Schaltfläche, das OK einer einzigen Schaltfläche, nichts bei Ja / Nein und Abbrechen / Wiederholen / Ignorieren. Die Beschriftungen sind übersetzt. -5 bei einer Standardschaltfläche außerhalb des Bereichs (nichts wird angezeigt); ein anderer negativer Wert: kein Dialogfeld angezeigt (of_get_last_error) | |
of_messagebox (long al_hwnd, string as_title, string as_text, string as_icon { , string as_buttons { , long al_default } }) → long | Dasselbe mit Zeichenketten: eine ICON_*-Konstante (oder Ihr Bild) und eine BUTTONS_*-Konstante. -5 bei einem unbekannten Schaltflächensatz. Liefert dieselbe Schaltflächennummer (1 für die erste). | |
of_add_choice (string as_key, string as_title, string as_description { , boolean ab_enabled }) → long | Fügt unter der Meldung eine Auswahl hinzu — Titel und Beschreibung, wie die Befehlslinks eines Windows-Aufgabendialogs. Ein Klick schließt den Dialog, of_action() liefert den Schlüssel (of_show liefert 0). Liefert den Rang der Auswahl (1 für die erste), -5 bei leerem, bereits vergebenem oder / bzw. ` | enthaltendem Schlüssel — dann wird nichts hinzugefügt . Mit ab_enabled = false` erscheint die Wahl ausgegraut und lässt sich nicht wählen (die Pfeiltasten überspringen sie) |
of_choose (long al_hwnd) → string | Zeigt die Auswahlen mit einer einzigen Abbrechen-Schaltfläche (übersetzt) und liefert den Schlüssel der angeklickten Auswahl, oder eine leere Zeichenkette, wenn abgebrochen wurde. Die Liste rollt, wenn sie den Bildschirm sprengt. Ebenfalls leer, wenn kein Dialogfeld angezeigt werden konnte: of_get_last_error nennt dann den Grund. Ohne jede Auswahl wird nichts angezeigt: leere Zeichenkette, und of_get_last_error meldet „no choice to show“ . Eine [action]-Zone der Texte antwortet wie eine Wahl: Ihre Id kommt zurück | |
of_prompt (long al_hwnd, string as_title, string as_message, string as_default { , boolean ab_password, boolean ab_required }) → string | Fragt einen Wert ab und liefert das Eingetippte, oder eine leere Zeichenkette bei Abbruch. Um eine leere Antwort von einem Abbruch zu unterscheiden, nehmen Sie of_show + of_input_value. Ebenfalls leer, wenn kein Dialogfeld angezeigt werden konnte: of_get_last_error nennt dann den Grund . Die vorher gesetzten Einstellungen des Feldes werden berücksichtigt (is_input_label, ib_input_password, ib_input_multiline, is_input_pattern…); die Überladung maskiert (ab_password) und verlangt (ab_required) nur für diesen Aufruf | |
of_reset ( ) → long | Löscht alle Eigenschaften, die hinzugefügten Schaltflächen und Wahlen und die Antwort des letzten Dialogs (of_checked, of_action, of_input_value, of_get_last_error): Dieselbe Instanz beginnt bei null. Die Abkürzungen (of_info, of_confirm, of_prompt…) ersetzen nur den Inhalt: Sie behalten das Erscheinungsbild (Akzent, Position, Verschieben, Größen, Reihenfolge der Schaltflächen, ib_closable, ib_sound) und die Einstellungen des Feldes Liefert 0, sobald erledigt. |
Die Beschriftung einer Schaltfläche akzeptiert die Rich-Text-Auszeichnung und das Mnemonik-Zeichen & ("&Speichern" unterstreicht das S und aktiviert die Schaltfläche mit Alt+S); && zeigt ein wörtliches Und-Zeichen an.
Die Tastatur #
| Taste | Wirkung |
|---|---|
| Eingabetaste | Löst die als Standard markierte Schaltfläche aus — außer wenn der Fokus auf einer anderen Schaltfläche oder einer Wahl liegt: diese antwortet. In einem mehrzeiligen Feld beginnt die Eingabetaste eine neue Zeile und Strg+Eingabe antwortet |
| Esc | Löst die als Abbrechen markierte Schaltfläche aus; ohne sie die einzige Schaltfläche eines Dialogfelds mit einer Schaltfläche (of_info liefert 1) und nichts bei einem Dialogfeld mit mehreren Schaltflächen (Ja / Nein): Es muss beantwortet werden, wie unter Windows — außer ib_closable = true, das es schließt und 0 liefert. Alt+F4 tut dasselbe. Solange die Abbrechen-Schaltfläche noch herunterzählt (of_add_button_timed), schließt keine der beiden |
| Alt + Buchstabe | Löst die Schaltfläche aus, deren Beschriftung dieses Kürzel trägt. Tragen es mehrere, wandert der Fokus von einer zur nächsten, ohne zu antworten (wie unter Windows): Die Eingabetaste wählt |
| Tab | Verschiebt den Fokus von einem Element zum nächsten: Wahlen, Feld, Schaltfläche „Details“, Kontrollkästchen, Schaltflächen |
| Strg + C | Kopiert das Dialogfeld (Titel, Anweisung, Meldung, Details, Wahlen mit ihrer Beschreibung, „Beschriftung: Wert“ des Feldes — nie ein Kennwort —, Kontrollkästchen mit seinem Zustand [x] oder [ ], Fußnote, Beschriftungen der Schaltflächen) in die Zwischenablage, wie jedes Windows-Dialogfeld — praktisch, wenn ein Fehler an den Support weitergeleitet werden muss. Ist im Meldungstext Text markiert, wird nur die Markierung kopiert |
| ↑ ↓ Pos1 Ende Bild↑ Bild↓ | Durchlaufen die Liste der Wahlen (eine deaktivierte Wahl wird übersprungen); die Eingabetaste wählt die mit dem Fokus |
| Alt + F8 | Zeigt ein Kennwort an oder verbirgt es, aus dem Feld heraus |
Beim Öffnen zeigt keine Schaltfläche einen Fokusrahmen: Das ist beabsichtigt und entspricht dem Verhalten moderner Windows-Dialoge. Der Rahmen erscheint erst nach dem ersten Druck auf Tab, also sobald der Benutzer ausdrücklich zur Tastatur wechselt. Eingabetaste und Esc sind von der ersten Sekunde an aktiv, auch ohne sichtbaren Fokus.
Beispiele #
Geschlossene Frage mit Standardschaltfläche #
// Lokale Variablen
n_pbt_messagebox lnv_mb
long ll_answer
// Das Dialogobjekt erzeugen
lnv_mb = create n_pbt_messagebox
// Das Dialogfeld konfigurieren
lnv_mb.is_title = "Änderungen speichern"
lnv_mb.is_icon = lnv_mb.ICON_QUESTION
lnv_mb.is_message = "Der Ordner wurde geändert. Möchten Sie vor dem Schließen speichern ?"
// Die Schaltflaechen hinzufuegen
lnv_mb.of_add_button(/*text*/ "&Speichern", /*default*/ true, /*cancel*/ false) // 1
lnv_mb.of_add_button(/*text*/ "&Nicht speichern", /*default*/ false, /*cancel*/ false) // 2
lnv_mb.of_add_button(/*text*/ "Abbrechen", /*default*/ false, /*cancel*/ true) // 3
// Modal anzeigen, dann das Dialogobjekt freigeben
ll_answer = lnv_mb.of_show(/*hwnd*/ Handle(this))
destroy lnv_mb
// Je nach geklickter Schaltflaeche handeln (Rang ab 1)
choose case ll_answer
case 1 ; of_save() ; Close(parent)
case 2 ; Close(parent)
case else ; // 3 oder 0 : nicht schliessen
end choose
Formatierte Meldung und Symbol #
// Das Dialogfeld konfigurieren
lnv_mb.is_title = "Import abgeschlossen"
lnv_mb.is_icon = lnv_mb.ICON_SUCCESS
lnv_mb.is_message = "[b]1 240 Zeilen[/b] übernommen.[br][br]" &
+ "[accent]18 Duplikate[/accent] wurden übersprungen."
// Die Schaltflaeche hinzufuegen, dann das Dialogfeld anzeigen
lnv_mb.of_add_button(/*text*/ "OK", /*default*/ true, /*cancel*/ false)
lnv_mb.of_show(/*hwnd*/ Handle(this))
Ein Wert aus Ihren Daten in der Meldung #
Die Meldung ist Rich-Text: eine Klammer darin ist ein Tag. Ein Kundenname, eine vom Benutzer eingegebene Bezeichnung geht vorher durch of_escape_markup (aus n_pbt_utils) — sonst würde „Schmidt [action=x]“ das Dialogfeld wie eine Auswahl schließen.
// Lokale Variablen
n_pbt_utils lnv_utils
string ls_name
// Der Name kommt aus der Datenbank (hier von Hand geschrieben)
ls_name = "Smith [action=x] & Co"
// Den Namen maskieren : er wird unveraendert angezeigt
lnv_mb.is_title = "Delete customer"
lnv_mb.is_message = "Delete the customer [b]" + lnv_utils.of_escape_markup(/*text*/ ls_name) + "[/b] ?"
// Die Schaltflaechen hinzufuegen, Abbrechen als Standard, dann das Dialogfeld anzeigen
lnv_mb.of_add_button(/*text*/ "Delete", /*default*/ false, /*cancel*/ false)
lnv_mb.of_add_button(/*text*/ "Cancel", /*default*/ true, /*cancel*/ true)
lnv_mb.of_show(/*hwnd*/ Handle(this))
Kontrollkästchen „nicht mehr nachfragen" #
// Lokale Variablen
n_pbt_messagebox lnv_mb
// Das Dialogobjekt erzeugen
lnv_mb = create n_pbt_messagebox
// Das Dialogfeld konfigurieren
lnv_mb.is_title = "Löschen"
lnv_mb.is_icon = lnv_mb.ICON_WARNING
lnv_mb.is_message = "Die ausgewählten Zeilen löschen ? Diese Aktion kann nicht rückgängig gemacht werden."
lnv_mb.is_checkbox = "Nicht mehr nachfragen"
lnv_mb.ib_checked = false
// Die Schaltflaechen hinzufuegen
lnv_mb.of_add_button(/*text*/ "Löschen", /*default*/ true, /*cancel*/ false)
lnv_mb.of_add_button(/*text*/ "Abbrechen", /*default*/ false, /*cancel*/ true)
// Modal anzeigen, dann auf die erste Schaltflaeche reagieren
if lnv_mb.of_show(/*hwnd*/ Handle(this)) = 1 then
of_delete()
// Die Wahl des Benutzers merken
ib_confirm_delete = not lnv_mb.of_checked()
end if
// Das Dialogobjekt freigeben
destroy lnv_mb
Schaltfläche mit Countdown #
// Das Dialogfeld konfigurieren
lnv_mb.is_title = "Neustart"
lnv_mb.is_icon = lnv_mb.ICON_INFORMATION
lnv_mb.is_message = "Die Anwendung wird neu gestartet, um das Update anzuwenden."
// "Weiter" bleibt 3 Sekunden lang grau (ein Zaehler wird angezeigt)
lnv_mb.of_add_button_timed(/*text*/ "Weiter", /*default*/ true, /*cancel*/ false, /*enable_secs*/ 3, /*click_secs*/ 0)
// "Spaeter" klickt sich nach 10 Sekunden von selbst
lnv_mb.of_add_button_timed(/*text*/ "Später", /*default*/ false, /*cancel*/ true, /*enable_secs*/ 0, /*click_secs*/ 10)
// Modal anzeigen
lnv_mb.of_show(/*hwnd*/ Handle(this))
Lange Meldung: die Größe begrenzen #
// Lokale Variablen
string ls_notes
// Ein umfangreicher Text : das Dialogfeld ist gedeckelt und der Text scrollt
ls_notes = Fill("Lorem ipsum dolor sit amet. ", 200)
lnv_mb.is_title = "Versionshinweise"
lnv_mb.is_message = ls_notes
lnv_mb.il_max_width = 480
lnv_mb.il_max_height = 320
// Die Schaltflaeche hinzufuegen, dann das Dialogfeld anzeigen
lnv_mb.of_add_button(/*text*/ "Schließen", /*default*/ true, /*cancel*/ true)
lnv_mb.of_show(/*hwnd*/ Handle(this))
Eine Instanz wiederverwenden #
// Eine Fensterinstanz, mehrere Dialoge : of_reset zwischen jedem Aufruf
inv_mb.of_reset() // loescht die Eigenschaften UND die vorherigen Schaltflaechen
// Das neue Dialogfeld konfigurieren und anzeigen
inv_mb.is_title = "Zweiter Dialog"
inv_mb.is_message = "Jedes of_reset beginnt wieder mit einem leeren Dialogfeld."
inv_mb.of_add_button(/*text*/ "OK", /*default*/ true, /*cancel*/ false)
inv_mb.of_show(/*hwnd*/ Handle(this))
Einen MessageBox()-Aufruf migrieren #
of_messagebox nimmt die Argumente von MessageBox() in derselben Reihenfolge, das Fenster vorneweg: Suchen und Ersetzen migriert einen Aufruf, und die gelieferten Werte sind dieselben.
// Lokale Variablen
n_pbt_messagebox lnv_mb
long ll_answer
// Das Dialogobjekt erzeugen
lnv_mb = create n_pbt_messagebox
// Die Argumente von MessageBox, das Fenster vorneweg : Nein ist die Standardschaltflaeche
ll_answer = lnv_mb.of_messagebox(/*hwnd*/ Handle(this), /*title*/ "Delete", /*text*/ "Delete the customer ?", /*icon*/ Question!, /*buttons*/ YesNo!, /*default*/ 2)
// Das Dialogobjekt freigeben
destroy lnv_mb
// Dieselben Zahlen wie MessageBox : 1 = Ja, 2 = Nein
if ll_answer = 1 then
of_delete()
end if
Eine Liste von Wahlen #
// Lokale Variablen
n_pbt_messagebox lnv_mb
string ls_format
// Das Dialogobjekt erzeugen
lnv_mb = create n_pbt_messagebox
// Die Frage, dann eine Wahl je Antwort : ein Schluessel, ein Titel, eine Beschreibung
lnv_mb.is_title = "Export"
lnv_mb.is_instruction = "How should the report leave ?"
lnv_mb.of_add_choice(/*key*/ "pdf", /*title*/ "PDF document", /*description*/ "One file, ready to send.")
lnv_mb.of_add_choice(/*key*/ "xlsx", /*title*/ "Excel workbook", /*description*/ "Figures stay figures.")
// Eine Wahl, die der Benutzer gerade nicht treffen kann : ausgegraut
lnv_mb.of_add_choice(/*key*/ "fax", /*title*/ "Fax", /*description*/ "No fax line is configured.", /*enabled*/ false)
// Die Wahlen mit einer einzigen Abbrechen-Schaltflaeche zeigen : der Schluessel kommt zurueck, "" bei Abbruch
ls_format = lnv_mb.of_choose(/*hwnd*/ Handle(this))
// Das Dialogobjekt freigeben
destroy lnv_mb
// Je nach Schluessel handeln
choose case ls_format
case "pdf"
of_export_pdf()
case "xlsx"
of_export_xlsx()
end choose
Nach einem Wert fragen #
// Lokale Variablen
n_pbt_messagebox lnv_mb
string ls_name
long ll_answer
// Das Dialogobjekt erzeugen
lnv_mb = create n_pbt_messagebox
// Eine Zeile : liefert das Getippte, "" wenn der Benutzer abbricht
ls_name = lnv_mb.of_prompt(/*hwnd*/ Handle(this), /*title*/ "Rename", /*message*/ "New name of the report :", /*default*/ "Sales 2026")
if ls_name <> "" then
of_rename(ls_name)
end if
// Ein Feld mit einer Regel : vier Ziffern, sonst bleibt OK ausser Reichweite
lnv_mb.of_reset()
lnv_mb.is_title = "PIN"
lnv_mb.ib_input = true
lnv_mb.is_input_label = "PIN code"
lnv_mb.is_input_pattern = "[0-9]{4}"
lnv_mb.is_input_error = "Four digits, please."
lnv_mb.of_add_button(/*text*/ "OK", /*default*/ true, /*cancel*/ false)
lnv_mb.of_add_button(/*text*/ "Cancel", /*default*/ false, /*cancel*/ true)
// of_show und dann of_input_value unterscheiden eine leere Antwort von einem Abbruch
ll_answer = lnv_mb.of_show(/*hwnd*/ Handle(this))
if ll_answer = 1 then
of_check_pin(lnv_mb.of_input_value())
end if
// Das Dialogobjekt freigeben
destroy lnv_mb
Ein Fehlerbericht: Anweisung, Details, Fußnote #
// Lokale Variablen
n_pbt_messagebox lnv_mb
long ll_answer
// Das Dialogobjekt erzeugen
lnv_mb = create n_pbt_messagebox
// Die kurze Geschichte : die Frage gross, ihre Folge darunter
lnv_mb.is_title = "Save failed"
lnv_mb.is_icon = n_pbt_messagebox.ICON_ERROR
lnv_mb.is_instruction = "The order could not be saved"
lnv_mb.is_message = "Another order already carries the number 4152."
// Die lange Geschichte, eingeklappt : Klartext, den der Support mit Strg+C kopiert
lnv_mb.is_details = "SQLSTATE = 23000~r~nViolation of PRIMARY KEY constraint 'pk_order'."
// Ein Hilfelink unter den Schaltflaechen, und das Dialogfeld in Rot
lnv_mb.is_footer = "Read [hyperlink=https://example.com/help]what to do[/hyperlink]."
lnv_mb.il_accent = RGB(/*red*/ 196, /*green*/ 43, /*blue*/ 28)
// Die Schaltflaechen hinzufuegen, dann das Dialogfeld anzeigen
lnv_mb.of_add_button(/*text*/ "&Retry", /*default*/ true, /*cancel*/ false)
lnv_mb.of_add_button(/*text*/ "Cancel", /*default*/ false, /*cancel*/ true)
ll_answer = lnv_mb.of_show(/*hwnd*/ Handle(this))
// Ein negativer Wert : kein Dialogfeld konnte angezeigt werden, der Grund bleibt erhalten
if ll_answer < 0 then
of_log(lnv_mb.of_get_last_error())
end if
// Das Dialogobjekt freigeben
destroy lnv_mb
Eine Wahl im Satz #
// Lokale Variablen
n_pbt_messagebox lnv_mb
// Das Dialogobjekt erzeugen
lnv_mb = create n_pbt_messagebox
// Eine [action]-Zone ist eine im Text selbst angebotene Antwort
lnv_mb.is_title = "Disk full"
lnv_mb.is_icon = n_pbt_messagebox.ICON_WARNING
lnv_mb.is_message = "The folder is full. [action=folder]Open the folder[/action] to make room."
lnv_mb.of_add_button(/*text*/ "Cancel", /*default*/ false, /*cancel*/ true)
// Die Zone schliesst das Dialogfeld : of_show liefert 0 und of_action ihre Id
if lnv_mb.of_show(/*hwnd*/ Handle(this)) = 0 and lnv_mb.of_action() = "folder" then
of_open_folder()
end if
// Das Dialogobjekt freigeben
destroy lnv_mb
Best Practices #
- Rufen Sie immer
of_reset()auf, bevor Sie eine wiederverwendete Instanz neu konfigurieren: Andernfalls werden die Schaltflächen des vorherigen Dialogs zu den neuen hinzugefügt. - Kennzeichnen Sie grundsätzlich eine Standard-Schaltfläche und eine Abbrechen-Schaltfläche: Wer die Tastatur benutzt, erwartet Eingabetaste und Esc.
- Prüfen Sie die positive Schaltfläche (
= 1), nie die negative:if of_yes_no(…) = 1 thenlöscht nur bei einem „Ja“. Das Dialogfeld hat kein Kreuz; ohne Abbrechen-Schaltfläche schließt Esc kein Ja/Nein-Dialogfeld. Mitib_closablewird der Wert0(ohne Auswahl geschlossen) wie ein Abbrechen behandelt. - Legen Sie bei einer zerstörenden Aktion die Standard-Schaltfläche auf Abbrechen (
of_confirm(…, 2)oder/*default*/ trueauf Abbrechen): Ein reflexhaftes Eingabe löscht nichts. - Eine Abkürzung (
of_info,of_error…) behält das vorher gesetzte Erscheinungsbild: ein rotesil_accentund dannof_errorergibt einen Fehler in Rot. - Übergeben Sie
Handle(this)(oderHandle(parent)) als aufrufendes Fenster: Das Dialogfeld zentriert sich darauf und die Modalität bezieht sich auf das richtige Fenster. - Reservieren Sie Rot und
ICON_ERRORfür echte Fehler; eine gewöhnliche Bestätigung verdientICON_QUESTION. - Für eine Information, die keinerlei Antwort erfordert, ziehen Sie eine nicht blockierende Benachrichtigung vor: siehe toaster.