Forma na wierzchu - problem

0

Cześć,

mam aplikację z interfejsem dotykowym. Jedna z funkcji to pobranie danych karty lojalnościowej poprzez Rest Api.
Działa to tak:

  • użytkownik klika paluszkiem na przycisk "Karta klienta",
  • pojawia się forma modalna do wczytania karty, tam może przeczytać kod kreskowy karty skanerem kodów kreskowych lub po prostu używając butonów wpisać ten kod,
  • gdy długość stringa osiąga założenie (13 znaków) uruchamia się procedura pobierania danych przez rest.

Teraz są dwie możliwości:

  • jeśli komunikacja działa to w zależności czy karta działa czy nie można jej użyć lub nie - nie ma w każdym razie żadnych problemów,
  • jeśli komunikacja nie działa, a chwilę jednak na to trzeba poczekać, w sekcji try .. except jest procedura pokazująca okienko z informacją że są problemy z komunikacją. Okienko to wyświetlanie jest modalnie.

I tutaj dochodzę do sedna.
Takie okienko wyświetlać powinno się bez problemu, jednak, interfejs dotykowy w Windows działa jakoś "dziwnie", powiedzmy że buforuje sobie bardzo dużo. Oczywiście użytkownik nie czeka na nic (szczególnie na informacje czy w ogóle kartę można użyć) i po zeskanowaniu kodu kreskowego karty klika (najczęściej mnóstwo razy) od razu na buton aby ją użyć (ten przycisk nie jest aktywny) ale jednak Windows zapamiętuje te kliknięcia.
Gdy powinna pojawić się forma z informacją o braku połączenia, jest ona niestety pod spodem aktualnej formy.

Jako że jest to forma modalna to niestety tracę możliwość dotarcia do niej i aplikacja staje się zablokowana. Oczywiście kombinacją Alt-Tab mógłbym ją wyciągnąć na wierzch ale komputer nie ma klawiatury.

No i po tym przydługim wstępie mam pytanie, jak to naprawić (szczególnie że zauważyłem że nie jest to taki błahy problem i występuje on także przy innych aplikacjach - nie moich).

Myślałem o dodaniu do zdarzenia onShow, czegoś takiego:

karta_klienta_awaria.FormStyle := fsStayOnTop;

ale czy to wystarczy?

1

Spróbuj przed (albo po np. w OnShow) wyświetleniem okna tego co ma być na wierzchu wywołać http://docwiki.embarcadero.com/Libraries/Sydney/en/Vcl.Forms.TApplication.RestoreTopMosts choć nie wiem czy coś to da.

0
kAzek napisał(a):

Spróbuj przed (albo po np. w OnShow) wyświetleniem okna tego co ma być na wierzchu wywołać http://docwiki.embarcadero.com/Libraries/Sydney/en/Vcl.Forms.TApplication.RestoreTopMosts choć nie wiem czy coś to da.

spróbuję na pewno, dzięki.

0

Jakiś czas temu napisałem sobie aplikację klikacz, która "klika" we wskazany punkt. Z pod kursora pobieram sobie okno i nawet jak ono jest nieaktywne (lub pod spodem) to wyciągam je na wierzch poprze funkcje z windows api:
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-bringwindowtotop
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setforegroundwindow
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-showwindow

Te 3 funkcje załatwiają to, że wysuwam okno na wierzch robię w nim klik i przywracam na wierzch okno, które było aktywne przed uruchomieniem procedury klikającej ;)

0

dzięki za sugestie, na razie wrzuciłem fsStayOnTop i czekam na efekty.

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