Deutsch
Forum

Nicos neuer Waitinput-Thread

 

Nico
Madysa
Es war ja nur eine Frage der Zeit: ich habe wieder mal Ärger mit Waitinput.
Wir nehmen als Grundlage folgenden Code:
KompilierenMarkierenSeparieren
declare dlg& , on% , w%
on% = 0
cls
dlg&  = Create(Window,%hWnd ,Dialog,300,300,300,100)
ShowWindow(dlg&,on%)

whilenot IsKey(27)

    waitinput
    inc w%
    Locate 0 , 0
    print w%

    if IsKey(78)

        if on%

            ShowWindow(dlg&,0)
            on% = 0

        else

            ShowWindow(dlg&,1)
            on% = 1

        endif

        SetFocus(%hWnd) <---SetFocus-Zeile

    endif

wend

end

Er macht nichts anderes, als das ein Dialogfenster an-/ausgeschalten wird, allerdings in der selben Schleife wie das Hauptfenster läuft.
Das ist jetzt sehr schön, man drückt einmal N, der Dialog taucht auf; man drückt nochmal N und er verschwindet wieder.
Wenn man aber die SetFocus-Zeile(s. oben) entfernt, oder nach dem ersten N-Druck den Dialog anklickt, ist die Sache weniger lustig.
Man kann das N totdrücken ohne dass der Dialog wieder verschwindet. Und die Variable w% zeigt warum. Nach jedem Waitinput wird sie um 1 erhöht. Im Dialogfenster geschieht dies nicht.
Es ist unser altes Problem:
Das WaitInput reagiert nicht.

Anmerkung 1: Ich möchte jetzt keine APIs wie GetASyncKey oder so haben; es liegt nämlich definitiv nicht an der Tastenabfrage, sondern am waitinput.
Anmerkung 2: Das Problem habe ich nicht gesucht, sondern es trat in einem größerem Programm von mir auf; GetMessage kann ich nicht verwenden, da dann andere Dinge in meinem Programm nicht funktionieren würden.
 
Nico Madysa
29.12.2006  
 




KompilierenMarkierenSeparieren
 
29.12.2006  
 




Nico
Madysa
Danke, iF! Ich habe mir fast gedacht, dass sowas mit Usermessages geht, aber ich hab die Nummer der Message in der Profan.hlp nicht gefunden -_- (anstatt ich den Header verwende, aber auf sowas komme ich natürlich nicht...)
Allerdings taucht dabei ein neuer Fehler auf.
Wenn ein Button den Focus hat, reagiert das Programm beim Druck auf N nicht.
Stattdessen gibt der PC einen hübschen Klopfton mittels internem Lautsprecher von sich.
So allein ist das kein echtes Problem, aber dummerweise besteht diese mein komplettes Hauptfenster ein (Toolbar-Aussehen halt).
Wäre nicht ein Button deaktiviert gewesen(mittels EnableWindow) wäre ich wohl nicht dahinter gekommen. Denn wenn ich auf diesen klicke, hat keiner mehr den Focus, da er ihn ja nicht haben darf.

P.S.: Finde ich echt nett von dir, dass du dich trotz deiner bösen Erältung um die Probleme anderer kümmerst!
 
Nico Madysa
29.12.2006  
 



Ja mir gehts hundeehlend gut das mich keine sehen kann - aber danke!
 
29.12.2006  
 




Nico
Madysa
Mahahaha, wieso hab eigentlich immer ich die ganzen Probleme mit Waitinput?
KompilierenMarkierenSeparieren
declare dlg& , buta& , butb& , on% , w%
on% = 0
cls
buta& = Create(Button,%hWnd,Button 1,0,0,320,240)
butb& = Create(Button,%hWnd,Button 2,320,0,320,240)
EnableWindow butb& , 0
dlg& = Create(Window,%hWnd ,Dialog,300,300,300,100)
ShowWindow(dlg&,on%)

whilenot IsKey(27)

    waitinput
    inc w%
    Locate 0 , 0
    print w%

    if IsKey(78)

        if on%

            ShowWindow(dlg&,0)
            on% = 0

        else

            ShowWindow(dlg&,1)
            on% = 1

        endif

        SetFocus(%hWnd)<---SetFocus-Zeile

    endif

wend

end

