Problem z ustawieniem focusa okna

dział ogólny

Problem z ustawieniem focusa okna

Nowy postprzez kurczez » Å›roda, 20 stycznia 2010, 11:38

Chcę aby wątek ustawiał focus obiektu, którym jest Scintilla. Robię to w ten sposób:

Robię to w ten sposób:

Kod: Zaznacz cały
dnM[wez]->SetFocus();


Próbowałem jeszcze:
Kod: Zaznacz cały
dnM[wez]->Show();


Następnie sprawdzam czy okno jest aktywne [czy dnM[wez]->Focused() == true]. Niestety funkcja zwraca wartość false. Natomiast jeśli sam zaznaczę kontrolkę Scintilli myszką a następnie sprawdzę focus okna to zwraca wartość true.
Avatar użytkownika
kurczez
Homos antropiczny
Homos antropiczny
 
Posty: 56
Dołączył(a): sobota, 10 października 2009, 18:58
PodziÄ™kowaÅ‚ : 4
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Vista
Kompilator: Turbo C++
Gadu Gadu: 0
    Windows VistaFirefox

Re: Problem z ustawieniem focusa okna

Nowy postprzez Cyfrowy Baron » Å›roda, 20 stycznia 2010, 11:49

Czy Ty przypadkiem nie umieszczasz tych komponentów na zakładkach TabSheet, bo jeżeli tak to musisz przywołać zakładkę, a dopiero potem komponent na zakładce.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Problem z ustawieniem focusa okna

Nowy postprzez kurczez » Å›roda, 20 stycznia 2010, 12:01

dnM[wez] znajduje siÄ™ na obiekcie typu TTabControl natomiast obiekt typu TTabControl na obiekcie TPanel.
Spróbowałem zrobić tak jak piszesz, ale to nie pomaga:

Kod: Zaznacz cały
   
Form2->Panel7->SetFocus();
Form2->TabControl2->SetFocus();
dnM[wez]->SetFocus();
Avatar użytkownika
kurczez
Homos antropiczny
Homos antropiczny
 
Posty: 56
Dołączył(a): sobota, 10 października 2009, 18:58
PodziÄ™kowaÅ‚ : 4
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Vista
Kompilator: Turbo C++
Gadu Gadu: 0
    Windows VistaFirefox

Re: Problem z ustawieniem focusa okna

Nowy postprzez Cyfrowy Baron » Å›roda, 20 stycznia 2010, 12:18

Musisz najpierw przywołać właściwą zakładkę, ale nie poprzez SetFocus tylko podając numer tej zakładki:

Kod: Zaznacz cały
TabControl1->TabIndex = 2;
dnM[wez]->SetFocus();


A co oznacza to adresowanie przez Form2.

O focusie musisz wiedzieć jedno, tylko jeden obiekt w całym programie może przejąć focus, a to oznacza, że jeżeli ustawisz focus na jakimś obiekcie, a potem klikniesz na inny obiekt to focus przejdzie na ten inny obiekt.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Problem z ustawieniem focusa okna

Nowy postprzez kurczez » Å›roda, 20 stycznia 2010, 12:28

Tak oczywiście zakładka jest wybrana.
Wiem, że focus może być tylko na jednym obiekcie i bezskutecznie staram się go ustawić na dnM[wez]. Jeśli kliknę w tą kontrolkę [dnM[wez]] to focus się ustawia bez problemu i program działa. Natomiast nie udaje mi się ustawić focusa kodem.
Avatar użytkownika
kurczez
Homos antropiczny
Homos antropiczny
 
Posty: 56
Dołączył(a): sobota, 10 października 2009, 18:58
PodziÄ™kowaÅ‚ : 4
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Vista
Kompilator: Turbo C++
Gadu Gadu: 0
    Windows VistaFirefox

Re: Problem z ustawieniem focusa okna

Nowy postprzez Cyfrowy Baron » Å›roda, 20 stycznia 2010, 12:33

Podaj cały kod łącznie ze zdarzeniem w którym jest wywoływany.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Problem z ustawieniem focusa okna

Nowy postprzez kurczez » Å›roda, 20 stycznia 2010, 12:48

Po stworzeniu dnM[dnie] wywołuje wątek:

Kod: Zaznacz cały
CreateThread( NULL, 0, nSt, 0, 0, &threadID);


Kod: Zaznacz cały
DWORD WINAPI nSt( LPVOID lpParam )
{
   //Form2->Panel7->SetFocus();
   //Form2->TabControl2->SetFocus();
   Form2->TabControl2->TabIndex = wez+1;
   dnM[wez]->SetFocus();
   ::Sleep(3000);
   dnM[wez]->SetFocus();
   dnM[wez]->Lines->Text = Form2->Memo10->Text; // po przypisaniu wartocÅ›ci z Memo10 dnM[wez] sprawdza czy jest na nim focus

   return 0;
}


Jeśli w ciągu 3 sekund od odpalenia wątku nacisnę na kontrolkę dnM[wez] to wszystko działa pięknie, ale jeśli tego nie zrobię to nie pobierze focusa aktywnego okna i program się wykracza. Gdyby nikt nie miał pomysłu jak to ugryźć to najwyżej użyje alternatywnego sposobu sprawdzenia, które okno jest aktualnie wybrane [sprawdzę, która zakładka jest wybrana w TabControl2].
Avatar użytkownika
kurczez
Homos antropiczny
Homos antropiczny
 
Posty: 56
Dołączył(a): sobota, 10 października 2009, 18:58
PodziÄ™kowaÅ‚ : 4
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Vista
Kompilator: Turbo C++
Gadu Gadu: 0
    Windows VistaFirefox

Re: Problem z ustawieniem focusa okna

Nowy postprzez Cyfrowy Baron » Å›roda, 20 stycznia 2010, 12:53

Ja nie mam pojęcia co Ty tam wyczyniasz w tym kodzie. Odnoszę wrażenie, że masz tam straszny bałagan. Problemu nie stwarza funkcja SetFocus, lecz kod ogólnie. Sam musisz dojść co jest źle, gdyż nikt nie będzie analizował w całości kodu Twojego programu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Problem z ustawieniem focusa okna

Nowy postprzez kurczez » Å›roda, 20 stycznia 2010, 13:10

Okazało się, że problem ustawieniem focusa okna był przez wątek. Zrobiłem to poza wątkiem i zadziałało.
Avatar użytkownika
kurczez
Homos antropiczny
Homos antropiczny
 
Posty: 56
Dołączył(a): sobota, 10 października 2009, 18:58
PodziÄ™kowaÅ‚ : 4
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Vista
Kompilator: Turbo C++
Gadu Gadu: 0
    Windows VistaFirefox


Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 10 gości