Hej, jag har ett program med två timers i. Nu behöver jag köra programet som en service, vad jag hört så går inte detta om programet är grafiskt så jag tänkte göra det som modul, men hur gör jag med mina timers? hej, nu har jag kollat men det var ju enbart vanliga formulär, testade att använda moduler men får inte detta att funka. Kan ingen ge mig tips på hur man kan göra timers i en modul? jag skall starta programmet som en service och då får man visst inte ha nått grafiskt med. Hej, jag har suttit o tragglat med detta, kan inte du vara snäll o koda ihop en ENKEL timer som jag sedan kan utveckla? Länken pekade visst inte dit jag menade... http://www.mvps.org/vb/controls.htm menade jag, jag har inte testat själv men tror inte man ska behöva ett formulär. Men om det går att lösa med API snyggt kanske det är att föredra. Hej, detta är den sida jag hittade förrut, trots att den inte visade rätt, däremot fattar jag inte hur jag ska kunna använda koden i enbart en modul, exempelkoden innehåller ju massa formulär o sånt, knappt moduler så om ingen har nått annat så ger jag upp, vilket inte känns kul men jag kan verkligen inte hitta nån kodsnutt som ger mig nått. Vad jag kan se i hjälpfilerna kan du lika gärna kopiera koden till en modul. Men hur ska det gå till? formulären har ju textrutor som skall ha värden, vad jag kan se? Eller har jag helt fel nu? Hej. Hej Jan Bulér, Nu har jag kollat på koden, skapat dll:en och lagt in koden i en class. (skapat en reference till dll:en är gjord) Är ju rätt enkelt att göra detta... Allt KillTimer gör är att den tar bort en timer som skapats med setTimer. Aha.. Nu fattar jag vad du menar.. Misstag av mig att döpa sub'en till det. Ska ändra omgående, rent tangentbordsfel ;-) Kolla detta nu: Hej igen, Jan Bulér!! Jag undrar varför ditt exempel som du mailade fungerar så bra på winxp men inte på NT4:an? Där fick jag för att jag inte läste doc ordentligt utan kopierade TimerProc def'en.. Den är ju helt fel tyvärr så din idEvent innehåller inte vad du tror. Byt ut mot denna istället så ska det funka: Hej, jag har problem, det funkar okompilerat men ej när jag kompilerat den. Tja du. Nu har ju inte jag din skriv_till_fil class så jag har lite svårt att svara på varför. Men jag har kört din kod med nåt annat istället för dina skriv_till_fil rader och det funkar utmärkt både kompilerat & okompilerat Det enda filen "skriv_till_fil" gör är en fil och det funkar klockrent i designläge, (eller annars med i andra projekt), eller okompilerat om du så vill men icke kompilerat...fattar inte varför???? Någon som ser vad det beror på? Har testat med annan kod istället för skriv_till_fl men inget går. Några funderingar som jag har. --"raden nedan vart får du parametern nIDEvent ifrån borde inte den vara returen från startTimer" Provade att göra lite I/O som du gör och mkt riktigt så funkar det inte då... Varför vet jag inte just nu... Hej, jag stänger filen efter varje läsning, såvida inte timerproceduren hinner köras igen eller så, men om jag tar bort hela den koden, för skrivning till fil och sätter en msgbox där så funkar det inte heller, enbart innan jag kompilerar det hela, kompilerat funkar det inte alls. >kan vara bra att veta om man t.ex har samma timerProc för flera timers (när man nu behöver det??) Jag undrar så smått om det inte har att göra med att du ligger inne i en callback-proc och att IDE't tar hand om det stöket när du kör i design-läge. Jag har fått det att fungera tack vare Pelle, han rekomenderade "sleep" Jag har laggt upp ett exempel i filarean som fungerar hoss mig som kompilerad exe med SetTimer:timer i modul
/BennySv: timer i modul
/BennySv: timer i modul
Jag vet att man lär sig mer på att hålla på själv, därför ber jag bara om en enkel så jag kan greja med den sedan:)Sv: timer i modul
/JohanSv: timer i modul
Tack för er hjälp iaf.
/BennySv: timer i modul
/JohanSv: timer i modul
/BennySv: timer i modul
Jag har en fungerande ActiveX dll (med källkod) som du kan inkludera i ditt projekt för att köra timers i kod.
Jag kan maila det till dig om du vill, det är bara några få kb zipat.
JanneSv: timer i modul
Kan du inte skicka upp det på filarean också, säkert fler som kan ha nytta av det i
framtiden... Plus att då får fler poäng och säkert kan skrapa ihop till en bra bok! =)
/EmmaSv: timer i modul
Fråga: när jag kör projektet med min class så säger den att jag måste ha en form eller sub main för att starta programmet, hur gör jag nu?
EDIT: Jag har löst det, skapade en modul oxå som jag la sub main i.
ändrade koden för withevents till public.
Tack för din hjälp:)Sv: timer i modul
Se [Använda en Timer utan Form]
(flyttade koden dit för att slippa lusa ner en massa plats här)Sv: timer i modul
se http://www.allapi.net/apilist/KillTimer.shtmlSv: timer i modul
Skulle göra koden lite begripligare än hur den var när jag testade... Fort men fel blev detSv: timer i modul
<code>
'*** lite deklarationer
Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Declare Function killTimer Lib "user32" Alias "KillTimer" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Sub main()
startTimer (1000)
End Sub
'*** timer event procedur
Public Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
Static i
Dim skriv As New skriv_till_fil
skriv.strFILNAMN = App.Path & "\hej.txt"
skriv.strSTRÄNG = Time
skriv.skrivlängstner
i = i + 1
If i = 10 Then stopTimer nIDevent 'HÄR BLIR DET FEL!!!!!!!!
'gör vad som nu ska göras när ett timer event kommer
End Sub
'*** Starta timern
Public Function startTimer(interval As Long) As Long
'interval i millisekunder
startTimer = SetTimer(0, 0, interval, AddressOf TimerProc)
End Function
'*** Stoppa timern.. Glöm ej göra detta då det annars ger ett windows-fel
Public Sub stopTimer(idTimer As Long)
' idTimer parametern är den som returnerades av startTimer
killTimer 0, idTimer
End Sub
</code>
Hur ska jag anropa "killtimer"? fattar inte...
En annan sak, när jag kompilerar denna kod så funkar det inte alls, dvs programmet genererar inte textfilen, enbart i designläge.Sv: timer i modul
jag får felmeddelandet :activeX can´t create object och refererar till
Set mtmrX = CreateObject("XTimers.XTimer")
vad är felet?Sv: timer i modul
<code>
Public Sub TimerProc(ByVal hwnd As Long, ByVal uMSG As Long, ByVal nIDEvent As Long, ByVal dwTime As Long)
</code>
Nu ska idEvent innehålla ett vettigt värde för killTimer och det funkar kompilerat för mig då..
Ola... som undrar när han ska lära sig att kolla allt innan han postar... Sv: timer i modul
Det händer inte nått.
koden:
<code>
'*** lite deklarationer
Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Declare Function killTimer Lib "user32" Alias "KillTimer" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Sub Main()
startTimer (1000)
End Sub
'*** timer event procedur
Public Sub TimerProc(ByVal hwnd As Long, ByVal uMSG As Long, ByVal nIDEvent As Long, ByVal dwTime As Long)
Static i
Dim skriv As New skriv_till_fil ' DENNA ÄR EN CLASS SOM SKRIVER EN FIL
skriv.strFILNAMN = App.Path & "\time.txt"
skriv.strSTRÄNG = Now
skriv.skrivlängstner
'gör vad som nu ska göras när ett timer event kommer
If i = 2 Then stopTimer nIDEvent 'STOPPAR EFTER 2 SEKUNDER
i = i + 1
End Sub
'*** Starta timern
Public Function startTimer(interval As Long) As Long
'interval i millisekunder
startTimer = SetTimer(0, 0, interval, AddressOf TimerProc)
End Function
'*** Stoppa timern.. Glöm ej göra detta då det annars ger ett windows-fel
Public Sub stopTimer(idTimer As Long)
' idTimer parametern är den som returnerades av startTimer
killTimer 0, idTimer
End Sub
</code>Sv: timer i modul
Sv: timer i modul
Jag kör xp.Sv: timer i modul
raden nedan vart får du parametern nIDEvent ifrån borde inte den vara returen från startTimer?
If i = 2 Then stopTimer nIDEvent
Sedan en fråga till ditt program kommer att skriva till disk flera gånger innan du stoppar timern. Vad händer om du försöker öppna filen innan den föregående skrivningen är klar? Håller du reda på detta?
Jag tycker du borde stoppa timern innan du skriver till fil bara för att det inte skall triggas på nytt innan skrivningen är klar. Sedan när den är klar så startar du den på nytt.
//TobbeSv: timer i modul
Samma event-id finns med som parameter till timerProc (nr 3). Den parmen får du av systemet när den invokerar proc'en, kan vara bra att veta om man t.ex har samma timerProc för flera timers (när man nu behöver det??) eller som här vill stänga av timern vid eventet.
O. Sv: timer i modul
Sv: timer i modul
EDIT: Vore kul om du Cat kunde kolla på varför det inte funkar, jag är inte intresserad av att skriva en fil, det jag vill är att skriva till registret.
MVH / BennySv: timer i modul
Jag kommer behöva två timers så det borde väl vara aktuellt då?:-)Sv: timer i modul
Vad händer egentligen med WM_TIMER event'et när man kör kompilerat och formlöst??
Behöver fundera en stund. Sv: timer i modul
och då funkar det.
Tack Pelle och er andra för er hjälp.Sv: timer i modul
Programarkivet:API Timer i en Unattended Execution EXE