aplikacja bez focusa (coś jak klawiatura ekrnanowa)

0

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ę ..

0

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)

0

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

0

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

0
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

0

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)

0

ewentualnie można jeszcze:

SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);  

może podajesz nie ten uchwyt?

0

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

0

WS_EX_NOACTIVATE

0

... 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...

0

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 !!

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1