aplikacja bez focusa (coś jak klawiatura ekrnanowa)

aplikacja bez focusa (coś jak klawiatura ekrnanowa)
  • Rejestracja: dni
  • Ostatnio: dni
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ę ..

NI
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 535
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)

  • Rejestracja: dni
  • Ostatnio: dni
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

  • Rejestracja: dni
  • Ostatnio: dni
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

NI
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 535
0
Kopiuj
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

  • Rejestracja: dni
  • Ostatnio: dni
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)

NI
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 535
0

ewentualnie można jeszcze:

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

może podajesz nie ten uchwyt?

  • Rejestracja: dni
  • Ostatnio: dni
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

abrakadaber
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6610
0

WS_EX_NOACTIVATE

NI
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 535
0

... no nie wiem, według mnie uchwyt jest nie taki, choć buildera nie mam... może spróbuj tak pobrać uchwyt:

Kopiuj
hwnd = FindWindow(NULL,(LPCWSTR)"nazwa okna idzie tutaj"); 

i jak to nic nie da to w tedy coś się innego wymyśli...

  • Rejestracja: dni
  • Ostatnio: dni
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 !!

  • Rejestracja: dni
  • Ostatnio: dni
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.