Seite 1 von 1

Message nur mit Timeout ausgeben [erledigt]

Verfasst: Di, 22. Feb 2022 12:42
von Ewald
Tag zusammen,
ich möchte im Programmablauf eine Warnung/Message in der gezeigten Art zeigen.
Allerdings soll der User keine Möglichkeit haben das Fenster mit einem Klick zu schließen.
Der OK Button soll weg und das Fenster soll erst nach timeout verschwinden.
Übersehe ich da einen Parameter der den Button verschwinden läßt ? Oder bleibt mir nur
die Möglichkeit einer eigenen Funktion ?

Gruß
Ewald

Code: Alles auswählen

dcmsgbox "Lizenzfehler"                  ;
         color GRA_CLR_BLUE,GRA_CLR_RED ;
         title "License expired"                      ;
         timeout 1

Re: Message nur mit Timeout ausgeben

Verfasst: Di, 22. Feb 2022 13:52
von Tom
Das kannst Du mit Custom-Buttons und der Buttonsize 0,0 hinbekommen, hier als Funktionsaufruf (10 Sekunden Wartezeit). Das gleiche geht als Kommando (dort dann die Klausel "BUTTONSIZE" verwenden).

Code: Alles auswählen

DC_MsgBox(10,10,{'Juhu.','Super-Juhu'},'Test',.f.,10,.F.,,{'nonono'},,,,,,,,,,{0,0})
Mit dem X kann die Messagebox natürlich trotzdem geschlossen werden.

Re: Message nur mit Timeout ausgeben

Verfasst: Di, 22. Feb 2022 14:25
von Ewald
Hallo Tom,
das kommt der Sache nahe. Danke dafür.
Aber das X muss noch weg. Wenn ich da nicht fündig bastele ich eine Funktion mit eigenem Fenster. Wollte nur das Rad nicht neu erfinden.

Re: Message nur mit Timeout ausgeben

Verfasst: Di, 22. Feb 2022 14:48
von Tom
Du kannst mit DC_GetOptDefault() eine Reihe von DCGETOPTIONS (z.B. NOTITLEBAR) festlegen, die dann mit DC_MsgBoxExpress() für die DC_MsgBoxen festgelegt werden.

Re: Message nur mit Timeout ausgeben

Verfasst: Di, 22. Feb 2022 14:59
von Tom
Davon abgesehen ist es natürlich nahezu kein Aufwand, einen kleinen Dialog zu schreiben, der nur einen Text sozusagen im Nichts (je nach "BORDER") anzeigt und von selbst wieder verschwindet:

Code: Alles auswählen

FUNCTION ShowMsg(c)
LOCAL GetList := {}, GetOptions := {}
DCGET OPTIONS NOTITLEBAR NORESIZE NOTASKLIST NOMAXBUTTON BORDER XBPDLG_NO_BORDER

@ 0,0 DCSAY c // hier ggf. noch SAYOPTIONS für die Formatierung

DCREAD GUI OPTIONS GetOptions TIMEOUT {5,{||.T.}} FIT MODAL
RETURN NIL

Re: Message nur mit Timeout ausgeben

Verfasst: Di, 22. Feb 2022 15:04
von Ewald
Das stimmt natürlich was du sagst. Und jetzt muss ich das Rad auch nicht mehr neu erfinden :wink:
Danke
Ewald

Re: Message nur mit Timeout ausgeben [erledigt]

Verfasst: Di, 22. Feb 2022 15:44
von Tom
Gerne!

Und wenn Du mit SAYOPTIONS und FORMATTED arbeitest, kannst Du auch noch Hervorhebungen im Text verwenden und ggf. mehrzeilig arbeiten. Der hier verschwindet wirklich nach n Sekunden, im Beispiel fehlte noch was.

Code: Alles auswählen

ShowMsg('Dieser Text hat einen \bhervorgehobenen\c Anteil')

Code: Alles auswählen

FUNCTION ShowMsg(c,nSecs)
LOCAL GetList := {}, GetOptions := {}, oDialog
DEFAULT nSecs := 5

DCGET OPTIONS NOTITLEBAR NORESIZE NOTASKLIST NOMAXBUTTON BORDER XBPDLG_NO_BORDER

@ 0,0 DCSAY c FORMATTED SAYOPTIONS XBPALIGN_HCENTER+XBPALIGN_VCENTER

DCREAD GUI OPTIONS GetOptions TIMEOUT {nSecs,{||.T.}} FIT MODAL PARENT @oDialog
RETURN NIL

Re: Message nur mit Timeout ausgeben [erledigt]

Verfasst: Di, 22. Feb 2022 16:40
von Ewald
In deinem ersten Beispiel verschwindet er auch nach n Sekunden.