[delphi] odświeżanie pulpitu

0

za pomocą

      DC := BeginPaint(GetDesktopListViewHandle, PS);
      SetBkMode(DC, TRANSPARENT);
      SetTextColor(DC, RGB(0, 0, 0));
      TextOut(DC, 1024 - 200, i, Pchar(s), Length(s));
      EndPaint(GetDesktopListViewHandle, PS);

pisze na pulpicie pewien napis..
po naciśnięciu przycisku zmienna "s" sie zmienia.
co należy dodać do procedury przycisku, aby po zmianie wartości, widok pulpitu odświeżył sie, tak aby było widać od razy nowy napis, gdyż zmienia się on dopiero po kliknięciu prawym przyciskiem na pulpit i kliknięciu "odśwież".
próbowałem używać 2 procedur, które były w faq, ale niestety odświeżają one pulpit, ale nie mój napis.
proszę o pomoc.

0

proponowal bym zastosowac funkcje InvalidateRect i odmalowac tylko ten fragment, ktory Ciebie interesuje.

0

no tak... a wiec mam:

    r.Left := 700;
    r.Top :=2;
    r.right := 1024;
    r.Bottom :=300;
    InvalidateRect(GetDesktopListViewHandle, r, false);

nie jestem pewien co do parametrów "r", w każdym razie interesuje mnie prostokąt u góry po prawej stronie. około 100/300, tak mniej więcej.

Moglbyś mi poradzić, jak powinna wyglądać ta funkcja ?

0

http://msdn2.microsoft.com/en-us/library/ms534893.aspx

InvalidateRect(GetDesktopListViewHandle,RECT(,,,),true)

oczywiscie jak po pulpicie rysujemy, bo jak jest jeszcz jakies okno to nie ...

0

więc mam:

    InvalidateRect(GetDesktopListViewHandle,rect(800, 10, 1024, 300),true)

i mam blad Incopatible Types "TRect" and "PRect".

dlatego wcześniej dałem zmienna r: Prect; ale też nie działało.

jakiś inny pomysł?

0

Przecież ta metoda oczekuje na wskaźnik... do struktury typu TRect, więc musisz przekazać wskaźnik, a nie całą strukturę.

0

ok, teraz mam kod :

r: Trect;

      r.Left := 700;
      r.Top := 1;
      r.right:=1024;
      r.Bottom:=300;
      InvalidateRect(GetDesktopListViewHandle,@r,true);

ale tekst zamiast się odświeżać, po prostu znika.

i w dalszym ciągu mam problem...z prawidłowym odświeżeniem.

0

i udało mi się :)
dałem:

    InvalidateRect(GetDesktopListViewHandle,@r,true);
    PostMessage(FindWindow('Mojprogram', nil), PAIN, 0, 0);

gdzie pain odpowiada za komunikat WM_PAINT w DLLce.

ale mam kolejny problem, po nacisnieciu przycisku tekst się elegancko odświeża, natomiast, w DLLce z HOOKIEM.....po jakim komunikacie wstawić to :

    InvalidateRect(GetDesktopListViewHandle,@r,true);
    PostMessage(FindWindow('Mojprogram', nil), PAIN, 0, 0);

aby po np. zminimalizowaniu okna, które zasłaniało napis, napis się odnowił (gdy jakies okno go przykryje znika), albo jakiś komunika, który by odświeżał napis co powiedzmy sekunde ? ( drugie pytanie, czy takie odświeżanie co sekunde tym sposobem nie byłoby zbyt pamięcio-żerne ?) ?

0

skoro juz robisz hooka to lap komunikaty odmalowywujace i w nich odmalowywuj (wm_paint wm_erasebk, wm_ncpaint ....).

0

hmm a moglbys mi podac stronke ze wszystkimi komunikatami odpowiadającymi za malowanie ? np. jak odsłoni sie pulpit ?

btw. hooka robie, ponieważ moje przyciski są tworzone na pulpicie, a musze jakoś wyłapywać czy zostały nacisniete :P

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