Deutsch
Forum

UserMessages $10 Runtime Interpreter

 
- Seite 1 -



Jörg
Sellmeyer
Nachtrag: mit eingebautem WaitInput 5 funktioniert es jetzt wie erwartet.

Ich muss schon wieder nerven...

Folgender Code macht im Interpretermodus genau das, was ich erwarte und was aus dem Code eigentlich ersichtlich sein sollte

In compilierter Form stirbt das komplette Programm aber nach dem Klick aufs Kreuz eines Dialoges.
Declare Dlg&[],x%,y%
WindowStyle %11110
UserMessages $10
Cls
WindowTitle "Hauptfenster " + Str$(%hwnd)
x% = %winleft + 100
y% = %wintop + 120

WhileLoop 0,3

    Inc x% ,30
    Inc y%, 40
    Dlg&[&Loop] = Create("Dialog",%hwnd,"" + Str$(&Loop +1),x%,y%,400,300)
    Settext Dlg&[&Loop],"Test " + Str$(&Loop + 1) + " | " + Str$(Dlg&[&Loop])
    Create("Button",Dlg&[&Loop],"Test",50,50,100,30)

Wend

While 1

    WaitInput
    Case %key = 27:Break' "ESC"

    If %umessage = $10

        If GetFocus(%hwnd)

            Break

        ElseIf ClassOf(GetActiveWindow()) = "#32770"

            WhileLoop 0,SizeOf(Dlg&[]) - 1

                If GetActiveWindow() = Dlg&[&Loop]

                    Print GetText$(Dlg&[&Loop]) + " beendet"
                    Setfocus(%hwnd)
                    DestroyWindow(Dlg&[&Loop])
                    'nachdem ich das WaitInput eingebaut habe, klappt es
                    'ich erinnererte mich, dass das compilierte Programm die Messageschleife nur jedes x-te Mal abruft.
                    WaitInput 5
                    Break

                EndIf

            Wend

            Continue

        EndIf

    ElseIf GetText$(%getfocus) = "Test"

        Print "Button",ItemId(%getfocus),"gedrückt"

    EndIf

    Case %Umessage = $10:Print "Das hier sollte nie zu sehen sein!"

Wend

Print "Hauptprogramm beendet"
WaitInput
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
02.06.2018  
 



« Dieser Beitrag wurde als Lösung gekennzeichnet. »


Jörg
Sellmeyer
Meine Version steht in der Signatur. Das Problem ist, dass ohne WaitInput nach %umessage = $10, das Programm beendet wird, auch wenn nur auf einem Dialogfenster das Schließen-Kreuz betätigt wird.
Außerdem wird das Hauptfenster nicht richtig aktiviert, wenn ein Dialog aktiv ist, und man dann das Kreuz im Hauptfenster klickt.

Ich hab es jetzt so gelöst, dass ich die Abfrage umgestellt hab und gleichzeit beim Hauptfenster noch auf &mwnd chcke. Damit funktioniert es für mich zufriedenstellend.
Declare Dlg&[],x%,y%
WindowStyle %11110 | 512
UserMessages $10
Cls
WindowTitle "Hauptfenster " + Str$(%hwnd)
x% = %winleft + 100
y% = %wintop + 120

WhileLoop 0,3

    Inc x% ,30
    Inc y%, 40
    Dlg&[&Loop] = Create("Dialog",%hwnd,"" + Str$(&Loop +1),x%,y%,400,300)
    Settext Dlg&[&Loop],"Test " + Str$(&Loop + 1) + " | " + Str$(Dlg&[&Loop])
    Create("Button",Dlg&[&Loop],"Test",50,50,100,30)

Wend

Print "%GetFocus,GetActiveWindow(),%message,&lparam,&wparam"

While 1

    WaitInput
    Case %key = 27:Break' "ESC"

    If %umessage = $10

        If ClassOf(GetActiveWindow()) = "#32770"

            WhileLoop 0,SizeOf(Dlg&[]) - 1

                If GetActiveWindow() = Dlg&[&Loop]

                    Print GetText$(Dlg&[&Loop]) + " beendet"
                    DestroyWindow(Dlg&[&Loop])
                    WaitInput 5
                    Break

                EndIf

            Wend

            Continue

        ElseIf GetFocus(%hwnd) Or (%mwnd = %hwnd)

            Break

        EndIf

    ElseIf GetText$(%getfocus) = "Test"

        Print "Button",ItemId(%getfocus),"gedrückt"

    EndIf

    Case %Umessage = $10:Print "Das hier sollte nie zu sehen sein!"

Wend

Print "Hauptprogramm beendet"
WaitInput
 
XProfan X3
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
03.06.2018  
 




