Forum | | | | - page 1 - |
| | allô IF...
je habs la fois getestet et hoffe rien faux gemacht trop avons: KompilierenMarqueSéparation $U thread.pcu = thread.
DEF @GetDlgCtrlID(1) !"USER32","GetDlgCtrlID"
DEF @ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
Testprogramm Timer
Profan Version 9
$H Windows.ph
-Main----------------------------------------------------------------
Declare Timer_Busy%,Ende%
Declare TimerID&,Create%,T_Text&,Test#
WindowStyle 26
WindowTitle "Timertest PHU-60"
Window 100,100 - 370,200
cls
Let T_TEXT&=@CREATETEXT(%HWND,"",30,30,300,30)
-Menue---------------------------------------------------------------
PopUp "&Programm"
AppendMenu 108,"&Einstellungen"
AppendMenu 109,"&Ende"
Ende% = 0
Timer setzen (4x pro Sekunde, 250ms)
thread.start 1,1
WhileNot Ende%
WaitInput
If @MenuItem(108)
Einstellungen
Endif
If @MenuItem(109)
thread.stopall
Ende% = 1
Endif
Wend
End
-Proc Einstellungen
Proc Einstellungen
Declare hD%, hA%, hB%, OK%, hTime%
Declare hF1%, hT1%
Clear OK%
Dialogfenster erzeugen
hD% = @Create("Dialog",%hWnd,"Einstellungen",%WinLeft+80,%WinTop+155,230,190)
hF1% = @Create("Font","Arial",16,0,0,0,0)
hT1% = @Create("Text",hD%,"Einstellungen...",10,10,220,20)
SetFont hT1%,hF1%
hTime% = @Create("TimeEdit", hD%, "00:00:00", 10, 35, 70, 24)
hB% = @Create("Button",hD%,"&Nachstellen",10,120,100,28)
hA% = @Create("Button",hD%,"&Abbrechen",120,120,100,28)
WhileNot Ok%
WaitInput
If @ButtonClicked(hB%) Nachstellen
Ok% = 1
Aktionen hier
ElseIf @ButtonClicked(hA%) Abbrechen
Ok% = 1
ElseIf (%Key = 2) ALT+F4 bzw. schließen
Ok% = 1
EndIf
EndWhile
DeleteObject hF1%
@DestroyWindow(hD%)
EndProc
-Prozedur die in bestimmten Zeitintervallen ausgefuehrt wird (4x pro Sekunde)
Proc thread.do
parameters n&
Dim Test#,1000000
Inc Timer_Busy%
Locate 5,5
Print "Timer:" + @str$(Timer_Busy%) + " Durchläufe"
Settext T_Text&,"Timer:" + @str$(Timer_Busy%) + " Durchläufe"
ENDPROC
aussi ici wird cela la fenêtre pas richtig angezeigt! quoi bedeutet cela? Werden im Hauptprogramm au cours de un fil fonctionnement, überschreibt Profan interne gespeicherte Variablen zum Aufrufen de API. Je après que, quelle Profanfunktionen im Hauptprogramm verwendet volonté, ist qui péril la fois plus et la fois moins gegeben, vous ist mais aussi (le son Roland) beim direkten Aufrufen de APIs vorhanden. quand et si un faute auftritt, hängt vom gewählten Zeitintervall, vom calculateur et de qui Programmbedienung par den User ab. quoi bedeutet cela oui c'est ca?
un Beispiel: Beim einem calculateur sous Windows2000 wird beim Aufruf qui API RegUnloadKey un solcher Crash verursacht et qui API wird c'est pourquoi pas korrekt fonctionnement. Daraufhin wird qui Registryhive des User pas comment geplant entladen et ist beim prochain Start pas plus disponible => un ganzes Userprofile ist unwiederbringlich verloren.
un anders Beispiel: cela Hauptprogramm écrit au cours de un Callback fonctionne dans qui Registry. là alles ungünstig zusammentrifft, wird dans une anderen Schlüssel geschrieben et Datenj dans qui Registry aller verloren!
Weitere Fragen et Anmerkungen? |
| | | | |
| | | | - page 3 - |
| | | faux verstanden, mon je. Roland hat déjà jadis geantwortet - dans seinem Forum . Probiers doch aus - schreib den Callback dans un DLL et spreche ihn de Profan sur SetTimer à - cela dauert doch seulement wenige Minuten et je kanns pas. |
| | | | |
| | | je wüsste maintenant malheureusement Rolands Beitrag en supplément pas - schreib den Callback dans un DLL et spreche ihn de Profan sur SetTimer à peux je pas umsetzen, qui Aufgabenstellung verstehe je pas.
si es hilft qui Problematik quelque chose entgegenzuwirken ensuite seulement raus avec cela... |
| | | | |
| | | Comme je le disais - schreib irgendeine Funktion dans un DLL et ruf den Callback dans einem Profanprogramm avec SetTimer sur - alors aus diesem Voir le texte source KompilierenMarqueSéparationDEF @GetDlgCtrlID(1) !"USER32","GetDlgCtrlID"
DEF @ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
Testprogramm Timer
Profan Version 9
$H Windows.ph
-Main----------------------------------------------------------------
Declare Timer_Busy%,Ende%
Declare TimerID&,Create%,T_Text&,Test#
WindowStyle 26
WindowTitle "Timertest PHU-60"
Window 100,100 - 370,200
cls
Let T_TEXT&=@CREATETEXT(%HWND,"",30,30,300,30)
-Menue---------------------------------------------------------------
PopUp "&Programm"
AppendMenu 108,"&Einstellungen"
AppendMenu 109,"&Ende"
Ende% = 0
Timer setzen (4x pro Sekunde, 250ms)
TimerID& = ~SetTimer(%HWND,333,25,@ProcAddr("Timer",4))
WhileNot Ende%
WaitInput
If @MenuItem(108)
Einstellungen
Endif
If @MenuItem(109)
~KillTimer(%HWND,333)
Ende% = 1
Endif
Wend
End
-Proc Einstellungen
Proc Einstellungen
Declare hD%, hA%, hB%, OK%, hTime%
Declare hF1%, hT1%
Clear OK%
Dialogfenster erzeugen
hD% = @Create("Dialog",%hWnd,"Einstellungen",%WinLeft+80,%WinTop+155,230,190)
hF1% = @Create("Font","Arial",16,0,0,0,0)
hT1% = @Create("Text",hD%,"Einstellungen...",10,10,220,20)
SetFont hT1%,hF1%
hTime% = @Create("TimeEdit", hD%, "00:00:00", 10, 35, 70, 24)
hB% = @Create("Button",hD%,"&Nachstellen",10,120,100,28)
hA% = @Create("Button",hD%,"&Abbrechen",120,120,100,28)
WhileNot Ok%
WaitInput
If @ButtonClicked(hB%) Nachstellen
Ok% = 1
Aktionen hier
ElseIf @ButtonClicked(hA%) Abbrechen
Ok% = 1
ElseIf (%Key = 2) ALT+F4 bzw. schließen
Ok% = 1
EndIf
EndWhile
DeleteObject hF1%
@DestroyWindow(hD%)
EndProc
-Prozedur die in bestimmten Zeitintervallen ausgefuehrt wird (4x pro Sekunde)
Proc Timer
Parameters P1&,P2&,P3&,P4&
Dim Test#,1000000
Inc Timer_Busy%
Locate 5,5
Print "Timer:" + @str$(Timer_Busy%) + " Durchläufe"
Settext T_Text&,"Timer:" + @str$(Timer_Busy%) + " Durchläufe"
se Test#
ENDPROC
sol cela KompilierenMarqueSéparation dans une Funktion einer DLL untergeracht volonté.
ici steht [...] trop dem Problem, et ici steht [...] . |
| | | | |
| | | Aha j'ai qui pour mich entscheidene Aussage de Roland la fois extrahiert:
[quote-part:a314d200ca] qui CallBacks dans XPofan habe je oui aussi plutôt pour qui Fälle incorporé, wohin une API-Funktion une CallBack-Prozdur nécessaire et seulement zurückkehrt, après que cet fonctionnement wurde. [/quote-part:a314d200ca] cet Aussage begründet le moi entier et garnicht daneben liege si je sage cela qui Grundproblematik chez procaddr liegt si une Proc de aussen aufgerufen wird. Den Roland selbst meint avec obiger Aussage oui aussi, cela es besser ist si cela XProfanprogramm wartet.
Demzufolge ist es égal si qui XProfanProc de qui Api SetTimer, ou bien per Call aus einer anderen DLL ausgelöst wird. si cela XProfanprogramm pas grade im Modus des wartens sur un Funktionsende ist - ensuite gibts mächtig trouble.
cela wiederum ists worüber je êtes procaddr grüble - quoi mais aussi bedeutet - cela Roland peut-être qui Aufzurufenden Funktionen derrière qui Procaddr-Adresse kapseln sollte - comment une Wartehalle - quelle ensuite par Roland abgebaut wird si XProfan meint cela es rien trop 1faire hat. |
| | | | |
| | | Comme je le disais: s'il te plaît Testen! intéressé mich brennend. Bau fois le Callback dans un DLL - dauert oui pas longtemps... |
| | | | |
| | | Jaja ne...aucune Problem - mais je comprends qui devoir toujours pas!
qui Callback dans un DLL construire
Schreib doch simple nen XProfan10 Zeiler pour cela XProfanprogramm, et un d'autre pour cela quoi je dans qui DLL erledigen soll! je glaub cet Syntax liegt mir plus... ;D |
| | | | |
| | | ...car aussi ici scheinst du qui Moitié überlesen trop avons: [quote-part:ce4ddc094d] Votre Analyse trifft cela Problem droite oui c'est ca: chez Créer ist qui chance, qui qui Minuteur zur Unzeit (alors au cours de qui Abarbeitung des Befehles) ausgelöst wird, deutlich höher comme chez einem Contrôle et là quelque chose höher, comme chez einem direkten API-Aufruf, mais aussi là peux es pas 100%ig ausgeschlossen volonté. [/quote-part:ce4ddc094d] c'est oui c'est ca cela quoi je mon. et cet [quote-part:ce4ddc094d] qui CallBacks dans XPofan habe je oui aussi plutôt pour qui Fälle incorporé, wohin une API-Funktion une CallBack-Prozdur nécessaire et seulement zurückkehrt, après que cet fonctionnement wurde. [/quote-part:ce4ddc094d] widerspricht deiner Aussage, cela alle Callbacks problematisch sommes. Comme je le disais, test!
Nochmals trop deinem Voir le texte source: Ist un bon Workaround, doch pourrait on ensuite pas juste une Boucle avec einem Wartebefehl qui pour einer Eingabe abbricht einbauen? Zeitgerecht wird là doch gar rien plus fonctionnement, ou bien? |
| | | | |
| | | Ne Andreas, je habs pas überlesen - mais wir reden sur verschiedenen Leveln - je meins pas böse. je durchschaue qui Angelegenheit - tout autor ca va déjà longtemps pas plus.
je merke mais cela Du mich pas so entier verstehst - donc Votre attitude cela sich mon Posting avec dem citation widerspricht - quoi es mais dans mon Gedankenraum sogar untermalt.
Grunsatzdiskussion beiseite - laß uns demain à qui DLL feilen - mon Frauchen appelez...
Gute nuit! |
| | | | |
| | | | | | | |
| | Frank Abbing | [quote-part:5cd369ff12]Comme je le disais: s'il te plaît Testen! intéressé mich brennend. Bau fois le Callback dans un DLL - dauert oui pas longtemps...[/quote-part:5cd369ff12] je hatte cela déjà gemacht. mon Dll hat une Fil erzeugt et cette hat une profansche Callbackroutine aufgerufen. Pour mehreren Aufrufen brach Profan avec den sonderlichsten Fehlermeldungen ab. Je kürzer qui Spanne qui Aufrufe, desto plus rapide kamen qui faute. |
| | | | |
| | | allô IF...
je denke la fois, nous voyons qui Problematik wirklich à verschiedenen se mettre. ici qui Beweis, cela cela rien avec ProcAddr trop 1faire hat: KompilierenMarqueSéparationDEF @GetDlgCtrlID(1) !"USER32","GetDlgCtrlID"
DEF @ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
Testprogramm Timer
Profan Version 9
$H Windows.ph
-Main----------------------------------------------------------------
Declare Timer_Busy%,Ende%
Declare TimerID&,Create%,T_Text&,Test#
WindowStyle 26
WindowTitle "Timertest PHU-60"
Window 100,100 - 370,200
cls
Let T_TEXT&=@CREATETEXT(%HWND,"",30,30,300,30)
-Menue---------------------------------------------------------------
PopUp "&Programm"
AppendMenu 108,"&Einstellungen"
AppendMenu 109,"&Ende"
Ende% = 0
Timer setzen (4x pro Sekunde, 250ms)
TimerID& = ~SetTimer(%HWND,333,25,@ProcAddr("Timer",4))
WhileNot Ende%
WaitInput
If @MenuItem(108)
Einstellungen
Endif
If @MenuItem(109)
~KillTimer(%HWND,333)
Ende% = 1
Endif
Wend
End
-Proc Einstellungen
Proc Einstellungen
Declare hD%, hA%, hB%, OK%, hTime%
Declare hF1%, hT1%
Clear OK%
Dialogfenster erzeugen
Set("FastMode",1)
hD% = @Create("Dialog",%hWnd,"Einstellungen",%WinLeft+80,%WinTop+155,230,190)
hF1% = @Create("Font","Arial",16,0,0,0,0)
hT1% = @Create("Text",hD%,"Einstellungen...",10,10,220,20)
SetFont hT1%,hF1%
hTime% = @Create("TimeEdit", hD%, "00:00:00", 10, 35, 70, 24)
hB% = @Create("Button",hD%,"&Nachstellen",10,120,100,28)
hA% = @Create("Button",hD%,"&Abbrechen",120,120,100,28)
Set("FastMode",0)
WhileNot Ok%
WaitInput
If @ButtonClicked(hB%) Nachstellen
Ok% = 1
Aktionen hier
ElseIf @ButtonClicked(hA%) Abbrechen
Ok% = 1
ElseIf (%Key = 2) ALT+F4 bzw. schließen
Ok% = 1
EndIf
EndWhile
DeleteObject hF1%
@DestroyWindow(hD%)
EndProc
-Prozedur die in bestimmten Zeitintervallen ausgefuehrt wird (4x pro Sekunde)
Proc Timer
Parameters P1&,P2&,P3&,P4&
Dim Test#,1000000
Inc Timer_Busy%
Locate 5,5
Print "Timer:" + @str$(Timer_Busy%) + " Durchläufe"
Settext T_Text&,"Timer:" + @str$(Timer_Busy%) + " Durchläufe"
ENDPROC
comment tu vois, cela allez - alors gibt es aussi avec Subclassing im Prinzip aucun Probleme, égal woran es liegen sollte. j'ai ici simple seulement cela Message Handling abgeschaltet - quoi wohl aussi une Ursache qui Problematik ist.
ici quelque chose zum Minuteur: KompilierenMarqueSéparation $H Windows.ph
$H Messages.ph
Déclarer Ende%, OldWndProc&, hButton%
Déclarer P_A$,P_A&,TIMERID&
Proc Timer_Sub
Paramètres hWnd&,Message&,wParam&,lParam&
Si Message& = ~WM_TIMER
Localiser 0,0
Imprimer "Timermessage dans WndProc empfangen: "+@STR$(wParam&)
D'autre
Retour ~CallWindowProc(OldWndProc&,hWnd&,Message&,wParam&,lParam&)
EndIf
ENDPROC
Set("Fastmode", 1)
Fenêtre 0,0 -640,440
LET P_A$=@INPUT$("Adresse qui TimerProc:","Funktionsadresse",@STR$(@ProcAddr("TimerProc",4)))
IF P_a$=»
FIN
d'autre
LET P_A&=@VAL(P_A$)
endif
OldWndProc& = ~GetWindowLong(%hWnd,~GWL_WNDPROC)
~SetWindowLong(%hWnd,~GWL_WNDPROC,@ProcAddr("Timer_Sub",4))
LET hButton%=@Créer("Button",%hWnd,"Ende",10,100,100,24)
TimerID& = ~SetTimer(%HWND,333,20000,P_A&)
Claire Ende%
WhileNot Ende%
WaitInput
Si %Key = 2
Ende% = 1
ElseIf @Clicked(hButton%)
Ende% = 1
EndIf
Endwhile
~KillTimer(%HWND,333)
~SetWindowLong(%hWnd,~GWL_WNDPROC,OldWndProc&)
Fin
Proc TimerProc
Paramètres 1&,2&,3&,4&
Localiser 2,0
Imprimer "TimerProc sur Adresse aufgerufen: "+@STR$(3&)
endproc
comment on voit, erreicht qui Minuteur qui WndProc gar pas. Gib la fois im Éditer 0 un, statt qui Adresse - ensuite siehts anders aus.
ici encore la fois avec externer DLL (so comment je cela meinte): qui DLL KompilierenMarqueSéparation et ici cela Hauptprogramm KompilierenMarqueSéparationDEF @GetDlgCtrlID(1) !"User32","GetDlgCtrlID"
DEF @ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
DEF @GetProcAddress(2) !"KERNEL32","GetProcAddress"
Testprogramm Minuteur
Profan Version 9
$H Windows.ph
-Main----------------------------------------------------------------
Déclarer Ende%,DLL&,P_A&
Déclarer TimerID&,Créer%,T_Text&,Test#
LET DLL&=@Usedll("Thread.DLL")
Fenêtre Style 26+512
Titre de la fenêtre "Timertest PHU-60"
Fenêtre 100,100 - 370,200
cls
Usermessages $10
LET P_A&=@GetProcAddress(DLL&,"_timer@16")
Imprimer P_A&,DLL&
Laisser T_TEXT&=@CREATETEXT(%HWND,»,30,30,300,30)
-Menue---------------------------------------------------------------
PopUp "&Programm"
AppendMenu 108,"&Einstellungen"
AppendMenu 109,"&Ende"
Ende% = 0
Minuteur mettons (4x pro seconde, 250ms)
TimerID& = ~SetTimer(%HWND,T_TEXT&,25,P_A&)
WhileNot Ende%
WaitInput
IF %UMESSAGE=$10
LET ENDE%=1
endif
Si @MenuItem(108)
Einstellungen
Endif
Si @MenuItem(109)
~KillTimer(%HWND,T_TEXT&)
Ende% = 1
Endif
Wend
~KillTimer(%HWND,T_TEXT&)
FreeDLL DLL&
Fin
-Proc Einstellungen
Proc Einstellungen
Déclarer hD%, hA%, hB%, OK%, hTime%
Déclarer hF1%, hT1%
Claire OK%
Dialogfenster erzeugen
hD% = @Créer("Dialog",%hWnd,"Einstellungen",%WinLeft+80,%WinTop+155,230,190)
hF1% = @Créer("Font",Arial,16,0,0,0,0)
hT1% = @Créer("Text",hD%,"Einstellungen...",10,10,220,20)
SetFont hT1%,hF1%
hTime% = @Créer("TimeEdit", hD%, "00:00:00", 10, 35, 70, 24)
hB% = @Créer("Button",hD%,"&Nachstellen",10,120,100,28)
hA% = @Créer("Button",hD%,"&Abbrechen",120,120,100,28)
WhileNot Ok%
WaitInput
Si @ButtonClicked(hB%) Nachstellen
Ok% = 1
Aktionen ici
ElseIf @ButtonClicked(hA%) démolir
Ok% = 1
ElseIf (%Key = 2) ALT+F4 ou schließen
Ok% = 1
EndIf
Endwhile
DeleteObject hF1%
@DestroyWindow(hD%)
ENDPROC
-Procédure qui dans certain Zeitintervallen ausgefuehrt wird (4x pro seconde)
Proc Minuteur
Paramètres P1&,P2&,P3&,P4&
Faible Test#,1000000
Inc Timer_Busy%
Settext P3&,"Timer:" + @str$(Timer_Busy%) + " Durchläufe"
Dispose Test#
ENDPROC
Funktioniert également. et ici zum comparaison sans DLL: KompilierenMarqueSéparationDEF @GetDlgCtrlID(1) !"User32","GetDlgCtrlID"
DEF @ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
DEF @GetProcAddress(2) !"KERNEL32","GetProcAddress"
Testprogramm Minuteur
Profan Version 9
$H Windows.ph
-Main----------------------------------------------------------------
Déclarer Timer_Busy%,Ende%
Déclarer TimerID&,Créer%,T_Text&,Test#
Fenêtre Style 26+512
Titre de la fenêtre "Timertest PHU-60"
Fenêtre 100,100 - 370,200
cls
Usermessages $10
Laisser T_TEXT&=@CREATETEXT(%HWND,»,30,30,300,30)
-Menue---------------------------------------------------------------
PopUp "&Programm"
AppendMenu 108,"&Einstellungen"
AppendMenu 109,"&Ende"
Ende% = 0
Minuteur mettons (4x pro seconde, 250ms)
TimerID& = ~SetTimer(%HWND,T_TEXT&,25,@ProcAddr("Timer",4))
WhileNot Ende%
WaitInput
IF %UMESSAGE=$10
LET ENDE%=1
endif
Si @MenuItem(108)
Einstellungen
Endif
Si @MenuItem(109)
~KillTimer(%HWND,T_TEXT&)
Ende% = 1
Endif
Wend
Fin
-Proc Einstellungen
Proc Einstellungen
Déclarer hD%, hA%, hB%, OK%, hTime%
Déclarer hF1%, hT1%
Claire OK%
Dialogfenster erzeugen
hD% = @Créer("Dialog",%hWnd,"Einstellungen",%WinLeft+80,%WinTop+155,230,190)
hF1% = @Créer("Font",Arial,16,0,0,0,0)
hT1% = @Créer("Text",hD%,"Einstellungen...",10,10,220,20)
SetFont hT1%,hF1%
hTime% = @Créer("TimeEdit", hD%, "00:00:00", 10, 35, 70, 24)
hB% = @Créer("Button",hD%,"&Nachstellen",10,120,100,28)
hA% = @Créer("Button",hD%,"&Abbrechen",120,120,100,28)
WhileNot Ok%
WaitInput
Si @ButtonClicked(hB%) Nachstellen
Ok% = 1
Aktionen ici
ElseIf @ButtonClicked(hA%) démolir
Ok% = 1
ElseIf (%Key = 2) ALT+F4 ou schließen
Ok% = 1
EndIf
Endwhile
DeleteObject hF1%
@DestroyWindow(hD%)
ENDPROC
-Procédure qui dans certain Zeitintervallen ausgefuehrt wird (4x pro seconde)
Proc Minuteur
Paramètres P1&,P2&,P3&,P4&
Faible Test#,1000000
Inc Timer_Busy%
Settext P3&,"Timer:" + @str$(Timer_Busy%) + " Durchläufe"
Dispose Test#
ENDPROC
quoi wieder den faute verursacht. Meiner attitude pour liegt cet spezielle Problem wirklich à WM_TIMER - mais je beim besten Willen ne...aucune Experte et lasse mich aussi gern (am liebsten par beweisfähige Source) vom Gegenteil überzeugen. |
| | | | |
| | | et cet trois Source wären là sous anderem aussi encore intéressant: KompilierenMarqueSéparationDEF @GetDlgCtrlID(1) !"USER32","GetDlgCtrlID"
DEF @ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
DEF @GetProcAddress(2) !"KERNEL32","GetProcAddress"
Testprogramm Timer
Profan Version 9
$H Windows.ph
-Main----------------------------------------------------------------
Declare Timer_Busy%,Ende%
Declare TimerID&,Create%,T_Text&,Test#,T_TEXT2&
Declare OldWndProc&,DLL&,P_A&
LET DLL&=@Usedll("Send.DLL")
WindowStyle 26+512
WindowTitle "Subclassingtest"
Window 100,100 - 370,200
Let T_TEXT&=@CREATEButton(%HWND,"",30,80,300,30)
Let T_TEXT2&=@CREATEButton(%HWND,"Ende",30,120,300,30)
Waitinput
Set("FastMode", 1)
OldWndProc& = ~GetWindowLong(%hWnd,~GWL_WNDPROC)
LET P_A&=@GetProcAddress(DLL&,"_timer@16")
~SetWindowLong(%hWnd,~GWL_WNDPROC,@ProcAddr("Sub",4))
Ende%=0
TimerID&=~SetTimer(%HWND,333,20,P_A&)
Print TimerID&
WhileNot Ende%
WaitInput
If @Buttonclicked(T_TEXT&)
Einstellungen
Endif
If @Buttonclicked(T_TEXT2&)
~KillTimer(%HWND,333)
Ende%=1
Freedll DLL&
Endif
Wend
End
-Proc Einstellungen
Proc Einstellungen
Declare hD%, hA%, hB%, OK%, hTime%
Declare hF1%, hT1%
Clear OK%
Dialogfenster erzeugen
hD% = @Create("Dialog",%hWnd,"Einstellungen",%WinLeft+80,%WinTop+155,230,190)
hD% = @Control("Dialog","Einstellungen",$14C80084,%WinLeft+80,%WinTop+155,230,190,%HWND,0,%HINSTANCE,$101)
hF1% = @Create("Font","Arial",16,0,0,0,0)
hT1% = @Create("Text",hD%,"Einstellungen...",10,10,220,20)
SetFont hT1%,hF1%
hTime% = @Create("TimeEdit", hD%, "00:00:00", 10, 35, 70, 24)
hB% = @Create("Button",hD%,"&Nachstellen",10,120,100,28)
hA% = @Create("Button",hD%,"&Abbrechen",120,120,100,28)
WhileNot Ok%
WaitInput
If @ButtonClicked(hB%) Nachstellen
Ok% = 1
Aktionen hier
ElseIf @ButtonClicked(hA%) Abbrechen
Ok% = 1
ElseIf (%Key = 2) ALT+F4 bzw. schließen
Ok% = 1
EndIf
EndWhile
DeleteObject hF1%
@DestroyWindow(hD%)
EndProc
Proc Sub
Parameters hWnd&,Message&,wParam&,lParam&
If Message&=$401
Inc Timer_Busy%
Settext T_Text&,"Timer: " + @str$(Timer_Busy%) + " Durchläufe"
Return ~CallWindowProc(OldWndProc&,hWnd&,Message&,wParam&,lParam&)
Else
Return ~CallWindowProc(OldWndProc&,hWnd&,Message&,wParam&,lParam&)
EndIf
ENDPROC
KompilierenMarqueSéparationDEF @GetDlgCtrlID(1) !"User32","GetDlgCtrlID"
DEF @ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
DEF @GetProcAddress(2) !"KERNEL32","GetProcAddress"
Testprogramm Minuteur
Profan Version 9
$H Windows.ph
-Main----------------------------------------------------------------
Déclarer Timer_Busy%,Ende%
Déclarer TimerID&,Créer%,T_Text&,Test#,T_TEXT2&
Déclarer OldWndProc&,DLL&,P_A&
LET DLL&=@Usedll("Send.DLL")
Fenêtre Style 26+512
Titre de la fenêtre "Subclassingtest 2"
Fenêtre 100,100 - 370,200
Laisser T_TEXT&=@CREATEButton(%HWND,»,30,80,300,30)
Laisser T_TEXT2&=@CREATEButton(%HWND,"Ende",30,120,300,30)
Waitinput
Set("Fastmode", 1)
OldWndProc& = ~GetWindowLong(%hWnd,~GWL_WNDPROC)
LET P_A&=@GetProcAddress(DLL&,"_timer@16")
~SetWindowLong(%hWnd,~GWL_WNDPROC,@ProcAddr("Sub",4))
Ende%=0
TimerID&=~SetTimer(%HWND,333,25,@ProcAddr("Sub",4))
Imprimer TimerID&
WhileNot Ende%
WaitInput
Si @Buttonclicked(T_TEXT&)
Einstellungen
Endif
Si @Buttonclicked(T_TEXT2&)
~KillTimer(%HWND,333)
Ende%=1
Freedll DLL&
Endif
Wend
Fin
-Proc Einstellungen
Proc Einstellungen
Déclarer hD%, hA%, hB%, OK%, hTime%
Déclarer hF1%, hT1%
Claire OK%
Dialogfenster erzeugen
hD% = @Créer("Dialog",%hWnd,"Einstellungen",%WinLeft+80,%WinTop+155,230,190)
hD% = @Contrôle("Dialog","Einstellungen",$14C80084,%WinLeft+80,%WinTop+155,230,190,%HWND,0,%HINSTANCE,$101)
hF1% = @Créer("Font",Arial,16,0,0,0,0)
hT1% = @Créer("Text",hD%,"Einstellungen...",10,10,220,20)
SetFont hT1%,hF1%
hTime% = @Créer("TimeEdit", hD%, "00:00:00", 10, 35, 70, 24)
hB% = @Créer("Button",hD%,"&Nachstellen",10,120,100,28)
hA% = @Créer("Button",hD%,"&Abbrechen",120,120,100,28)
WhileNot Ok%
WaitInput
Si @ButtonClicked(hB%) Nachstellen
Ok% = 1
Aktionen ici
ElseIf @ButtonClicked(hA%) démolir
Ok% = 1
ElseIf (%Key = 2) ALT+F4 ou schließen
Ok% = 1
EndIf
Endwhile
DeleteObject hF1%
@DestroyWindow(hD%)
ENDPROC
Proc Sous
Paramètres hWnd&,Message&,wParam&,lParam&
Inc Timer_Busy%
Settext T_Text&,"Timer: " + @str$(Timer_Busy%) + " Durchläufe"
ENDPROC
KompilierenMarqueSéparation qui faute hat alors wohl rien avec Subclassing trop 1faire - ou bien quoi meinst du oui c'est ca? |
| | | | |
|
répondreOptions du sujet | 4.294 Views |
Themeninformationencet Thema hat 4 participant: |