Foro | | | | - Página 1 - |
|  | ¡Hola IF...
Yo habs veces getestet y hoffe nichts falso gemacht a haben: KompilierenMarcaSeparación $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
Auch hier se el Ventana no correcto adecuado! Was bedeutet el? Werden en el Hauptprogramm während un hilo ausgeführt, überschreibt Profano intern gespeicherte Variables para Aufrufen de API. Je después de, welche Profanfunktionen en el Hauptprogramm verwendet voluntad, Es el Gefahr veces mehr y veces weniger gegeben, ellos es aber auch (laut Roland) beim direkten Aufrufen de APIs disponible. Wann y si una Fehler auftritt, hängt vom gewählten Zeitintervall, vom Rechner y de el Programmbedienung por el User de. Was bedeutet el genau?
Ein Ejemplo: Beim una Rechner bajo Windows2000 se beim Aufruf el API RegUnloadKey una solcher Crash verursacht y el API se deshalb no korrekt ausgeführt. Daraufhin se el Registryhive des User no como geplant entladen y es beim nächsten Start no mehr verfügbar => una ganzes Userprofile es unwiederbringlich perdido.
Ein anders Ejemplo: Das Hauptprogramm schreibt während una Callback se ejecuta en el Registry. Como alles ungünstig zusammentrifft, se en una otro Schlüssel geschrieben y Datenj en el Registry ir perdido!
Weitere Fragen y Anmerkungen?  |
| | | | |
| | | | - Página 3 - |
| |  | Falsch verstanden, mi Yo. Roland ha ya längst geantwortet - en seinem Foro . Probiers doch de - schreib el Callback en un DLL y spreche ihn de Profano encima SetTimer a - el dauert doch sólo wenige Minuten y yo kanns no. |
| | | | |
| |  | Yo saber ahora desafortunadamente Rolands Contribución dazu no - schreib el Callback en un DLL y spreche ihn de Profano encima SetTimer a kann Yo no umsetzen, el Aufgabenstellung verstehe Yo no.
Wenn lo hilft el Problematik algo entgegenzuwirken entonces sólo fuera así... |
| | | | |
| |  | Como ya he dicho - schreib irgendeine Función en un DLL y ruf el Callback en un Profanprogramm con SetTimer en - also de diesem Ver código fuente KompilierenMarcaSeparaciónDEF @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 el KompilierenMarcaSeparación In una Función uno DLL untergeracht voluntad.
Hier es [...] a el Problema, y aquí es [...] . |
| | | | |
| |  | Aha Yo el para mich entscheidene Aussage de Roland veces extrahiert:
[quote:a314d200ca] El CallBacks en XPofan Yo en efecto más para el Fälle instalado, wo una API-Función una CallBack-Prozdur benötigt y sólo zurückkehrt, después de esta ausgeführt wurde. [/quote:a314d200ca] Diese Aussage begründet el Yo bastante y garnicht daneben liege si yo sage el el Grundproblematik en procaddr liegt si una Proc de aussen aufgerufen se. Den Roland incluso meint con obiger Aussage en efecto, el lo mejor es si el XProfanprogramm wartet.
Demzufolge es egal si el XProfanProc de el Api SetTimer, oder por Call de uno otro DLL ausgelöst se. Si el XProfanprogramm no grade en el Modus des wartens en una Funktionsende es - entonces gibts mächtig trouble.
Das wiederum ists worüber Yo seid procaddr grüble - qué aber auch bedeutet - el Roland tal vez el Aufzurufenden Características hinter el Procaddr-Adresse kapseln debería - como una Wartehalle - welche entonces por Roland abgebaut se si XProfan meint el lo nichts a tun ha. |
| | | | |
| |  | Como ya he dicho: Bitte Testen! Interessiert mich brennend. Bau veces el Callback en un DLL - dauert sí no largo... |
| | | | |
| |  | Jaja kein Problema - pero yo verstehe el Tarea siempre todavía no! 
El Callback en un DLL bauen 
Schreib doch simplemente nen XProfan10 Zeiler para el XProfanprogramm, y una más para el Yo en el DLL erledigen se! Yo glaub esta Syntax liegt me mehr... ;D |
| | | | |
| |  | ...porque auch hier scheinst du el Hälfte überlesen a haben: [quote:ce4ddc094d] Su Analyse trifft el problema bastante genau: En Crear Es el Chance, daß el Temporizador a Unzeit (also während el Abarbeitung des Befehles) ausgelöst se, deutlich höher como en una Control y hay algo höher, como en una direkten API-Aufruf, aber auch como kann no 100%ig ausgeschlossen voluntad. [/quote:ce4ddc094d] Es genau el Yo mi. Und esta [quote:ce4ddc094d] El CallBacks en XPofan Yo en efecto más para el Fälle instalado, wo una API-Función una CallBack-Prozdur benötigt y sólo zurückkehrt, después de esta ausgeführt wurde. [/quote:ce4ddc094d] widerspricht deiner Aussage, el todos Callbacks problematisch son. Como ya he dicho, test!
Nochmals a deinem Ver código fuente: Ist una guter Workaround, doch podría una continuación no es igual una Bucle con un Wartebefehl el después de uno Eingabe abbricht einbauen? Zeitgerecht se como doch gar nichts mehr ausgeführt, oder? |
| | | | |
| |  | Ne Andreas, Yo habs no überlesen - aber wir reden en verschiedenen Leveln - Yo meins no böse. Yo durchschaue el Angelegenheit - por lo tanto es ya largo no mehr.
Yo merke aber el Usted mich no tan completamente verstehst - por lo tanto Su Meinung el se mein Posting con el Zitat widerspricht - qué lo aber en mi Gedankenraum incluso untermalt.
Grunsatzdiskussion beiseite - laß uns morgen a el DLL feilen - mein Frauchen ruft...
Gute Nacht! |
| | | | |
| |  | | | | | |
| |  Frank Abbing | [quote:5cd369ff12]Como ya he dicho: Bitte Testen! Interessiert mich brennend. Bau veces el Callback en un DLL - dauert sí no largo...[/quote:5cd369ff12] Tuve el ya gemacht. Mi Dll ha un hilo producido y dieser ha una profansche Callbackroutine aufgerufen. Nach más Aufrufen brach Profano con el sonderlichsten Fehlermeldungen de. Je kürzer el Spanne el Aufrufe, desto más rápido kamen el Fehler. |
| | | | |
| |  | ¡Hola IF...
Yo denke veces, wir sehen el Problematik wirklich a verschiedenen Stellen. Hier el Beweis, el el nichts con ProcAddr a tun ha: KompilierenMarcaSeparaciónDEF @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
Como du siehst, el va - also hay auch con Subclassing en el Principio no Problemas, egal woran lo mentira debería. Yo habe hier simplemente sólo el Message Handling abgeschaltet - qué wohl auch una Ursache el Problematik es.
Hier algo para Temporizador: KompilierenMarcaSeparación $H Windows.ph
$H Messages.ph
Declarar Ende%, OldWndProc&, hButton%
Declarar P_A$,P_A&,TIMERID&
Proc Timer_Sub
Parámetros hWnd&,Message&,wParam&,lParam&
If Message& = ~WM_TIMER
Localizar 0,0
Imprimir "Timermessage en WndProc empfangen: "+@STR$(wParam&)
Más
Volver ~CallWindowProc(OldWndProc&,hWnd&,Message&,wParam&,lParam&)
EndIf
ENDPROC
Conjunto("FastMode", 1)
Ventana 0,0 -640,440
LET P_A$=@INPUT$("Adresse el TimerProc:","Funktionsadresse",@STR$(@ProcAddr("TimerProc",4)))
IF P_a$=""
FIN
más
LET P_A&=@VAL(P_A$)
endif
OldWndProc& = ~GetWindowLong(%hWnd,~GWL_WNDPROC)
~SetWindowLong(%hWnd,~GWL_WNDPROC,@ProcAddr("Timer_Sub",4))
LET hButton%=@Crear("Button",%hWnd,"Ende",10,100,100,24)
TimerID& = ~SetTimer(%HWND,333,20000,P_A&)
Claro Ende%
Sinestar encargado Ende%
WaitInput
If %Key = 2
Ende% = 1
ElseIf @Clicked(hButton%)
Ende% = 1
EndIf
EndWhile
~KillTimer(%HWND,333)
~SetWindowLong(%hWnd,~GWL_WNDPROC,OldWndProc&)
End
Proc TimerProc
Parámetros 1&,2&,3&,4&
Localizar 2,0
Imprimir "TimerProc encima Adresse aufgerufen: "+@STR$(3&)
ENDPROC
Como uno sieht, erreicht el Temporizador el WndProc nada. Gib veces en el Editar 0 una, en lugar de el Adresse - entonces siehts anders de.
Hier una vez más con externer DLL (como Yo el meinte): El DLL KompilierenMarcaSeparación y aquí el Hauptprogramm KompilierenMarcaSeparaciónDEF @GetDlgCtrlID(1) !"USER32","GetDlgCtrlID"
DEF @ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
DEF @GetProcAddress(2) !"KERNEL32","GetProcAddress"
Testprogramm Temporizador
Profano Versión 9
$H Windows.ph
-Main----------------------------------------------------------------
Declarar Ende%,DLL&,P_A&
Declarar TimerID&,Crear%,T_Text&,Test#
LET DLL&=@Usedll("Thread.DLL")
Ventana de Estilo 26+512
Título de la ventana "Timertest PHU-60"
Ventana 100,100 - 370,200
cls
Usermessages $10
LET P_A&=@GetProcAddress(DLL&,"_timer@16")
Imprimir P_A&,DLL&
Let T_TEXT&=@CREATETEXT(%HWND,"",30,30,300,30)
-Menue---------------------------------------------------------------
PopUp "&Programm"
AppendMenu 108,"&Einstellungen"
AppendMenu 109,"&Ende"
Ende% = 0
Temporizador conjunto (4x pro Sekunde, 250ms)
TimerID& = ~SetTimer(%HWND,T_TEXT&,25,P_A&)
Sinestar encargado Ende%
WaitInput
IF %UMESSAGE=$10
LET ENDE%=1
endif
If @MenuItem(108)
Einstellungen
Endif
If @MenuItem(109)
~KillTimer(%HWND,T_TEXT&)
Ende% = 1
Endif
Wend
~KillTimer(%HWND,T_TEXT&)
FreeDLL DLL&
End
-Proc Einstellungen
Proc Einstellungen
Declarar hD%, hA%, hB%, OK%, hTime%
Declarar hF1%, hT1%
Claro OK%
Dialogfenster erzeugen
hD% = @Crear("Dialog",%hWnd,"Einstellungen",%WinLeft+80,%WinTop+155,230,190)
hF1% = @Crear("Font",Arial,16,0,0,0,0)
hT1% = @Crear("Text",hD%,"Einstellungen...",10,10,220,20)
SetFont hT1%,hF1%
hTime% = @Crear("TimeEdit", hD%, "00:00:00", 10, 35, 70, 24)
hB% = @Crear("Button",hD%,"&Nachstellen",10,120,100,28)
hA% = @Crear("Button",hD%,"&Abbrechen",120,120,100,28)
Sinestar encargado Ok%
WaitInput
If @ButtonClicked(hB%) Nachstellen
Ok% = 1
Aktionen hier
ElseIf @ButtonClicked(hA%) Alto
Ok% = 1
ElseIf (%Key = 2) ALT+F4 o schließen
Ok% = 1
EndIf
EndWhile
DeleteObject hF1%
@DestroyWindow(hD%)
ENDPROC
-Procedimiento el en cierto Zeitintervallen ausgefuehrt se (4x pro Sekunde)
Proc Temporizador
Parámetros P1&,P2&,P3&,P4&
Dim Test#,1000000
Inc Timer_Busy%
Settext P3&,"Timer:" + @str$(Timer_Busy%) + " Durchläufe"
Disponer Test#
ENDPROC
Funktioniert ebenfalls. Und hier para Vergleich sin DLL: KompilierenMarcaSeparaciónDEF @GetDlgCtrlID(1) !"USER32","GetDlgCtrlID"
DEF @ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
DEF @GetProcAddress(2) !"KERNEL32","GetProcAddress"
Testprogramm Temporizador
Profano Versión 9
$H Windows.ph
-Main----------------------------------------------------------------
Declarar Timer_Busy%,Ende%
Declarar TimerID&,Crear%,T_Text&,Test#
Ventana de Estilo 26+512
Título de la ventana "Timertest PHU-60"
Ventana 100,100 - 370,200
cls
Usermessages $10
Let T_TEXT&=@CREATETEXT(%HWND,"",30,30,300,30)
-Menue---------------------------------------------------------------
PopUp "&Programm"
AppendMenu 108,"&Einstellungen"
AppendMenu 109,"&Ende"
Ende% = 0
Temporizador conjunto (4x pro Sekunde, 250ms)
TimerID& = ~SetTimer(%HWND,T_TEXT&,25,@ProcAddr("Timer",4))
Sinestar encargado Ende%
WaitInput
IF %UMESSAGE=$10
LET ENDE%=1
endif
If @MenuItem(108)
Einstellungen
Endif
If @MenuItem(109)
~KillTimer(%HWND,T_TEXT&)
Ende% = 1
Endif
Wend
End
-Proc Einstellungen
Proc Einstellungen
Declarar hD%, hA%, hB%, OK%, hTime%
Declarar hF1%, hT1%
Claro OK%
Dialogfenster erzeugen
hD% = @Crear("Dialog",%hWnd,"Einstellungen",%WinLeft+80,%WinTop+155,230,190)
hF1% = @Crear("Font",Arial,16,0,0,0,0)
hT1% = @Crear("Text",hD%,"Einstellungen...",10,10,220,20)
SetFont hT1%,hF1%
hTime% = @Crear("TimeEdit", hD%, "00:00:00", 10, 35, 70, 24)
hB% = @Crear("Button",hD%,"&Nachstellen",10,120,100,28)
hA% = @Crear("Button",hD%,"&Abbrechen",120,120,100,28)
Sinestar encargado Ok%
WaitInput
If @ButtonClicked(hB%) Nachstellen
Ok% = 1
Aktionen hier
ElseIf @ButtonClicked(hA%) Alto
Ok% = 1
ElseIf (%Key = 2) ALT+F4 o schließen
Ok% = 1
EndIf
EndWhile
DeleteObject hF1%
@DestroyWindow(hD%)
ENDPROC
-Procedimiento el en cierto Zeitintervallen ausgefuehrt se (4x pro Sekunde)
Proc Temporizador
Parámetros P1&,P2&,P3&,P4&
Dim Test#,1000000
Inc Timer_Busy%
Settext P3&,"Timer:" + @str$(Timer_Busy%) + " Durchläufe"
Disponer Test#
ENDPROC
qué otra vez el Fehler verursacht. Meiner Meinung después de liegt dieses spezielle Problema wirklich a WM_TIMER - pero yo beim besten Willen kein Experte y lasse mich auch gern (al liebsten por beweisfähige Fuente) vom Gegenteil überzeugen. |
| | | | |
| |  | Und esta drei Fuente wären como bajo anderem auch todavía interessant: KompilierenMarcaSeparaciónDEF @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
KompilierenMarcaSeparaciónDEF @GetDlgCtrlID(1) !"USER32","GetDlgCtrlID"
DEF @ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
DEF @GetProcAddress(2) !"KERNEL32","GetProcAddress"
Testprogramm Temporizador
Profano Versión 9
$H Windows.ph
-Main----------------------------------------------------------------
Declarar Timer_Busy%,Ende%
Declarar TimerID&,Crear%,T_Text&,Test#,T_TEXT2&
Declarar OldWndProc&,DLL&,P_A&
LET DLL&=@Usedll("Send.DLL")
Ventana de Estilo 26+512
Título de la ventana "Subclassingtest 2"
Ventana 100,100 - 370,200
Let T_TEXT&=@CREATEButton(%HWND,"",30,80,300,30)
Let T_TEXT2&=@CREATEButton(%HWND,"Ende",30,120,300,30)
Waitinput
Conjunto("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))
Imprimir TimerID&
Sinestar encargado 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
Declarar hD%, hA%, hB%, OK%, hTime%
Declarar hF1%, hT1%
Claro OK%
Dialogfenster erzeugen
hD% = @Crear("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% = @Crear("Font",Arial,16,0,0,0,0)
hT1% = @Crear("Text",hD%,"Einstellungen...",10,10,220,20)
SetFont hT1%,hF1%
hTime% = @Crear("TimeEdit", hD%, "00:00:00", 10, 35, 70, 24)
hB% = @Crear("Button",hD%,"&Nachstellen",10,120,100,28)
hA% = @Crear("Button",hD%,"&Abbrechen",120,120,100,28)
Sinestar encargado Ok%
WaitInput
If @ButtonClicked(hB%) Nachstellen
Ok% = 1
Aktionen hier
ElseIf @ButtonClicked(hA%) Alto
Ok% = 1
ElseIf (%Key = 2) ALT+F4 o schließen
Ok% = 1
EndIf
EndWhile
DeleteObject hF1%
@DestroyWindow(hD%)
ENDPROC
Proc Sub
Parámetros hWnd&,Message&,wParam&,lParam&
Inc Timer_Busy%
Settext T_Text&,"Timer: " + @str$(Timer_Busy%) + " Durchläufe"
ENDPROC
KompilierenMarcaSeparación Der Fehler ha also wohl nichts con Subclassing a tun - oder qué media du genau? |
| | | | |
|
RespuestaThemeninformationenDieses Thema ha 4 subscriber: |