H.Brill
Bei mir funktioniert es compiliert, ob nur mit WaitInput oder auch
mit WaitInput 5. Hab es jetzt aber nur mit XProfan X4 probiert.

Mit welcher Version hast du probiert ?

PS:
Eine Zeile verstehe ich nicht ganz :

Wo hast du denn die "#32770" her ?

Ist das eine feste Dialog-Ressource in der Runtime ?
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
03.06.2018  
 




Jörg
Sellmeyer
Meine Version steht in der Signatur. Das Problem ist, dass ohne WaitInput nach %umessage = $10, das Programm beendet wird, auch wenn nur auf einem Dialogfenster das Schließen-Kreuz betätigt wird.
Außerdem wird das Hauptfenster nicht richtig aktiviert, wenn ein Dialog aktiv ist, und man dann das Kreuz im Hauptfenster klickt.

Ich hab es jetzt so gelöst, dass ich die Abfrage umgestellt hab und gleichzeit beim Hauptfenster noch auf &mwnd chcke. Damit funktioniert es für mich zufriedenstellend.
Declare Dlg&[],x%,y%
WindowStyle %11110 | 512
UserMessages $10
Cls
WindowTitle "Hauptfenster " + Str$(%hwnd)
x% = %winleft + 100
y% = %wintop + 120

WhileLoop 0,3

    Inc x% ,30
    Inc y%, 40
    Dlg&[&Loop] = Create("Dialog",%hwnd,"" + Str$(&Loop +1),x%,y%,400,300)
    Settext Dlg&[&Loop],"Test " + Str$(&Loop + 1) + " | " + Str$(Dlg&[&Loop])
    Create("Button",Dlg&[&Loop],"Test",50,50,100,30)

Wend

Print "%GetFocus,GetActiveWindow(),%message,&lparam,&wparam"

While 1

    WaitInput
    Case %key = 27:Break' "ESC"

    If %umessage = $10

        If ClassOf(GetActiveWindow()) = "#32770"

            WhileLoop 0,SizeOf(Dlg&[]) - 1

                If GetActiveWindow() = Dlg&[&Loop]

                    Print GetText$(Dlg&[&Loop]) + " beendet"
                    DestroyWindow(Dlg&[&Loop])
                    WaitInput 5
                    Break

                EndIf

            Wend

            Continue

        ElseIf GetFocus(%hwnd) Or (%mwnd = %hwnd)

            Break

        EndIf

    ElseIf GetText$(%getfocus) = "Test"

        Print "Button",ItemId(%getfocus),"gedrückt"

    EndIf

    Case %Umessage = $10:Print "Das hier sollte nie zu sehen sein!"

Wend

Print "Hauptprogramm beendet"
WaitInput
 
XProfan X3
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
03.06.2018  
 




Michael
W.
@H.Brill

Gefunden in  [...] 


The following table describes the system classes that are available only for use by the system. They are listed here for completeness sake.

ClassDescription
ComboLBoxThe class for the list box contained in a combo box.
DDEMLEventThe class for Dynamic Data Exchange Management Library (DDEML) events.
MessageThe class for a message-only window.
#32768The class for a menu.
#32769The class for the desktop window.
#32770The class for a dialog box.
#32771The class for the task switch window.
#32772The class for icon titles.

 
System: Windows 8/10, XProfan X4
Programmieren, das spannendste Detektivspiel der Welt.
08.06.2018  
 




H.Brill
Danke für die Info.
Ich dachte immer, es gäbe nur Klassennamen,
die für sich selbst sprechen, etwa Button, Window usw.
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
08.06.2018  
 




Michael
W.
Findest Du im gleichen Artikel.

Es ist allerdings ein Mischmasch, der da zurückgegeben wird. Getreu dem Motto: Warum soll ich da 2 Variablen nutzen, wenn ich alles in einer unterbringen kann. Der Anwender wird schon wissen, was er da gerade zugewiesen hat.
 
Alle Sprachen
System: Windows 8/10, XProfan X4
Programmieren, das spannendste Detektivspiel der Welt.
08.06.2018  
 




H.Brill
Hallo Jörg,
Ich habe nochmals mehrere Male einiges ausprobiert.
Dabei mußte ich öfter den Taskmanager benutzen,
um mein Programm abzuschießen.

Wie es aussieht, scheint das an dem gerade aktiven
Fenster zu liegen. Folgendes scheint so zu laufen, wie
gewünscht :
Declare Dlg&[],x%,y%
UserMessages $10
Cls
WindowTitle "Hauptfenster  Beenden mit ESC " + Str$(%hwnd)
x% = %winleft + 100
y% = %wintop + 120