Annähernd derselbe Code, wie der erste, nur das jetzt zwei Buttons das Hauptfenster belegen; ein normaler und ein deaktivierter.
Sobald das Programm gestartet hat, machen wir folgendes: Wir drücken zweimal auf N und, wie erwartet, erscheint der Dialog und verschwindet wieder. Nun klicken wir auf den ersten Button, sodass er den Focus bekommt und drücken wieder N und -
nichts passiert. Hat ein Button also den Focus, scheint Waitinput wiedermal nicht zu reagieren. Klicken wir dagegen auf den deaktivierten Button, so verscheindet der Focus, da ein deaktiviertes Control ja keinen Focus haben darf, und - tada! - Der Dialog erscheint mit einem Druck auf N wieder.
Ich habe das Problem in meinem Programm erstmal mit der Zeile
KompilierenMarkierenSeparieren
aber wirklich zufrieden bin ich damit nicht.

Hat jemand die Lösung des Problems? Ist es meine Schuld oder die von XProfan?
Ich habe dummerweise nur im Verlauf der letzten Woche damit experimentiert und kann daher auch nur sagen, dass es wahrscheinlich nicht am Dialogfensterstil meines Hauptfensters liegt.
 
Nico Madysa
03.02.2007  
 



Hab grad ein bischen Zeit. So?
KompilierenMarkierenSeparieren
declare dlg& , buta& , butb& , on% , w%
on% = 0
cls
buta& = Create(Button,%hWnd,Button 1,0,0,320,240)
butb& = Create(Button,%hWnd,Button 2,320,0,320,240)
EnableWindow butb& , 0
dlg& = Create(Window,%hWnd ,Dialog,300,300,300,100)
ShowWindow(dlg&,on%)

whilenot IsKey(27)

    WaitInputEx
    inc w%
    Locate 0 , 0
    print w%

    if IsKey(78)

        if on%

            ShowWindow(dlg&,0)
            on% = 0

        else

            ShowWindow(dlg&,1)
            on% = 1

        endif

        SetFocus(%hWnd)<---SetFocus-Zeile

    endif

wend

end

Proc WaitInputEx Erweitertes Waitinput für Dialoge von AH

    Declare AHWait_Counter%
    Clear AHWait_Counter%

    While AHWait_Counter%<25

        inc AHWait_Counter%

    wend

    @External(USER32,MsgWaitForMultipleObjects,0,0,0,-1,$1 | $4 | $10)
    Clear AHWait_Counter%

    While AHWait_Counter%<25

        inc AHWait_Counter%

    wend

endproc

 
03.02.2007  
 



Das profanste wäre es wohl
KompilierenMarkierenSeparieren
addhotkey 4001,78,0
oben anzufügen und statt
KompilierenMarkierenSeparieren
if IsKey(78)

einfach
KompilierenMarkierenSeparieren
if (%menuitem=4001)

zu schreiben.
 
03.02.2007  
 




GDL
Muss ich auch gleich ausprobieren.Ärgere mich mit nem RTF zurzeit grün und blau.

Servus
Georg
 
Windows7 Xprofan 8,9,10 [...]  [...] 
03.02.2007  
 




Nico
Madysa
Danke für die schnellen Hilfen, sobald ich wieder am eigenen Rechner sitze werde ichs ausprobieren.
 
Nico Madysa
04.02.2007  
 




Nico
Madysa
Tschuldigung, hab leider vergessen, zu sagen, dass die Hotkey-Variante geklappt hat.
Momentan habe ich wieder mal Ärger mit dem Waitinput und der XProfan-internen Messageverwaltung.
Aus bestimmten Gründen bin ich nun gezwungen, mehrere Controls einem Static oder meinetwegen einer GroupBox direkt unterzuordnen. Wie bereits desöfteren erwähnt, reagiert Profan auf Eingaben in sochen Enkelfenstern (Kindfenster der Kindfenster) nicht mehr so, wie man es gern hätte. Gibt es da eine API oder einen anderen Trick, um z.B. die Messages in das Hauptfenster umzuleiten oder etwas in der Art? Die Win32.hlp hat mir bisher keine Hilfe geben wollen.

P.S.: Es geht hier speziell um ein ReBar-Control (Auch unter dem Namen Docksplitter bekannt) Ich möchte hier einem ReBar-Band mehrere Controls zuweisen.
 
Nico Madysa
12.06.2007  
 



UserMessages 
 
12.06.2007  
 




Uwe
''Pascal''
Niemeier
Hallo Nico!

Verwende statt Groupbox oder Static einen rahmenlosen Dialog, etwa in dieser Art:

  
Dlg&=control(Dialog,Dlg1,$50000000,0,0,Breit%,Hoch%,%hwnd,1,0)

Hat sich bei mir bewährt, wobei Breite und Höhe bei Verwendung in Rebars nicht mal gesetzt werden müssen.

HTH
Pascal
 
12.06.2007  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

1.297 Betrachtungen

Unbenanntvor 0 min.
H.Brill07.05.2024
Peter Max Müller13.11.2017
Joerg28.04.2016
Unbenannt16.05.2012

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