TTimer na zminimalizowanym oknie

0

Używam komponentu TTimer do wyświetlania Form2 z Form1 po określonym czasie.
Timer lezy na Form1. Jeżeli Form1 jest wyświetlone to program działa jak oczekuję, jeżeli formę Form1 zminimalizuję to timer wydaje się nie działać. Nie odpala kodu w OnTimer i podejrzewam też, że nie odlicza.
Mam zamiar przepisać aplikację na wielowątkową i odliczać w oddzielnym wątku.
Jest może jednak jakieś prostsze rozwiązanie by zmusić timer na zminimalizowanej formie do pracy?

0

Posiłkując się https://www.experts-exchange.com/questions/10097528/Timer-not-firing-in-minimized-application.html
można spróbować wstawić Timer do DataModule i powinno śmigać :)

0

Przecież Timer w Delphi działa obojętnie czy okno programu jest widoczne, zminimalizowane czy ukryte. Nie wiem może w starych wersjach nie działał ale wątpię, bo jakoś nigdy nie zauważyłem problemu.

0

Potwierdzam Timer, działa na zminimalizowanej formatce, jaką wersję Delphi posiadasz?

0

Posiadam XE6, rozwiązanie z przeniesieniem Timera do DataModule też znalazłem i testowałem, niestety u mnie nie zadziałało.
Nie jestem sam ze swoim problemem, wcześniej szukałem w Google i znalazłem poniższy link
https://www.experts-exchange.com/questions/10097528/Timer-not-firing-in-minimized-application.html

0

To może podaj jakim kodem wyświetlasz drugą formę. Może tam tkwi problem.

0

@krzynio: jeśli aplikacja jest zminimalizowana to jak chcesz wyświetlić formularz? Po to się ją minimalizuje, aby ukryć wszystkie okna i w takim stanie utrzymywać apkę do jej przywrócenia. Jeśli potrzebujesz otworzyć nowe okno to najpierw przywróć to główne (zwykły restore) i wtedy pokaż okienko poboczne.

Jeśli chodzi o sam timer i o to czy działa czy nie, ustaw break point na pierwszą linijkę kodu w zdarzeniu OnTimer, odpal program pod debuggerem i zminimalizuj go. Jeśli timer będzie działał na zminimalizowanej aplikacji to program zatrzyma się na linijce z break point-em.

W razie czego możesz spróbować utworzyć jego instancję, podając nil za właściciela.

0

@furious programming:
nil jako owner sprawi że tylko tyle że timer nie będzie miał właściciela i trzeba go będzie zwolnić ręcznie z poziomu kodu... timer.free . ale nie wpłynie na jego działanie

0

Oczywiście – timer trzeba w takim przypadku utworzyć i zwolnić z poziomu kodu.

Problem jest dziwny – odpowiedzi też niech takie będą. ;)


IMO timer działa poprawnie, ale pokazanie formularza podczas gdy aplikacja jest zminimalizowana, nie jest fizycznie wykonywane. Nawet jeśli formularz nie pokazuje się na ekranie to wcale nie jest powiedziane, że on w ogóle nie istnieje – po przywróceniu aplikacji może się pokazać razem z głównym oknem.

0

Z tego powodu w lazarusie nauczyłem się wątków...

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