Wm_paint na zegarze windows

0

Jak założyć hook'a który by wyłapywał wiadomości Wm_paint na zegar windows'a (mam uchwyt okna zegara!!). {hello}

Chcę by w czasie działania mojego programu zamiast windows'owskiego zegarka pokazywał się pozostały czas (robie programik obsługujący kafejki).
Złapałem już uchwyt zegara (zbudowałem funkcję, która go zwraca), umiem też rysować po tym okienku, przydało by się jeszcze odśwież mój rysunek jak zegar zostaje odświeżany!! hmm... --Sebo +)
(Delphi3)

0

Od biedy można rysować to w timerze, zawsze jakieś rozwiązanie. A swoją drogą, w jaki sposób powiększyć miejsce dostępne dla zegarka, czyli przesunąć tray w lewo?---------------------------
Delphi 6

Pozdrówka

0

thenkles napisał:
A swoją drogą, w jaki sposób powiększyć miejsce dostępne dla zegarka, czyli przesunąć tray w lewo?
&gt
Wstawić obok pustą ikonkę ?

Co do rysowania po zegarze, to chyba łatwiej przechwycić sygnały zegara systemowego. Ale to znowu nie rozwiązuje problemu, gdy zegar zostanie zasłonięty i odsłonięty. Może trzeba przechwytywać globalną wiadomość o zdarzeniu WM_Paint?--Jest jeszcze jeden błąd ... :)

Apel: Piszcie w tematach o jaki język programowania chodzi np. : [Delphi], [C++], itp.

Prośba o pomoc do Delphi po polsku. Oceniajcie i dodawajcie komentarze
http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=18659

Oficjalny kanał IRC serwisu 4programers:
serwer: warszawa.ircnet.pl sieć: POLNet kanał: #4programmers.net

0

&gtA swoją drogą, w jaki sposób powiększyć miejsce dostępne dla zegarka, czyli przesunąć tray w lewo?

Można użyć funkcji setwindowspos (powinno działać)

&gtCo do rysowania po zegarze, to chyba łatwiej przechwycić sygnały zegara systemowego. Ale to znowu nie rozwiązuje problemu, gdy zegar zostanie zasłonięty i odsłonięty. Może trzeba przechwytywać globalną wiadomość o zdarzeniu WM_Paint?

To naprawde nie rozwiązuje problemu (ja mam pasek stanu autoukrywany!!) &gt&gt dlatego poszukuje hook'a --Sebo +)
(Delphi3)

0

Ukryj zegar (chyba ShowWindow). i rysuj po trayu cyklicznie.
--Szymek

Prawo Bolingsa - jeżeli czujesz się świetnie, nie martw się, to minie.

0

Albo stwórz własne "okno" które wsadzisz do tray'a.
--Szymek

Prawo Bolingsa - jeżeli czujesz się świetnie, nie martw się, to minie.

0

&gtMożna użyć funkcji setwindowspos (powinno działać)

Myślę że jednak nie zadziała, ponieważ zegarek, tray oraz cały pasek zadań zaliczają się do jednego okna (nie jestem pewny, ale tak mi się wydaje)---------------------------
Delphi 6

Pozdrówka

0

thenkles napisał:
&gtMyślę że jednak nie zadziała, ponieważ zegarek, tray oraz cały pasek zadań zaliczają się do jednego okna (nie jestem pewny, ale tak mi się wydaje)

Zegarek, jest osobnym oknem umieszczonym w oknie tray'a, a tray jest oknem w pasku zadań (to wiem na pewno &gt rysowałem już po zegarku tylko chcĘ by działało też odświerzanie)--Sebo +)
(Delphi3)

0

&gtszymek napisał:
&gtUkryj zegar (chyba ShowWindow). i rysuj po trayu cyklicznie.

Wtedy też musiałbym wiedzieć kiedy, te okno jest odmalowywane, a na tym właśnie polega mój problem (rysować to ja już umiem :-) )!!

Chem wyłapać wiadomość wm_paint dla okna, którego uchwyt znam!! {hello} --Sebo +)
(Delphi3)

0

&gtZegarek, jest osobnym oknem umieszczonym w oknie tray'a, a tray jest oknem w pasku zadań

Dobrze wiedzieć :). A znasz może nazwę tego okna?---------------------------
Delphi 6

Pozdrówka

0

Ja wyszukuje je po nazwie klasy!!
Ale teraz ci jej nie podam &gt&gt siedz na nie swoim kompie!!
(Zrób sobie programik który przelatuje po wszystkich oknach i spisuje ich klasy i text, a potem wyszukaj aktualnej godziny!!)--Sebo +)
(Delphi3)

0

Nie mogę cos znaleźć takiego okna :(---------------------------
Delphi 6

Pozdrówka

0

Znalazłem już gdzieś uchwyt do okna, ale setwindowpos nie działa za dobrze. Nie powiększa wcale zegarka, tylko przesuwa cyferki kawałek w lewo :(. Dałem tak:

var
TrayWnd, TrayNWnd, ClockWnd: HWND;
begin
TrayWnd := FindWindow('Shell_TrayWnd', nil);
TrayNWnd := FindWindowEx(TrayWnd, 0, 'TrayNotifyWnd', nil);
ClockWnd := FindWindowEx(TrayNWnd, 0, 'TrayClockWClass', nil);
SetWindowPos(ClockWnd, 0, 0, 0, 300, 20, 0);
end;---------------------------
Delphi 6

Pozdrówka

0

Odnośnie szukania okien, stworzyłem program który już wsyłałem do p. Adama na stronę, który szuka
wszystkich okien w systemie i pokazuje ich kolejność.
--Szymek

Prawo Bolingsa - jeżeli czujesz się świetnie, nie martw się, to minie.

0

thenkles napisał:
&gtZnalazłem już gdzieś uchwyt do okna, ale setwindowpos nie działa za dobrze. Nie powiększa wcale zegarka, tylko przesuwa cyferki kawałek w lewo :(. Dałem tak:
&gt

Muśisz jeszcze poprzesówać inne okna (w których jest zawarty zegarek) i zmniejszyć okno na którym wyświetlają się belki okien

var
TrayWnd, TrayNWnd, ClockWnd: HWND;
begin
TrayWnd := FindWindow('Shell_TrayWnd', nil);
TrayNWnd := FindWindowEx(TrayWnd, 0, 'TrayNotifyWnd', nil);{te muśisz powiększyć}
SetWindowPos(TrayNWnd,{x},{y},{x1},{y1},0);
{...}
ClockWnd := FindWindowEx(TrayNWnd, 0, 'TrayClockWClass', nil);
SetWindowPos(ClockWnd, 0, 0, 0, 300, 20, 0);
end;

--Sebo +)
(Delphi3)

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