| |
|
|
- Seite 1 - |
|
Nico Madysa | Es war ja nur eine Frage der Zeit: ich habe wieder mal Ärger mit Waitinput. Wir nehmen als Grundlage folgenden Code: KompilierenMarkierenSeparierendeclare 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. |
|
|
| |
|
|
|
| |
|
- Seite 1 - |
|
| |
|
| |
|
|
|
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! |
|
|
| |
|
|
|
| Ja mir gehts hundeehlend gut das mich keine sehen kann - aber danke! |
|
|
| |
|
|
|
Nico Madysa | Mahahaha, wieso hab eigentlich immer ich die ganzen Probleme mit Waitinput? KompilierenMarkierenSeparierendeclare 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. |
|
|
| |
|
|
|
| Hab grad ein bischen Zeit. So? KompilierenMarkierenSeparierendeclare 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
|
|
|
| |
|
|
|
| |
|
| |
|
|
|
GDL | Muss ich auch gleich ausprobieren.Ärgere mich mit nem RTF zurzeit grün und blau.
Servus Georg |
|
|
| |
|
|
|
Nico Madysa | Danke für die schnellen Hilfen, sobald ich wieder am eigenen Rechner sitze werde ichs ausprobieren. |
|
|
| |
|
|
|
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. |
|
|
| |
|
|
|
| |
|
| |
|
|
|
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 |
|
|
| |
|
|
| |
|
- Seite 2 - |
|
|
Nico Madysa | @iF: Hab ich mir auch schon gedacht, aber welche? Ich habe einiges probiert, alles ohne Erfolg.
@Uwe: Das ist es, sowas habe ich gesucht! Ich werde versuchen, es bis Freitag auszuprobieren um dann zu schreiben, obs geklappt hat!
Danke auf jeden Fall für eure (wie gewöhnt) schnellen Antworten! |
|
|
| |
|
|