Nu kender jeg ikke lige VBasic, men jeg har da en smule programmeringserfaring i C++... Noget i denne her retning vil virke (det bliver i C, men du fatter nok meningen):
If(tjek vindues flyt) { for(I = 0; I < 10000; I++) //Der er her den loop\'er { cursorposition = Hvor musen er på skærmen If(cursorposition != oldcursorposition) { flyt vindue } oldcursorposition = cursorposition } } Selvfølgelig skal det gøres så den tjekker både musens x&y... det kan også være du ikke behøves det i VB, det ved jeg ikke... Ideen er simpelthen at hver gang den har talt et tal tjekker den om der skal laves noget, istedet for:
Grunde til at det script du har lavet er lidt langsomt er på grund af alle de kald til DoEvents!
Denne funktion frigiver ALT hvad VB programmet har allokeret og i den dur hvilket alligevel tager lidt tid. Og hvis dett så gøre rigtig mange gange kan det sænke hastigheden meget!
Det her virker i VB 6.0. Husk at tallet i Call Pause() er millisekunder, du skal eks skrive 5000 for at skabe en pause på 5 sekunder.
Private Declare Function GetTickCount Lib \"kernel32\" () As Long
Private Sub Command1_Click() Call Pause(5000) End Sub
Private Sub Pause(lngMilliseconds As Long) Dim lngTmr As Long lngTmr = GetTickCount Caption = \"Pause\" While lngTmr + lngMilliseconds > GetTickCount DoEvents Wend Caption = \"Run\" End Sub
DoEvents gør det muligt at flytte vinduet mens timeren kører. Jo flere gange i løbet at x millisekunder man kalder DoEvents, jo oftere bliver flytningen af vindue, mus, keyboard og alle de programmer der måtte kører i windows opdateret.
Prøv dog den kode jeg har skrevet, det kører som smurt.
VB koden kører langsommere når den hele tiden skal checke for user-inputs, og holde styr på \"baggrunds-programmer\" og services. Men her er det jo netop meningen at afviklingen af koden skal køre langsomt. Helst så langsomt at det virker som om det er gået i stå.
Men ok, afprøv din teori, brug denne i stedet.
Private Sub Pause(lngMilliseconds As Long) Dim lngTmr As Long lngTmr = GetTickCount Caption = \"Pause\" While lngTmr + lngMilliseconds > GetTickCount \' Wend Caption = \"Run\" End Sub
Her bliver DoEvents slet ikke brugt, det betyder så også at windows \"fryser\" mens der er pause i programmet.
Det er jo en helt anden sag. Jeg plejer at have en unload sekvens hvor jeg unloader alle objekter og komponenter som er indlæst. Denne sekvens kunne i dette tilfælde være på en enkelt linie og ligge i Form_Unload
Private Sub Form_Unload(Cancel As Integer) End End Sub
Men det har ikke noget med pause funktionen at gøre - det kan jo også lavets på snart en mill. måder, det afhænger helt af hvad programmet er designet til.
Uanset hvisken pause du laver så opdaterer programmet ikke mens du resizer eller flytter vinduet.
Sådan er det med vindows og mig bekendt kan du kun komme uden om med noget hardcore C++ programmering. Men du skal da være velkommen til at se om du kan skrive en stump kode der gør det bedre.
Eller også skal du bare lave et COM objekt, der håndtere pausen og herefter smider et event når denne pause er gået! Dette kan så laves via en timer i VB og vil gøre at du slipper for at spekulere over DoEvents og ting som denne! Jeg ved ikke om det er lettere! Umiddelbart ville jeg mene at det ikke er!
Hmmm... Jeg kender ikke meget til kryptering, jeg bruger kun base64 encoding, og det er jo ikke ligefrem kryptering. Men hvis jeg skulle krypterer noget som helst ville jeg smide alle funktioner der har med kryptering at gøre i en lille DLL (som selvfølgeligt skal understøtte Component Object Modal så den også kan bruges af VBScript og ASP).
Den måde jeg håndterer ventetid og pauser minder meget om det nolle har postet, men ikke helt. Jeg bruger callback eller notify, men det vil jeg ikke prøve på at forklarer her, da jeg er ret ny i den del af Windows API.
Jeg vil mene, at det altid er at foretrække at brugeren har mulighed for at afbryde en vilkårelig operation. Uanset hvor meget visuel information der gives til brugeren vil der altid være en, der vil lave noget andet mens en operation foregår!!
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.