Witam, mam pewien bardzo wkurzający problem, związany z rysowaniem po pulpicie. Właściwie to są 2 problemy, ale jeden jest zdecydowanie ważniejszy. Mianowicie napisałem sobie procedurkę do obsługi trybu ownerdraw obiektu TMenuItem:
var
srect:trect;
scanvas:tcanvas;
begin
getWindowRect(WindowFromDC(acanvas.Handle), srect);
scanvas:=tcanvas.Create;
scanvas.Handle:=GetWindowDC(GetDesktopWindow);
// Rysowanie po acanvas
// Lewo
scanvas.CopyRect(rect(srect.Left, srect.Top, srect.Left+3, srect.Bottom), menub.Bitmapa.Canvas, rect(0, 3, 2, 23));
// Prawo
scanvas.CopyRect(rect(srect.Right-3, srect.Top, srect.Right, srect.Bottom), menub.Bitmapa.Canvas, rect(133, 3, 136, 23));
// Góra
scanvas.CopyRect(rect(srect.Left, srect.Top, srect.Right, srect.Top+3), menub.Bitmapa.Canvas, rect(0, 0, 134, 3));
// Dół
scanvas.CopyRect(rect(srect.Left, srect.Bottom-3, srect.Right, srect.Bottom), menub.Bitmapa.Canvas, rect(0, 24, 134, 26));
scanvas.Free;
end;
Pierwszy problem występuje jedynie na starszych systemach, na XP wszystko jest w porządku. Polega on na tym, że na pulpicie rysowana jest także inna bitmapa, którą rysuję w timerze na zupełnie innym canvasie. Jest to wkurzające, ponieważ z każdym (prawie) najechaniem na jakiś element menu, tworzy się jakby kopia okna programu (bo bitmapa jest wykorzystywana jako tło), która jest tylko pustym obrazem. Drugi problem jest już mniej dobijający. Chodzi o to, że jak pokażę menu, to ramka rysowana po pulpicie nie pojawia się od razu, dopiero po najechaniu na jakiś element. Problem ten występuje już na wszystkich systemach. Może ktoś ma jakiś pomysł na rozwiązanie tych problemów?