szukałem w internecie ale nie mogę nic znaleźć
chodzi mi o coś takiego że mam formę na niej jakieś przyciski (u mnie akurat panele) w które mogę kliknąć i coś się tam dzieje
ale ta moja aplikacja nie powinna stawać się aktywna od kliknięcia fokus powinien pozostać przy aktywnej aplikacji - czyli ma działać tak jak klawiatura ekranowa w windows
jeżeli wiecie rak to zrobić to prosił bym o rozwiązanie lub link
najlepiej w c++ builder lub z informacją jak zastosować rozwiązanie w c++ builderze
z góry dziękuję ..
nie wiem jak tworzysz okno ale winapi pozwala na ustawienie w oknie flagi która sprawia, że nie można zaznaczyć okna(nie staje się aktywne)
jeżeli myślisz o SW_SHOWNOACTIVATE to to sprawia tylko że po uruchomieniu nie staje się aktywna
ale każde kliknięcie w któryś panel powoduje okno przejmuje focus
oczywiście ja wiem że można wziąć fokus aktywnego okna wykonać dla niego setforeground window i wykonać akcję - ale ja nie chce żeby tamto okno "wiedziało" że przestało być aktywne
jakoś klawiatura ekranowa to robi - może ktoś wie jak
SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOACTIVATE);
ta funkcja sprawi, że okno nie będzie się ruszać i nie będzie aktywne
dzięki za zainteresowanie ale to nie działa - klikam w okno pasek staje się niebieski (okno aplikacji którą chcę sterować przestaje być aktywne)
ewentualnie można jeszcze:
SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
może podajesz nie ten uchwyt?
no chyba dobry Form1->Handle
bo inne flagi działają i pozycję/rozmiar też można zmieniać
może to specyfika buildera
próbowałem też to ustawiać dla uchwytu panelu ale nie skutkuje
WS_EX_NOACTIVATE
... no nie wiem, według mnie uchwyt jest nie taki, choć buildera nie mam... może spróbuj tak pobrać uchwyt:
hwnd = FindWindow(NULL,(LPCWSTR)"nazwa okna idzie tutaj");
i jak to nic nie da to w tedy coś się innego wymyśli...
też nie zadziałało a po sprawdzeniu uchwyt okazał się ten sam
abrakadaber napisał(a):
WS_EX_NOACTIVATE
dzięki za info - rzeczywiście w msdn piszą że ma działać idelanie tak jakbym chciał - tyle że nie umiem tego użyć w buiderze
próbowałem nadpisać createparams
void __fastcall TForm1::CreateParams(TCreateParams &Params)
{
TForm::CreateParams(Params);
Params.Style&=WS_EX_NOACTIVATE;
}
ale dziąła strasznie dziwnie okno robi się wielkie naie ma żadnych przycisków na pasku a to co chciałem i tak nie działa ;)
pomocy !!
EUREKA !!!! wreszcie działa
to powinno wyglądać tak:
void __fastcall TForm1::CreateParams(TCreateParams &Params)
{
TForm::CreateParams(Params);
Params.ExStyle|=WS_EX_NOACTIVATE;
}
a w połączeniu z
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 100, 100, SWP_NOACTIVATE);
jest idealnie tak jak chciałem
WIELKIE DZIĘKI PANOWE ZA POMOC