| asyncMsgBox.inc
Asynchrone MessageBoxen- Rückmeldungen, "MessageBox avec eigenem Thread"-Beispiel.
<!---->
Télécharger/ dans den Warenkorb4,99 € inkl. MwSt. aucun Versandgebühr
Hübsche Beispiele: iF (29.06.12)
Hihi,
schauma: Herunterladen externer Télécharger
{$cleq}
const asyncMessageBox.Message=1025
declare asyncMessageBox.C&
decimals 0
proc asyncMessageBox
parameters wnd&,s$,tit$,mode&
add asyncMessageBox.C&,1
var h&=globalAlloc(gPTR,24)
long h&,0=addr($ S),addr(tit$),mode&,wnd&,create("text",hWnd,»,0,0,0,0),asyncMessageBox.C&
setWindowLong(long(h&,16),gwl_userdata,setWindowLong(long(h&,16),gwl_wndProc,procaddr(asyncMessageBox.wndProc,4)))
asyncMessageBox.createThread(h&)
tandis que long(h&,0)
sleep 10
Wend
whileloop 100
Wend
var msg&=long(h&,16)
messages de l'utilisateur asyncMessageBox.Message
globalFree(h&)
var msgboxWnd&=findWindow("."+str$(hWnd)+"."+str$(asyncMessageBox.C&))
settext msgboxWnd&,tit$
return msgboxWnd&
endproc
nProc asyncMessageBox.createThread
parameters h&
createThread(0,0,procAddr(asyncMessageBox.thread,1),h&,0,0)
endproc
nProc asyncMessageBox.wndProc
Paramètres wnd&,msg&,wp&,lp&
si msg&=asyncMessageBox.Message
sendMessage(hWnd,asyncMessageBox.Message,wnd&,lp&)
destroyWindow(wnd&)
return 0
endif
return callWindowProc(getWindowLong(wnd&,gwl_userData),wnd&,msg&,wp&,lp&)
endproc
nproc asyncMessageBox.thread
parameters h&
var s$=string$(long(h&,0),0)
var tit$=string$(long(h&,4),0)
var mode&=long(h&,8)
var wnd&=long(h&,12)
var trd&=long(h&,16)
long h&,0=0
sendMessage(trd&,asyncMessageBox.Message,0,messageBox(wnd&,s$,"."+str$(hWnd)+"."+str$(long(h&,20)),mode&))
return 0
endproc
cls
var myMsgBoxWnd&=asyncMessageBox(desktop,"Huhu","Titel",mb_ok)
settext findWindowEx(myMsgBoxWnd&,0,"BUTTON","OK"),"&Abbrechen"
tandis que 1
waitinput
Wend
end
ou bien hiermit zählts joli runter et schließt sich selbständig:
cls
var myMsgBoxWnd&=asyncMessageBox(desktop,"Huhu","Titel",mb_ok)
var btn&=findWindowEx(myMsgBoxWnd&,0,"BUTTON","OK")
var c&=10
tandis que (c&+2) and isWindow(myMsgBoxWnd&)
waitinput 1000
settext btn&,"&Abbrechen ["+str$(c&)+"]"
sub c&,1
Wend
cas isWindow(myMsgBoxWnd&) : sendMessage(myMsgBoxWnd&,wm_close,0,0)
imprimer "fertsch"
tandis que 1
waitinput
Wend
end
iF (29.06.12)
et ici la fois rein per Externe:
'{$ Cleq}
decimals 0
cls
var myTimer&=external("user32","SetTimer",0,0,100,procAddr(myMessageBoxAPCProc,4))
imprimer messageBox("Text","."+str$(%hWnd)+".allô monde!",0)
waitinput
end
proc myMessageBoxAPCProc
parameters wnd&,msg&,id&,tme&
var s$="."+str$(%hWnd)+"."
var msgboxWnd&=findWindow($ S)
casenot msgboxWnd& : return
external("user32","KillTimer",0,myTimer&)
settext msgboxWnd&,del$(getText$(msgboxWnd&),1,len($ S))
var btn&=external("user32","FindWindowExA",msgboxWnd&,0,"BUTTON","OK")
casenot btn& : return
setText btn&,"&Abbrechen"
endProc
avec cela cela so geschrieben mais wiederum 100%ig (statt 99%ig) "absturzsicher" ist, devrait cela Roland nativ einbauen car un APC sur une interpretierte XProfan- Proc peux toujours abstürzen besonders desto komplexer et größer cela Programme ist. |
|