WhileLoop 0,3

    Inc x% ,30
    Inc y%, 40
    Dlg&[&Loop] = Create("Dialog",%hwnd,"" + Str$(&Loop +1),x%,y%,400,300)
    Settext Dlg&[&Loop],"Test " + Str$(&Loop + 1) + " | " + Str$(Dlg&[&Loop])
    Create("Button",Dlg&[&Loop],"Test",50,50,100,30)

EndWhile

While 1

    WaitInput
    Case %key = 27 : Break' "ESC"

    If %UMessage = $10

        WhileLoop 0,SizeOf(Dlg&[]) - 1

            If &UWnd = Dlg&[&Loop]

                DestroyWindow(Dlg&[&Loop])
                Print "Dialoghandle : ", Dlg&[&LOOP], " ist beendet !"

            EndIf

        EndWhile

        SetActiveWindow(%HWnd)

    EndIf

    If GetText$(%getfocus) = "Test"

        Print "Button",ItemId(%getfocus),"gedrückt"

    EndIf

Wend

Print "Hauptprogramm beendet !"
WaitInput 2000
DestroyWindow(%HWnd)
End

Würde das deinen Vorstellungen entsprechen ?

PS:
Normalerweise mache ich für jeden Dialog eine Proc
und behandle den Dialog in einer Schleife und einem
Waitinput. Halt so, wie es Roland auch in der Hilfe
schreibt.
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
08.06.2018  
 




Jörg
Sellmeyer
Bei meinem Programm werden die Dialoge zur Laufzeit erstellt, ohne dass ich Einfluss auf Anzahl oder Titel nehmen will. Eine Proc pro Dialog kommt also nicht in Frage. Ich werde deinen Vorschlag mal testen, bin aber mit meiner Lösung auch zufrieden, da durch das nochmalige WaitInput die UserMessage zurückgesetzt wird und nicht mehr im Hauptprogramm ankommt.
 
XProfan X4
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
09.06.2018  
 




Michael
W.
UserMessages können mit -Nr
auch zurückgesetzt und dann erneut gesetzt werden
 
Alle Sprachen
System: Windows 8/10, XProfan X4
Programmieren, das spannendste Detektivspiel der Welt.
09.06.2018  
 




Jörg
Sellmeyer
Hab ich alles ausprobiert, ohne dass es zuverlässig funktioniert hat. Liegt eben dran, dass die Runtime die Messageschleife seltener pollt, als der Interpreter.
 
XProfan X4
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
09.06.2018  
 




H.Brill
Ja, scheint wohl an XProfans Messagehandling zu liegen.
Bei meinem Code oben kommt nach Schließen aller Dialoge
die wm_close - Nachricht auch nicht mehr zum Hauptfenster.

Da müßte man probieren, ob man mit Abschalten der internen
Messageverarbeitung mit Set("FastMode", 1) und GetMessage
weiter kommt. Auch Dialoge sind nicht ideal, da sie normalerweise
auf $10 nicht automatisch reagieren.

Da bietet XProfan ja noch mehr Möglichkeiten.
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
09.06.2018  
 




H.Brill
So scheint es sauber (auch als .exe) zu laufen :
Declare Dlg&[],x%,y%
UserMessages $10
Cls
WindowTitle "Hauptfenster  Beenden mit ESC " + Str$(%hwnd)
x% = %winleft + 100
y% = %wintop + 120

WhileLoop 0,3

    Inc x% ,30
    Inc y%, 40
    Dlg&[&Loop] = Create("Window",%hwnd,"" + Str$(&Loop +1),x%,y%,400,300)
    Settext Dlg&[&Loop],"Test " + Str$(&Loop + 1) + " | " + Str$(Dlg&[&Loop])
    Create("Button",Dlg&[&Loop],"Test",50,50,100,30)

EndWhile

While 1

    WaitInput
    Case %key = 27 : Break' "ESC"

    If %UMessage = $10

        WhileLoop 0,SizeOf(Dlg&[]) - 1

            If &UWnd = Dlg&[&Loop]

                DestroyWindow(Dlg&[&Loop])
                Print "Dialoghandle : ", Dlg&[&LOOP], " ist beendet !"
                Break

            EndIf

        EndWhile

        Case &UWnd = %HWnd : Break
        SetActiveWindow(%HWnd)

    EndIf

    If GetText$(%getfocus) = "Test"

        Print "Button",ItemId(%getfocus),"gedrückt"

    EndIf

Wend

Print "Hauptprogramm beendet !"
WaitInput 2000
DestroyWindow(%HWnd)
End
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
09.06.2018  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

9.586 Betrachtungen

Unbenanntvor 0 min.
Stringray05.01.2022
Michael Hettner02.09.2021
p.specht15.12.2020
iF31.10.2020
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie