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

Visual Basic 6.0 - jak użyć GetFocus do sprawdzenia aktywności okna Form?

San_Sandale 31 Gru 2011 17:02 2308 13
REKLAMA
  • #1 10329591
    San_Sandale
    Poziom 10  
    Posty: 24
    Potrzebuję napisać funkcję, która sprawdza, czy konkretny Form (należący do projektu) jest oknem aktywnym czy nie. Próbowałem rozwiązać to poprzez warunek
    Kod: text
    Zaloguj się, aby zobaczyć kod

    lecz warunek za każdym razem zwracał wartość True (testowane na win7 32 i 64 bit, xp 32 bit). Przekopałem mnóstwo haseł w google i jedyne, co znalazłem, to wzmianka, że można to zastąpić funkcją GetFocus. Nie udało mi się znaleźć na tyle opisanego przykładu użycia GetFocus, by samemu coś na tym napisać.
  • REKLAMA
  • #2 10331312
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Może
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #3 10333001
    San_Sandale
    Poziom 10  
    Posty: 24
    Próbowałem. Właśnie problem z tym .activeform jest taki, że niezależnie od tego, które okno jest aktywne, wskazuje ona na form1 (testowane na przedstawionych w pierwszym poście platformach). Zaczynam myśleć, czy może po prostu ja coś robię nie tak. Jeśli ktoś napisał u siebie tę funkcję z użyciem .activeform i działa ona poprawnie, to byłbym wdzięczy za przesłanie plików projektu
  • #4 10336366
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Funkcja (dla testów) z oknem komunikatu zajmie jedną linijkę. Pytanie skąd i przy jakim zdarzeniu chcesz ją wywoływać? Jaki jest cel takiego sprawdzania?
  • REKLAMA
  • #5 10336696
    San_Sandale
    Poziom 10  
    Posty: 24
    Konkretnie, to zależy mi na tym, aby uaktywnić niektóre funkcje programu wtedy, kiedy jego okno jest aktywne, a pewne, kiedy nie jest. Do tego właśnie potrzebna jest mi funkcja sprawdzająca aktywność tego okna. Własność screen.activeform sprawdzałem na programie, który co 0,5sec zmieniał napis na label'u na nazwę aktywnego forma
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Za każdym razem zwracało mi nazwę tego samego okna (Form1)
  • #6 10336901
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    San_Sandale napisał:
    Konkretnie, to zależy mi na tym, aby uaktywnić niektóre funkcje programu wtedy, kiedy jego okno jest aktywne, a pewne, kiedy nie jest.
    To raczej nie z poziomu VB. Można ew. oprogramować zdarzenia formy
  • REKLAMA
  • #7 10336918
    San_Sandale
    Poziom 10  
    Posty: 24
    No dobrze... tylko jak oprogramować to, że w momencie, gdy okno przestaje być aktywne program wysyłał odpowiednią informację przez socket? Wydaje mi się, że rozwiązanie tego problemu sprowadzi się do napisania własnie tej funkcji...
  • #8 10336928
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    adamas_nt napisał:
    San_Sandale napisał:
    Konkretnie, to zależy mi na tym, aby uaktywnić niektóre funkcje programu wtedy, kiedy jego okno jest aktywne, a pewne, kiedy nie jest.
    To raczej nie z poziomu VB. Można ew. oprogramować zdarzenia formy
    Spróbuj z form activate/deactivate...
  • #9 10337890
    San_Sandale
    Poziom 10  
    Posty: 24
    Nie pomogło.
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Cały czas napis przedstawia 1
  • #10 10344846
    San_Sandale
    Poziom 10  
    Posty: 24
    Naprawdę liczę na pomoc... Ten skrypt jest mi bardzo potrzebny.
  • #11 10350669
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Prosty przykład z wykorzystaniem funkcji uruchamianej przy aktywowaniu okna (VB5).
    Załączniki:
    • Test.zip (2.43 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #12 10351300
    San_Sandale
    Poziom 10  
    Posty: 24
    Nie o to chodziło. Może spróbuję wytłumaczyć, co mam na myśli mówiąc aktywne: Okno staje się aktywne, kiedy po zminimalizowaniu uruchamiam je z paska zadań. Okno jest aktywne, kiedy poprzez kombinację alt-tab przeskoczę do niego. Okno staje się aktywne wtedy, kiedy kliknę w nie, a przestaje być, gdy kilknę w inne lub w pulpit.
  • Pomocny post
    #13 10355346
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Teraz rozumiem. Nic gotowego nie mam, ale znany wszystkim wujek znalazł taki dość obiecujący przykład Link
    Sprawdziłem w VB 5.0 działa pięknie. Dla lepszego zobrazowania za linią
    Form1.Caption = "Focus Restored"
    
    wstawiłem sobie komunikat
    MsgBox Screen.ActiveForm.Name
    


    Efekt:

    Visual Basic 6.0 - jak użyć GetFocus do sprawdzenia aktywności okna Form?
  • #14 10355795
    San_Sandale
    Poziom 10  
    Posty: 24
    Pomogło :) Dzięki wielkie za pomoc oraz upartość przy starciu z moim nieogarnianem :D

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik poszukiwał sposobu na sprawdzenie, czy konkretne okno Form w Visual Basic 6.0 jest aktywne. Napotkał problemy z użyciem właściwości screen.activeform, która zawsze zwracała wartość True dla form1, niezależnie od aktywności innych okien. Użytkownicy sugerowali różne podejścia, w tym wykorzystanie zdarzeń Form Activate/Deactivate oraz funkcji GetFocus. Ostatecznie, po wielu próbach, użytkownik znalazł działające rozwiązanie, które umożliwiło mu sprawdzenie aktywności okna, co pozwoliło na odpowiednie uruchamianie funkcji programu w zależności od stanu aktywności okna.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA