Fuente/ Codesnippets | | | | - Página 1 - |
| RudiB. | ¡Hola zusammen,
habe veces otra vez una Cuestión.
kann Yo während des SLEEP's una Abbruch de Sleep erzwingen ? z.B. con wm_Timer Función ?? |
| | | Xprofan X4 Rudolf Beske / München
Hardware: NB Intel I9 - 16GByte RAM | 28.04.2020 ▲ |
| |
| | « Dieser Contribución wurde como Solución gekennzeichnet. » | | Georg Teles | Posesiones algo rumgespielt, hier bastante simpel
Declarar e%, oWndProc&
Declarar neu%, final%
Declarar trigger&, wartezeit&
Declarar frage%, antwort%
Declarar frage$, antwort$
Declarar zeit%
Def GetWindowLong(2)!"USER32","GetWindowLongA"
Def SetWindowLong(3)!"USER32","SetWindowLongA"
Def KillTimer32(2)!"USER32","KillTimer"
Def SetTimer32(4)!"USER32","SetTimer"
CLS
frage$ = "Frage: Wieviel es 44 * 5 ?"
antwort$ = "Lösung: 220"
frage% = Crear("Text",%hWnd,frage$,5,5,255,20)
antwort% = Crear("Text",%hWnd,"Lösung:",5,30,255,20)
zeit% = Crear("Text",%hWnd,"",100,61,65,20)
neu% = Crear("Button",%hWnd,"näch. Frage",5,60,90,20)
beenden% = Crear("Button",%hWnd,"beenden",170,60,90,20)
Proc tmpr
Inc wartezeit&
If trigger& = 1
SetText antwort%,antwort$+" (por ESC ausgelöst)"
wartezeit& = 0
SetText zeit%,""
Más
SetText zeit%,Str$(10-(wartezeit&)\3)+" Sek."
EndIf
If wartezeit& >= 3*10
SetText antwort%,antwort$+" (Wartezeit vorbei)"
wartezeit& = 0
SetText zeit%,""
EndIf
ENDPROC
SetTimer32(%hWnd,1,333,ProcAddr("tmpr",0))
oWndProc& = GetWindowLong(%hWnd,-4)
Claro e%, trigger&, wartezeit&
Sinestar encargado e%
Waitinput
' Trigger auslösen
If (%Key = 27) or (%Key = 2)
locate 1,1
trigger& = 1
EndIf
' nächste Cuestión + Trigger en 0
If Clicked(neu%)
frage$ = "Frage: Hauptstadt de Deutschland ?"
antwort$ = "Lösung: Berlin"
SetText frage%,frage$
SetText antwort%,"Lösung:"
Claro trigger&, wartezeit&
SetFocus(%hWnd)
EndIf
' Programa direkt final
If Clicked(final%)
Inc e%
EndIf
EndWhile
KillTimer32(%hWnd,1)
SetWindowLong(%hWnd,-4,oWndProc&)
hier con Arrays como Cuestión/Solución
Declarar e%, oWndProc&
Declarar neu%, final%
Declarar trigger&, wartezeit&
Declarar frage%, antwort%
Declarar fragen$, antworten$
Declarar frage$[], antwort$[]
Declarar zufall&, zeit%
Def GetWindowLong(2)!"USER32","GetWindowLongA"
Def SetWindowLong(3)!"USER32","SetWindowLongA"
Def KillTimer32(2)!"USER32","KillTimer"
Def SetTimer32(4)!"USER32","SetTimer"
Selección aleatoria
CLS
fragen$ = "Wieviel es 44 * 5 ?;Hauptstadt de Deutschland ?;2^4 - 2 ?;Wurzel de 27 ?"
antworten$ = "220;Berlin;14;3"
frage$[] = explode(fragen$,";")
antwort$[] = explode(antworten$,";")
zufall& = Rnd(4)
frage% = Crear("Text",%hWnd,frage$[zufall&],5,5,255,20)
antwort% = Crear("Text",%hWnd,"",5,30,700,20)
zeit% = Crear("Text",%hWnd,"",100,61,65,20)
neu% = Crear("Button",%hWnd,"näch. Frage",5,60,90,20)
beenden% = Crear("Button",%hWnd,"beenden",170,60,90,20)
Proc tmpr
Inc wartezeit&
If trigger& = 1
SetText antwort%,antwort$[zufall&]+" (por ESC ausgelöst) o Wartezeit vorbei s. \qAUSLÖSER\q"
wartezeit& = 0
SetText zeit%,""
Más
SetText zeit%,Str$(10-(wartezeit&)\3)+" Sek."' de 10 Sekunden Tiempo abziehen
EndIf
If wartezeit& >= 3*10' 10 Sekunden
' así el Tiempo no mehr rückwärts se ejecuta, kann dieser Schritt ausgelassen y ser
' sólo trigger = 1 gesetzt, como Solución auch Oben adecuado se, siehe oben
trigger& = 1'AUSLÖSER
'SetText antwort%,antwort$[zufall&]+" (Wartezeit vorbei)"
'wartezeit& = 0
'SetText zeit%,""
EndIf
ENDPROC
SetTimer32(%hWnd,1,333,ProcAddr("tmpr",0))
oWndProc& = GetWindowLong(%hWnd,-4)
Claro e%, trigger&, wartezeit&
Sinestar encargado e%
Waitinput
' Trigger auslösen
If (%Key = 27) or (%Key = 2)
locate 1,1
trigger& = 1
EndIf
' nächste Cuestión + Trigger en 0
If Clicked(neu%)
zufall& = Rnd(4)
SetText frage%, frage$[zufall&]
SetText antwort%,""
Claro trigger&, wartezeit&
SetFocus(%hWnd)
EndIf
' Programa direkt final
If Clicked(final%)
Inc e%
EndIf
EndWhile
KillTimer32(%hWnd,1)
SetWindowLong(%hWnd,-4,oWndProc&)
Tal vez kannst Usted algo así anfangen
Grüße Georg |
| | | | | |
| | RudiB. | Sombrero se ya hecho...
Posesiones una solución gefunden en más rápido / Rápidamente de el Sleep rauszukommen.
|
| | | | |
| | Georg Teles | Bueno Tag,
aah ha se hecho weiß' sí no, qué du antes hast, pero yo hatte una Vorschlag, wo du rumexperementieren kannst
Declarar e%, t&, oWndProc&
Def GetWindowLong(2)!"USER32","GetWindowLongA"
Def SetWindowLong(3)!"USER32","SetWindowLongA"
Def KillTimer32(2)!"USER32","KillTimer"
Def SetTimer32(4)!"USER32","SetTimer"
Proc tmpr
Localizar 1,1
imprimir time$(0);":";time$(1);" - ESC drücken, en Temporizador a beenden"
imprimir "verschiebe Ventana, Temporizador aktualisiert todavía esta Text"
ENDPROC
CLS
var Button% = Crear("Button",%hWNd,"teste",20,50,100,20)
t& = SetTimer32(%hWnd,1,333,ProcAddr("tmpr",0))
oWndProc& = GetWindowLong(%hWnd,-4)
Claro e%
Sinestar encargado e%
Waitinput
If (%Key = 27) or (%Key = 2)
Localizar 1,1
'Case t&:KillTimer32(%hWnd,1)
If t& = 1
KillTimer32(%hWnd,1)
t& = 0
EndIf
imprimir space$(23)+"ABBRUCH"+space$(23)
'Inc e% '= ENDE
EndIf
'-------------------------------------------------
If t& = 0
' tu qué, si Temporizador weg es
EndIf
' eleganter hier, si Button UND Temporizador = 1
If (Clicked(Button%)) AND (t& = 1)
locate 5,20
imprimir "nix geschieht"
SetFocus(%hWnd)
EndIf
' eleganter hier, si Button UND Temporizador = 0
If (Clicked(Button%)) AND (t& = 0)
locate 5,20
imprimir "was ahora? (X oben rechts en a final)"
EndIf
EndWhile
SetWindowLong(%hWnd,-4,oWndProc&)
Grüße |
| | | | |
| | RudiB. | nun sí, Yo escribir gerade a eimem Vokabe-Trainer. Un Función es hier sólo como en uno "Dia-Show" ...Vokabel se adecuado y anschliessend después de uno einstellbaren Pause (zw. 1 y 10 sek.) se el Antwort eingeblendet. So ha uno eben una gewisse Tiempo el Antwort a überlegen. Weiß uno el Antwort aber inmediatamente, entonces se el User pero no necesariamente el volle Pausenzeit "absitzen" necesario. Also fuera de el Pause....con ESC, danach sólo más ... Daher Yo sólo el Pausenzeit verkürzt y una Whileloop-Bucle gelegt. Vorher 10 sek. Pause al Stück y así entonces sólo aufgeteilt en 20*0,5sek. con el möglichkeit con ESC auszusteigen.
Aber Su Solución es wirklich Super y voluntad esta Solución veces ausgiebig testen y Sicherheit auch con einbauen. Wesentlich eleganter....
Gracias Usted Georg
Saludo de München Rudi |
| | | | |
| | Georg Teles | Posesiones algo rumgespielt, hier bastante simpel
Declarar e%, oWndProc&
Declarar neu%, final%
Declarar trigger&, wartezeit&
Declarar frage%, antwort%
Declarar frage$, antwort$
Declarar zeit%
Def GetWindowLong(2)!"USER32","GetWindowLongA"
Def SetWindowLong(3)!"USER32","SetWindowLongA"
Def KillTimer32(2)!"USER32","KillTimer"
Def SetTimer32(4)!"USER32","SetTimer"
CLS
frage$ = "Frage: Wieviel es 44 * 5 ?"
antwort$ = "Lösung: 220"
frage% = Crear("Text",%hWnd,frage$,5,5,255,20)
antwort% = Crear("Text",%hWnd,"Lösung:",5,30,255,20)
zeit% = Crear("Text",%hWnd,"",100,61,65,20)
neu% = Crear("Button",%hWnd,"näch. Frage",5,60,90,20)
beenden% = Crear("Button",%hWnd,"beenden",170,60,90,20)
Proc tmpr
Inc wartezeit&
If trigger& = 1
SetText antwort%,antwort$+" (por ESC ausgelöst)"
wartezeit& = 0
SetText zeit%,""
Más
SetText zeit%,Str$(10-(wartezeit&)\3)+" Sek."
EndIf
If wartezeit& >= 3*10
SetText antwort%,antwort$+" (Wartezeit vorbei)"
wartezeit& = 0
SetText zeit%,""
EndIf
ENDPROC
SetTimer32(%hWnd,1,333,ProcAddr("tmpr",0))
oWndProc& = GetWindowLong(%hWnd,-4)
Claro e%, trigger&, wartezeit&
Sinestar encargado e%
Waitinput
' Trigger auslösen
If (%Key = 27) or (%Key = 2)
locate 1,1
trigger& = 1
EndIf
' nächste Cuestión + Trigger en 0
If Clicked(neu%)
frage$ = "Frage: Hauptstadt de Deutschland ?"
antwort$ = "Lösung: Berlin"
SetText frage%,frage$
SetText antwort%,"Lösung:"
Claro trigger&, wartezeit&
SetFocus(%hWnd)
EndIf
' Programa direkt final
If Clicked(final%)
Inc e%
EndIf
EndWhile
KillTimer32(%hWnd,1)
SetWindowLong(%hWnd,-4,oWndProc&)
hier con Arrays como Cuestión/Solución
Declarar e%, oWndProc&
Declarar neu%, final%
Declarar trigger&, wartezeit&
Declarar frage%, antwort%
Declarar fragen$, antworten$
Declarar frage$[], antwort$[]
Declarar zufall&, zeit%
Def GetWindowLong(2)!"USER32","GetWindowLongA"
Def SetWindowLong(3)!"USER32","SetWindowLongA"
Def KillTimer32(2)!"USER32","KillTimer"
Def SetTimer32(4)!"USER32","SetTimer"
Selección aleatoria
CLS
fragen$ = "Wieviel es 44 * 5 ?;Hauptstadt de Deutschland ?;2^4 - 2 ?;Wurzel de 27 ?"
antworten$ = "220;Berlin;14;3"
frage$[] = explode(fragen$,";")
antwort$[] = explode(antworten$,";")
zufall& = Rnd(4)
frage% = Crear("Text",%hWnd,frage$[zufall&],5,5,255,20)
antwort% = Crear("Text",%hWnd,"",5,30,700,20)
zeit% = Crear("Text",%hWnd,"",100,61,65,20)
neu% = Crear("Button",%hWnd,"näch. Frage",5,60,90,20)
beenden% = Crear("Button",%hWnd,"beenden",170,60,90,20)
Proc tmpr
Inc wartezeit&
If trigger& = 1
SetText antwort%,antwort$[zufall&]+" (por ESC ausgelöst) o Wartezeit vorbei s. \qAUSLÖSER\q"
wartezeit& = 0
SetText zeit%,""
Más
SetText zeit%,Str$(10-(wartezeit&)\3)+" Sek."' de 10 Sekunden Tiempo abziehen
EndIf
If wartezeit& >= 3*10' 10 Sekunden
' así el Tiempo no mehr rückwärts se ejecuta, kann dieser Schritt ausgelassen y ser
' sólo trigger = 1 gesetzt, como Solución auch Oben adecuado se, siehe oben
trigger& = 1'AUSLÖSER
'SetText antwort%,antwort$[zufall&]+" (Wartezeit vorbei)"
'wartezeit& = 0
'SetText zeit%,""
EndIf
ENDPROC
SetTimer32(%hWnd,1,333,ProcAddr("tmpr",0))
oWndProc& = GetWindowLong(%hWnd,-4)
Claro e%, trigger&, wartezeit&
Sinestar encargado e%
Waitinput
' Trigger auslösen
If (%Key = 27) or (%Key = 2)
locate 1,1
trigger& = 1
EndIf
' nächste Cuestión + Trigger en 0
If Clicked(neu%)
zufall& = Rnd(4)
SetText frage%, frage$[zufall&]
SetText antwort%,""
Claro trigger&, wartezeit&
SetFocus(%hWnd)
EndIf
' Programa direkt final
If Clicked(final%)
Inc e%
EndIf
EndWhile
KillTimer32(%hWnd,1)
SetWindowLong(%hWnd,-4,oWndProc&)
Tal vez kannst Usted algo así anfangen
Grüße Georg |
| | | | |
| | RudiB. | como kann Yo absolut qué con anfangen, ha mich doch igual a uno neuen Concepto inspiriert. Muss veces schauen como yo ahora en mein Programa einbaue sin lo me a zerschießen..... Das bekomm Yo ya hin...
Gracias Georg |
| | | | |
| | Georg Teles | Perfekt
Grüße |
| | | | |
| | | Programas, el asynchrone Prozedurenaufrufe en una Proc ansetzen, el sólo para synchrone Enumeration geeignet es, Siempre se puede y scheinbar zufällig jegliche Características des Betriebssystemes aufrufen.
Denke uno, el Call en DeleteFileA es salvo el Adresse kein otro, como el en SetPixel - como reichen para Unglück una zeitversetztes xor eax,eax y unos pocos geeignete Werte en el Stack - viel Glück.
Sleep 10000 kannst Usted sicher con ExitProcess/ TerminateThread etc. "killen"/ debería eben delegiert ser/ voluntad/ o. scheint hier no sinnvoll eingesetzt a voluntad.
"Nicht blockierendes Warten" por Waitinput, sinngemäß:
|
| | | | |
|
Zum QuelltextThemeninformationenDieses Thema ha 3 subscriber: |