CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - TUpDown problem z focusem

TUpDown problem z focusem

dział ogólny

TUpDown problem z focusem

Nowy postprzez Corvis » poniedziałek, 4 kwietnia 2011, 13:33

Witam,

Mam na formie TUpDown i w jego metodzie dodałem kod:

KOD cpp:     UKRYJ  
void __fastcall TForm1::UpDown1ChangingEx(TObject *Sender, bool &AllowChange, short NewValue, TUpDownDirection Direction) {
    MessageBoxA(this->Handle,"aaa","bbb",MB_OK|MB_ICONWARNING);
}



Problem polega na tym, że nie mam pojęcia jak zdjąć focusa z UpDown po wywołaniu tego kodu. Zostaje on i ruszanie myszką powoduje zmiany przycisków UpDown. Po naciśnięciu myszki wywołuje mi się znowu kod i aplikacja jest powieszona :-(. Przestawiałem focusa na inne kontrolki i fakt że karetka się przestawia np na edita ale zaznaczenie UpDown zostaje nadal.

Wie ktoś może o co tu chodzi ??
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: TUpDown problem z focusem

Nowy postprzez Cyfrowy Baron » poniedziałek, 4 kwietnia 2011, 13:56

Jedyny sposób na zdjęcie focus-a to przeniesienie go na inny obiekt, coś w tym stylu:

KOD cpp:     UKRYJ  
void __fastcall TForm1::UpDown1ChangingEx(TObject *Sender, bool &AllowChange, short NewValue, TUpDownDirection Direction) {
   Application->MessageBox( L"aaa", L"bbb", MB_OK | MB_ICONWARNING);
   Button1->SetFocu(); // przeniesienie focusa na obiekt Button1
}


Focus zawsze znajduje się na jakimś obiekcie w aktywnym oknie.
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: TUpDown problem z focusem

Nowy postprzez Corvis » poniedziałek, 4 kwietnia 2011, 13:58

No i tak dokładnie robiłem. Ale zauważ, że focus sie zmienia ale zaznaczenie komponentu TUpDown zostaje na nim i nie ma ma możliwości go zdjąć :|
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: TUpDown problem z focusem

Nowy postprzez Cyfrowy Baron » poniedziałek, 4 kwietnia 2011, 14:15

To ma związek z oknem komunikatu, bez niego działa prawidłowo. Nie widzę sposobu na obejście tego problemu. Nie wywołuj komunikatu w tym zdarzeniu.
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: TUpDown problem z focusem

Nowy postprzez Corvis » poniedziałek, 4 kwietnia 2011, 14:23

No dokładnie tak. Jednak coś pomyślę, może da się to obejść.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: TUpDown problem z focusem

Nowy postprzez Corvis » poniedziałek, 4 kwietnia 2011, 14:27

Zrobienie tego tak daje rozwiązanie problemu. Timer na starcie wyłączony, interval na 50 i kod:

KOD cpp:     UKRYJ  
//---------------------------------------------------------------------------
void __fastcall TForm1::UpDown1ChangingEx(TObject *Sender, bool &AllowChange, short NewValue, TUpDownDirection Direction) {
    Edit1->SetFocus();
    Timer1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender) {
     Timer1->Enabled = false;
     MessageBoxA(this->Handle,"aaa","bbb",MB_OK|MB_ICONWARNING);
}
//---------------------------------------------------------------------------
 
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: TUpDown problem z focusem

Nowy postprzez Cyfrowy Baron » poniedziałek, 4 kwietnia 2011, 14:43

Owszem, to rozwiązuje problem, ale czy angażowanie zegara jest warte tutaj tego komunikatu? Czy ten komunikat w zdarzeniu jest potrzebny, czy nie lepiej wprowadzić jakieś ograniczenie zamiast komunikatu?
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: TUpDown problem z focusem

Nowy postprzez Corvis » poniedziałek, 4 kwietnia 2011, 14:49

Ograniczenia są. Ale i komunikat jest potrzebny aby poinformować użytkownika o tym dlaczego nie może wejść poniżej danej wartości albo powyżej. Można to oczywiście zrobić nie w formie MessageBoxa a memo na dole programu gdzie będą informacje.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: TUpDown problem z focusem

Nowy postprzez Cyfrowy Baron » poniedziałek, 4 kwietnia 2011, 16:31

Corvis napisał(a): Można to oczywiście zrobić nie w formie MessageBoxa a memo na dole programu gdzie będą informacje.


Lepszy jest już chyba StatusBar. Co do tych komunikatów to z własnego doświadczenia powinieneś wiedzieć, że jeżeli pojawiają się zbyt często to stają się nad wyraz irytujące.
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


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

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 8 gości