Problemy z rysowaniem po pulpicie

0

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?

0

W OwnerDrawie dostajesz Canvas?? Jak nie to spróbuj z MenuItem.Canvas alob Menu.Canvas i rysuj po tym. Nie zabieraj Canvasa pulpitowi!!

0

W ownerdrawie dostaję canvas i rysuję po nim. Ale ten canvas nie obejmuje całości okna menu, wokół tego co narysuję, zostaje biała ramka. Właśnie do uzupełnienia tego ubytku rysuję po pulpicie. W komponencie XPMenu jest to rozwiązane w identyczny sposób. Tam też niestety występuje opisany przeze mnie drugi problem. Może za pomocą stosowania funkcji winapi da się rozwiązać te problemy?

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