Source/ Codesnippets | | | | - page 1 - |
| RudiB. | allô zusammen,
habe la fois wieder une Frage.
peux je au cours de des SLEEP's une Abbruch de Sleep erzwingen ? z.B. avec wm_Timer Funktion ?? |
| | | Xprofan X4 Rudolf Beske / München
Hardware: NB Intel I9 - 16GByte RAM | 28.04.2020 ▲ |
| |
| | « cette Beitrag wurde comme Solution gekennzeichnet. » | | Georg Teles | Habe quelque chose rumgespielt, ici assez simpel
Déclarer e%, oWndProc&
Déclarer récente%, finissons%
Déclarer trigger&, wartezeit&
Déclarer frage%, antwort%
Déclarer frage$, antwort$
Déclarer zeit%
Def GetWindowLong(2)!"User32","GetWindowLongA"
Def SetWindowLong(3)!"User32","SetWindowLongA"
Def KillTimer32(2)!"User32","KillTimer"
Def SetTimer32(4)!"User32","SetTimer"
CLS
frage$ = "Frage: combien ist 44 * 5 ?"
antwort$ = "Lösung: 220"
frage% = Créer("Text",%hWnd,frage$,5,5,255,20)
antwort% = Créer("Text",%hWnd,"Lösung:",5,30,255,20)
zeit% = Créer("Text",%hWnd,»,100,61,65,20)
neu% = Créer("Button",%hWnd,"näch. Frage",5,60,90,20)
beenden% = Créer("Button",%hWnd,"beenden",170,60,90,20)
Proc tmpr
Inc wartezeit&
Si trigger& = 1
SetText antwort%,antwort$+" (par ESC ausgelöst)"
wartezeit& = 0
SetText zeit%,»
D'autre
SetText zeit%,Str$(10-(wartezeit&)\3)+" Sek."
EndIf
Si 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)
Claire e%, trigger&, wartezeit&
WhileNot e%
Waitinput
' Trigger auslösen
Si (%Key = 27) or (%Key = 2)
locate 1,1
trigger& = 1
EndIf
' prochain Frage + Trigger sur 0
Si Clicked(récente%)
frage$ = "Frage: la capitale de l'allemagne ?"
antwort$ = "Lösung: Berlin"
SetText frage%,frage$
SetText antwort%,"Lösung:"
Claire trigger&, wartezeit&
SetFocus(%hWnd)
EndIf
' Programme direct finissons
Si Clicked(finissons%)
Inc e%
EndIf
Endwhile
KillTimer32(%hWnd,1)
SetWindowLong(%hWnd,-4,oWndProc&)
ici avec Arrays comme Frage/Solution
Déclarer e%, oWndProc&
Déclarer récente%, finissons%
Déclarer trigger&, wartezeit&
Déclarer frage%, antwort%
Déclarer fragen$, répondre$
Déclarer frage$[], antwort$[]
Déclarer zufall&, zeit%
Def GetWindowLong(2)!"User32","GetWindowLongA"
Def SetWindowLong(3)!"User32","SetWindowLongA"
Def KillTimer32(2)!"User32","KillTimer"
Def SetTimer32(4)!"User32","SetTimer"
Randomiser
CLS
fragen$ = "Wieviel ist 44 * 5 ?;Hauptstadt de l'allemagne ?;2^4 - 2 ?;Wurzel aus 27 ?"
antworten$ = "220;Berlin;14;3"
frage$[] = explode(fragen$,";")
antwort$[] = explode(répondre$,";")
zufall& = Tour(4)
frage% = Créer("Text",%hWnd,frage$[zufall&],5,5,255,20)
antwort% = Créer("Text",%hWnd,»,5,30,700,20)
zeit% = Créer("Text",%hWnd,»,100,61,65,20)
neu% = Créer("Button",%hWnd,"näch. Frage",5,60,90,20)
beenden% = Créer("Button",%hWnd,"beenden",170,60,90,20)
Proc tmpr
Inc wartezeit&
Si trigger& = 1
SetText antwort%,antwort$[zufall&]+" (par ESC ausgelöst) bzw Wartezeit vorbei s. \qAUSLÖSER\q"
wartezeit& = 0
SetText zeit%,»
D'autre
SetText zeit%,Str$(10-(wartezeit&)\3)+" Sek."' de 10 Sekunden Zeit abziehen
EndIf
Si wartezeit& >= 3*10' 10 Sekunden
' avec cela qui Zeit pas plus arriéré fonctionne, peux cette Schritt ausgelassen volonté et
' seulement trigger = 1 gesetzt, là Solution aussi dessus angezeigt wird, siehe dessus
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)
Claire e%, trigger&, wartezeit&
WhileNot e%
Waitinput
' Trigger auslösen
Si (%Key = 27) or (%Key = 2)
locate 1,1
trigger& = 1
EndIf
' prochain Frage + Trigger sur 0
Si Clicked(récente%)
zufall& = Tour(4)
SetText frage%, frage$[zufall&]
SetText antwort%,»
Claire trigger&, wartezeit&
SetFocus(%hWnd)
EndIf
' Programme direct finissons
Si Clicked(finissons%)
Inc e%
EndIf
Endwhile
KillTimer32(%hWnd,1)
SetWindowLong(%hWnd,-4,oWndProc&)
peut-être peux Du quelque chose avec cela anfangen
Grüße Georg |
| | | | | |
| | RudiB. | Hat sich déjà erledigt...
Habe une Solution trouvé um plus rapide / vite aus dem Sleep rauszukommen.
|
| | | | |
| | Georg Teles | Guten journée,
aah hat sich erledigt weiß' oui pas, quoi du avant la hâte, mais je hatte une Vorschlag, wohin du rumexperementieren peux
Déclarer 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
Localiser 1,1
imprimer time$(0);»;time$(1);" - ESC drücken, um Minuteur trop beenden"
imprimer "verschiebe la fenêtre, Minuteur aktualisiert toutefois cette Text"
ENDPROC
CLS
var Button% = Créer("Button",%hWNd,"teste",20,50,100,20)
t& = SetTimer32(%hWnd,1,333,ProcAddr("tmpr",0))
oWndProc& = GetWindowLong(%hWnd,-4)
Claire e%
WhileNot e%
Waitinput
Si (%Key = 27) or (%Key = 2)
Localiser 1,1
'Cas t&:KillTimer32(%hWnd,1)
Si t& = 1
KillTimer32(%hWnd,1)
t& = 0
EndIf
imprimer space$(23)+"ABBRUCH"+space$(23)
'Inc e% '= ENDE
EndIf
'-------------------------------------------------
Si t& = 0
' tu quoi, si Minuteur weg ist
EndIf
' eleganter ici, si Button UND Minuteur = 1
Si (Clicked(Button%)) AND (t& = 1)
locate 5,20
imprimer "nix geschieht"
SetFocus(%hWnd)
EndIf
' eleganter ici, si Button UND Minuteur = 0
Si (Clicked(Button%)) AND (t& = 0)
locate 5,20
imprimer "was maintenant? (X dessus à droite afin de finissons)"
EndIf
Endwhile
SetWindowLong(%hWnd,-4,oWndProc&)
Grüße |
| | | | |
| | RudiB. | eh bien, j'écris justement à eimem Vokabe-Trainer. une Funktion ist ici arrêt comment chez einer "Dia-Show" ...Vokabel wird angezeigt et anschliessend pour einer einstellbaren récréation (zw. 1 et 10 sek.) wird qui Antwort eingeblendet. So hat on plan une gewisse Zeit sich qui Antwort trop überlegen. sais on qui Antwort mais tout de suite, ensuite soll qui User mais pas absolument qui volle Pausenzeit "absitzen" doit. alors raus aus qui récréation....avec ESC, après arrêt plus ... Daher habe je arrêt qui Pausenzeit verkürzt et dans un Whileloop-Boucle gelegt. auparavant 10 sek. récréation am Stück et so ensuite arrêt aufgeteilt sur 20*0,5sek. avec qui möglichkeit avec ESC auszusteigen.
mais Votre Solution ist wirklich Super et werde cet Solution la fois ausgiebig testen et Sicherheit aussi avec einbauen. Wesentlich eleganter....
merci Dir Georg
Salut aus München Rudi |
| | | | |
| | Georg Teles | Habe quelque chose rumgespielt, ici assez simpel
Déclarer e%, oWndProc&
Déclarer récente%, finissons%
Déclarer trigger&, wartezeit&
Déclarer frage%, antwort%
Déclarer frage$, antwort$
Déclarer zeit%
Def GetWindowLong(2)!"User32","GetWindowLongA"
Def SetWindowLong(3)!"User32","SetWindowLongA"
Def KillTimer32(2)!"User32","KillTimer"
Def SetTimer32(4)!"User32","SetTimer"
CLS
frage$ = "Frage: combien ist 44 * 5 ?"
antwort$ = "Lösung: 220"
frage% = Créer("Text",%hWnd,frage$,5,5,255,20)
antwort% = Créer("Text",%hWnd,"Lösung:",5,30,255,20)
zeit% = Créer("Text",%hWnd,»,100,61,65,20)
neu% = Créer("Button",%hWnd,"näch. Frage",5,60,90,20)
beenden% = Créer("Button",%hWnd,"beenden",170,60,90,20)
Proc tmpr
Inc wartezeit&
Si trigger& = 1
SetText antwort%,antwort$+" (par ESC ausgelöst)"
wartezeit& = 0
SetText zeit%,»
D'autre
SetText zeit%,Str$(10-(wartezeit&)\3)+" Sek."
EndIf
Si 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)
Claire e%, trigger&, wartezeit&
WhileNot e%
Waitinput
' Trigger auslösen
Si (%Key = 27) or (%Key = 2)
locate 1,1
trigger& = 1
EndIf
' prochain Frage + Trigger sur 0
Si Clicked(récente%)
frage$ = "Frage: la capitale de l'allemagne ?"
antwort$ = "Lösung: Berlin"
SetText frage%,frage$
SetText antwort%,"Lösung:"
Claire trigger&, wartezeit&
SetFocus(%hWnd)
EndIf
' Programme direct finissons
Si Clicked(finissons%)
Inc e%
EndIf
Endwhile
KillTimer32(%hWnd,1)
SetWindowLong(%hWnd,-4,oWndProc&)
ici avec Arrays comme Frage/Solution
Déclarer e%, oWndProc&
Déclarer récente%, finissons%
Déclarer trigger&, wartezeit&
Déclarer frage%, antwort%
Déclarer fragen$, répondre$
Déclarer frage$[], antwort$[]
Déclarer zufall&, zeit%
Def GetWindowLong(2)!"User32","GetWindowLongA"
Def SetWindowLong(3)!"User32","SetWindowLongA"
Def KillTimer32(2)!"User32","KillTimer"
Def SetTimer32(4)!"User32","SetTimer"
Randomiser
CLS
fragen$ = "Wieviel ist 44 * 5 ?;Hauptstadt de l'allemagne ?;2^4 - 2 ?;Wurzel aus 27 ?"
antworten$ = "220;Berlin;14;3"
frage$[] = explode(fragen$,";")
antwort$[] = explode(répondre$,";")
zufall& = Tour(4)
frage% = Créer("Text",%hWnd,frage$[zufall&],5,5,255,20)
antwort% = Créer("Text",%hWnd,»,5,30,700,20)
zeit% = Créer("Text",%hWnd,»,100,61,65,20)
neu% = Créer("Button",%hWnd,"näch. Frage",5,60,90,20)
beenden% = Créer("Button",%hWnd,"beenden",170,60,90,20)
Proc tmpr
Inc wartezeit&
Si trigger& = 1
SetText antwort%,antwort$[zufall&]+" (par ESC ausgelöst) bzw Wartezeit vorbei s. \qAUSLÖSER\q"
wartezeit& = 0
SetText zeit%,»
D'autre
SetText zeit%,Str$(10-(wartezeit&)\3)+" Sek."' de 10 Sekunden Zeit abziehen
EndIf
Si wartezeit& >= 3*10' 10 Sekunden
' avec cela qui Zeit pas plus arriéré fonctionne, peux cette Schritt ausgelassen volonté et
' seulement trigger = 1 gesetzt, là Solution aussi dessus angezeigt wird, siehe dessus
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)
Claire e%, trigger&, wartezeit&
WhileNot e%
Waitinput
' Trigger auslösen
Si (%Key = 27) or (%Key = 2)
locate 1,1
trigger& = 1
EndIf
' prochain Frage + Trigger sur 0
Si Clicked(récente%)
zufall& = Tour(4)
SetText frage%, frage$[zufall&]
SetText antwort%,»
Claire trigger&, wartezeit&
SetFocus(%hWnd)
EndIf
' Programme direct finissons
Si Clicked(finissons%)
Inc e%
EndIf
Endwhile
KillTimer32(%hWnd,1)
SetWindowLong(%hWnd,-4,oWndProc&)
peut-être peux Du quelque chose avec cela anfangen
Grüße Georg |
| | | | |
| | RudiB. | là peux je absolu quoi avec anfangen, hat mich doch juste trop einer neuen concept inspiriert. Muss la fois regarder comment je cela maintenant dans mon Programme einbaue sans es mir trop zerschießen..... cela bekomm je déjà hin...
merci Georg |
| | | | |
| | Georg Teles | parfait
Grüße |
| | | | |
| | | Programme, qui asynchrone Prozedurenaufrufe sur une Proc ansetzen, qui seulement pour synchrone Enumeration approprié ist, peut jederzeit et scheinbar zufällig jegliche Funktionen des Betriebssystemes appel.
Denke on, qui Call sur DeleteFileA ist ausgenommen qui Adresse ne...aucune anderer, comme qui sur SetPixel - là reichen zum Unglück un zeitversetztes xor eax,eax et un paire geeignete Werte sur dem Stack - viel Glück.
Sleep 10000 peux Du sûrement avec ExitProcess/ TerminateThread etc. "killen"/ devrait plan delegiert son/ volonté/ bzw. scheint ici pas sinnvoll eingesetzt trop volonté.
"Nicht blockierendes Warten" per Waitinput, sinngemäß:
|
| | | | |
|
Zum QuelltextOptions du sujet | 5.605 Views |
Themeninformationencet Thema hat 3 participant: |