Hi James,
Some time ago I had this problem also. My solution was as follows:
Install a timer in the owner Window of the TabControl
Each TabWindow has its own method TimTick(oEvent)
The method Dispatch(oEvent) sends the oEvent to each Tab Window *******************
METHOD dispatch (oEvent) CLASS dtaTimer
IF oEvent:Message==WM_TIMER
DO CASE
CASE oEvent:wParam == 1 // wParam is the ID of the Timer
ASend(SELF:aTabPages , #TimeTick , oEvent) // Impuls an die TabFenster
senden
// aTabPages is a protect var in the class dtaTimer
// and is filled in the Init as follows:
// SELF:aTabPages := {} // Empfänger für die Zeitimpulse bereitstellen
// FOR nZaehler = 1 TO ALen(SELF:oDCtabTimer:Pages)
// AAdd(SELF:aTabPages , SELF:oDCtabTimer:Pages[nZaehler,3] )
// NEXT nZaehler
// more CASE branches if necessary
ENDCASE
ENDIF
RETURN SUPER:dispatch(oEvent)
*******************
In the Method TimeTick(oEvent) each Window processes the individual method.
See the sample below
*******************
METHOD TimeTick(oE) CLASS Tab_Timer // A timer you van use to boil eggs (g)
* LOCAL cElapsed AS STRING
IF SELF:LAlarmOn == TRUE // Sekundenimpulse durchlassen wenn Timer läuft SELF:cAlarmSound := SELF:oDCcmbSound:Value // Instanzvariable laufend aufdatieren
IF oE:Message == WM_TIMER .AND. oE:wParam == 1
SELF:nSekundenTotal -=1 // Gesamtzeit herunterzählen
SELF:nElapsed +=1 // Abgelaufene Zeit zählen
SELF:oDCtxtElapsed:Textvalue := TString(SELF:nElapsed)
IF SELF:nSekundenTotal <= 0
SELF:oDCtxtElapsed:Textvalue := TString(SELF:nElapsed)
Sound( SELF:oDCcmbSound:Value, 1 )
SELF:pbReset()
SELF:oDCtxtAktiv:Textvalue := "Abgelaufen"
SELF:oDCtxtAktiv:show()
ENDIF
ENDIF
ENDIF
RETURN NIL
*******************
So you can process the Timer inside a method of each tab and not in a func outside.
Is that something you can use?
If necessary I can writ a sample, let me know
Regards
Urs
"James Martin" <
[email protected]> schrieb im Newsbeitrag news:
[email protected]...
This works. Thanks.But it goes to a function outside of the window.I want to run a method of the window I'm running it in. SetTimer(self:handle(),1,1000,@self:RunSome())doesn't work, nor does SetTimer(self:handle(),1,1000,self:RunSome()). I can't send anything SELF as
a parameter.
Running something outside my window is not helping me. Any ideas?
James
On Monday, December 21, 2020 at 4:03:26 PM UTC-5, Jamal wrote:
It seems you are mixing up the Window32 API function SetTimer with VO's Self:Timer()!!
I tested the following which works fine using the SetTimer() function:
CLASS TabControl1_Page1 INHERIT DATAWINDOW
//{{%UC%}} USER CODE STARTS HERE (do NOT remove this line)
protect nTimerHandle as DWORD
method PostInit(oWindow,iCtlID,oServer,uExtra) class TabControl1_Page1
//Put your PostInit additions here
? "RegisterTimer"
self:nTimerHandle := SetTimer(self:handle(),1,1000, @Hello())
return NIL
function Hello() as void pascal
? Time() // print current time
return
Jamal
On 12/18/2020 8:09 AM, James Martin wrote:
This is what I use (It works on the window, but not inside a tabbed window):
METHOD StartTimer() AS VOID PASCAL CLASS HttpHuron
try
IF SELF:lTimerInit
SELF:lTimerInit := FALSE
SELF:StopTimer()
ENDIF
// If there is no timer active
Sleep(100)
IF SELF:nTimerHandle == 0
// Create a new times
SELF:nTimerHandle := SetTimer(SELF:handle(),1,1000,NULL_PTR)
// Call the timer Method
SELF:timer()
SELF:lTimerInit := TRUE
SELF:nTimer := 10
SELF:MTimer := SELF:nTimer
Sleep(100)
ENDIF
ENDTryNoReturncatch
* InfoBox{SELF,"Timer Start " + Str(SELF:nTimer),IIF(SELF:lTimerInit,"Started","Not Started")}:Show()
RETURN
--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)