logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak w Visual Basic 6.0 wprowadzić opóźnienie podobne do wait(czas)?

miki5454 09 Mar 2005 12:04 2627 7
REKLAMA
  • #1 1300049
    miki5454
    Poziom 11  
    Posty: 18
    Jest w Visual Basicu jakieś polecenie opóznienia (cos w stylu "wait (czas)") ?
  • REKLAMA
  • #2 1300602
    ZeeWolf
    Poziom 28  
    Posty: 989
    Pomógł: 115
    Ocena: 58
    Witam. W WinAPI raczej nie korzysta sie z akcji typu Delay() :). Uzyj kontrolki Timer - ustaw odpowiedni czas i zareaguj na komunikat od tej kontrolki (chyba OnTimer). Dziala to tak, ze Timer, po ustawieniu np: 400ms co 400ms generuje komunikat OnTimer. Dalej powinienes sobie poradzic. Jak nie, to pisz. Pozdrawiam.
  • REKLAMA
  • #3 1312650
    jakubbulas
    Poziom 16  
    Posty: 227
    Pomógł: 8
    Ocena: 2
    No tak, wszystko byłoby super gdyby nie to, że kontrolka Timer nie wstrzymuje akcji całego programu. A chyba o to chodziło, a jak nie to ja czegoś takiego poszukuję.
    Narazie moim rozwiązaniem jest wykorzystanie parametru Timer, który zwraca sekundy i ich setne części i tworzę pętle aż nie uzyska czasu początkowego + x sekund (a to daje sporą dokładność).
  • REKLAMA
  • #4 1317170
    ZeeWolf
    Poziom 28  
    Posty: 989
    Pomógł: 115
    Ocena: 58
    Wstrzymywanie programu (tak jak to mialo miejsce przy uzyciu delay w pascalu) jest mocno niewskazane. Dlaczego? Np: ustawiasz opoznienie na 20s, a w tym czasie program jest zatrzymany - nie mozna go zamknac, nie odrysowuje okna itp. Do zablokowania programu mozna uzyc prostej sztuczki - wywolac modalnie dowolny dialog box (np: messagebox). A najlepiej okreslic, czego program ma nie robic i przechwytywac odpowiednie komunikaty. Pozdrawiam.
  • REKLAMA
  • #5 1365163
    amator
    Poziom 22  
    Posty: 677
    Pomógł: 29
    Ocena: 37
    Witam.
    Jak napisał poprzednik takie opóźnienie nie jest wskazane. A jeżeli koniecznie potrzebujesz poniżej masz opdowiednik Pascal'owskiego DELAY.
    Deklarujemy funkcję Sleep:
    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

    Natomiast w kodzie programu piszemy (musisz mieć labla na formie):
    Label1.Caption = "Demo funkcji Sleep - 2 sekundy"
    Label1.Refresh
    Sleep 2000 ' 2000 milisekund = 2 sekundy
    Label1.Caption = "Juz koniec ..."
    Label1.Refresh 'odśwież labla
    

    Pozdrawiam.
  • #6 2506047
    nakla
    Poziom 12  
    Posty: 57
    Ocena: 5
    Mam pytanie.
    Jak w Vb 6 zrobić aby poszczególne komórki z tabeli czytać co pewien interwał.
    Naprzykład :
    for i=0 to 10
    text1.text = tablica(i)
    "funkcja z czasem której nie znam"
    next i

    Wyżej napisany moduł będzie częscia programu. Interwał ma być od 1µS do 1 sekundy. Ustale o doświadczalnie.
    Z góry dzięki.
  • #7 2506281
    amator
    Poziom 22  
    Posty: 677
    Pomógł: 29
    Ocena: 37
    Witam,
    najlepiej ustawić Timer, wpisać w Interval wartość co jaką mamy odczytywać czas (od 1 ms wzwyż), np 1000 (1 sekunda) i wtedy w kodzie obsługi zdarzenia timer: (zdefiniować zmienną i=0 wcześniej, np przy wczytywaniu formatki)
    Private Sub Timer1_Timer()
    i=i+1
    text1.text = tablica(i)
    if i>10 then i=0
    End Sub

    Prosty podprogram wywołuje się zgodnie z parametrem Interval Timer1.
    Pozdrawiam.
  • #8 5978966
    romantv
    Poziom 17  
    Posty: 328
    Pomógł: 11
    Ocena: 8
    Witam serdecznie Panowie potrzebuję zatrzymać wykonywanie funkcji np. na 100ms


    Function efekt_rozwijania_p_do_l()
    Efekt = 0
    efekt2:


    w tym miejscu



    If Efekt <= 5490 Then
    TV.Foto_tv.Width = Efekt
    Efekt = Efekt + 1
    GoTo efekt2
    End If
    End Function



    Jak to zrobić.

    Jeśli ten kod znajdzie się w : Private Sub Timer2_Timer()

    To jest ok wstawię timer2.interval = 100

    i jest ok.

    Proszę o pomoc dziękuję.

Podsumowanie tematu

LABEL_AI_GENERATED
W Visual Basic 6.0 nie istnieje natywne polecenie typu wait(czas) do wprowadzania opóźnień blokujących wykonanie programu. Zalecanym rozwiązaniem jest użycie kontrolki Timer, która generuje zdarzenia w określonych odstępach czasu (parametr Interval), umożliwiając wykonywanie akcji cyklicznie bez zatrzymywania całego programu. Timer nie wstrzymuje działania aplikacji, co jest korzystne dla responsywności interfejsu. Alternatywnie, można użyć funkcji Sleep z biblioteki kernel32, która wstrzymuje wykonanie na określony czas (w milisekundach), jednak jej stosowanie jest odradzane ze względu na blokowanie interfejsu i brak możliwości obsługi zdarzeń w tym czasie. W przypadku potrzeby odczytu danych z tablicy w określonych interwałach czasowych, Timer z odpowiednio ustawionym Interval i obsługą zdarzenia Timer1_Timer jest efektywnym rozwiązaniem. Blokowanie programu na czas opóźnienia (np. pętlą oczekującą na upływ czasu) jest niewskazane, gdyż uniemożliwia zamknięcie aplikacji i odświeżanie okien. W sytuacjach wymagających zatrzymania funkcji na krótki czas można rozważyć wywołanie modalnego okna dialogowego lub zastosowanie Timer z odpowiednią logiką sterującą.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA