Witam wszystkich serdecznie, piszę, ponieważ mam problem przy umieszczeniu procedury OnDrawItem w bibliotece dll. Procedura ta musi tam się znaleźć, ponieważ co najmniej dwie aplikacje będą miały dokładnie takie samo menu główne i kontekstowe.
Jak wiadomo, zdarzenie OnDrawItem posiada kilka parametrów, do których procedura z biblioteki musi mieć pełny dostęp, zarówno do odczytu informacji jak i zapisu.
Niestety nie wiem, w jaki sposób uzyskać dostęp do ACanvas tak, bym mógł zapisywać nowe informacje w tym obiekcie (np. zmieniać kolory Pen i Brush).
Musi mieć także dostęp do obiektu z klasy TImageList, w którym są przygotowane ikony dla poszczególnych itemów. Procedura ta może wyglądać tak:
procedure dllDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean; ColorIcon, GrayIcon: TImageList);
Nie może ona być przypisywana do zdarzenia w ten sposób:
MainMenu.OnDrawItem := dllDrawItem;
ponieważ ma więcej parametrów (z resztą choćby ich było tyle samo to nie próbowałem jeszcze tego robić z procedurą z dll).
Myślałem raczej o takim rozwiązaniu:
TMainForm.miOpenDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean);
begin
dllDrawItem(Sender, ACanvas, ARect, Selected, ilColor, ilGray);
end;
gdzie ilColor i ilGray to obiekty z klasy TImageList przechowujące ikony odpowiednio kolorowe i szare, gdy dany item jest nieaktywny.
Wiem, że brakuje tutaj kilku parametrów, bo w ten sposób nie uzyskam dostępu do ACanvas, ale nie wiem czego dokładnie i w jaki sposób miało by to wyglądać. To jest tylko przykład, jaki by mnie zadowolił.
Pisałem już na kilku forach, lecz niestety nikt nie wiedział jak to zrobić.
Bardzo proszę o pomoc. Pozdrawiam.