Hej Vill du att fönstret ska vara övers i din applikation öppnar du formuläret med "Form1.Show vbModal", vill du att det ska ligga över alla program gör du såhär: http://www.devx.com/vb2themax/Tip/18280 Doevents är kan ställa till det. Vad DoEvents gör aär att den behandlar nästa meddelande i meddelande kön. T.Ex. Att man trycker på avbryt knappen. Men vad händer om man trycker på start knappen igen eller om man försöker stänga fönstret? Man kan få alla sorts oförväntade resultat. Hej Oops =) Ett annat sätt att lösa detta med Loop och knapptryckning är enl. denna princip. Är förvisso klar med denna delen av uppdraget men det är ännu en intressant lösning att testa :)VB6. Fönster alltid överst och avbryta en loop med knapptryckning
Jag har tidigare sett kod för hur man gör om man vill ha sitt fönster till att bli (och förbli) överst - det var något med att det skulle vara modal eller så. Jag vore tacksam om någon antingen kunde hänvisa till några exempel eller kan förklara hur jag gör?
Jag har även problem med att mitt program "inte lyssnar på knapptryckningar". I ett fall är det en timer som körs och i ett annan fall är det en while loop som körs. Jag har sett ett svar där man fick förslaget att köra ett doEvent() anrop men jag blev inte klokare för det. Fick det helt enkelt inte att fungera. Vad menas med "doEvent" anrop? Är det en funktion som jag själv skall skriva?
Har även sett att det tidigare funnits länkar (flera år gamla) till en sida där man kunde lära sig API programmering men den sidan tycks vara borta nu :( Är det någon som vet en bra sida, någon bra bok eller något bra verktyg så att en nybörjare som jag kan komma igång på ett snabbt och effektivt sätt? Det vore trevligt att kunna vara med och bidra till lösningarna någon gång i framtiden..
Tack på förhand
AlexSv: VB6. Fönster alltid överst och avbryta en loop med knapptryckning
Om det är en loop du kör kan du lägga in kommandot DoEvents i loopen, såhär t.ex:
Do Until x
'gör något här
DoEvents
Loop
/JohanSv:VB6. Fönster alltid överst och avbryta en loop med knapptryckning
Här är ett lite exempel:
Private Abort As Boolean
Private Sub AbortButton_Click()
Abort = True
End Sub
Private Sub StartButton_Click()
Dim I As Long
StartButton.Enabled = False
AbortButton.Enabled = True
Do Until Abort
I = I + 1
Text1.Text = I
DoEvents
Loop
Abort = False
AbortButton.Enabled = False
StartButton.Enabled = True
End Sub
Om du försöker stänga fönstret kommer den fortsätta att köra i bakgrundem.
Man kan fixa det med:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If AbortButton.Enabled Then
Select Case MsgBox("You ar running a task." + vbCrLf + _
"If you close this window you will abort this task." + vbCrLf + _
"Do you want to abort this task?", vbExclamation Or vbYesNo)
Case vbYes
Abort = True
Cancel = True
Case Else
Cancel = True
End Select
End If
End Sub
Vilket först avbryter det som görs.
Du bör visa en dialog för att hindra anväåndaren som visar progress samt möjlighet att avbryta.
Sv:VB6. Fönster alltid överst och avbryta en loop med knapptryckning
Tack för svaret ..
Har dröjt lite då jag ville se att jag fick det att fungera först - och det tycks det göra :)
Är dock fortfarande lite osäker då det till viss del liknar den kod som redan används och som även använder en timer för att säkerställa att fönstret ligger överst. Jag vill ha bort timern..
Jag har även använt mig av DoEvents på ett sätt som jag tror skall fungera bra :)
Många tack
AlexSv: VB6. Fönster alltid överst och avbryta en loop med knapptryckning
Trodde att jag svarade till var och en men det visade sig bara bli en tråd.
Man lär så länge man lever :)
Hur som helst så får ni bägge ha ett stort tack :)
Lösningarna tycks fungera bra.
Hälsningar
AlexSv:VB6. Fönster alltid överst och avbryta en loop med knapptryckning
<code>
Option Explicit
Private Declare Function GetInputState Lib "user32" () As Long
Private Sub Command1_Click()
Dim i As Long
Do Until i > 2147483000
i = i + 1
'do youre stuff here
If GetInputState() Then DoEvents
Loop
End Sub
</code>Sv: VB6. Fönster alltid överst och avbryta en loop med knapptryckning
Undrar bara om det även går att bestämma vilka "input" som den skall reagera på?
Till exempel "om knapp x trycks ner eller om tangentkombinationen ctrl+alt+delete trycks ner" och så vidare..
Tack :)
/ Alex