Der Absturz bei Windows 10 kommt von dieser Zeile (uMain.pas Zeile 961):
Delphi-Quellcode:
GDIP_DrawImageRectRectI(Graphics, ImgBack, ImgItemHeight, PDis.rcItem.Top,
Rect.Right - SideBarWidth, ImgItemHeight, 0, PDis.rcItem.Top *
(Integer(imgH) div Rect.Bottom), imgW, (Integer(imgH) div Rect.Bottom)
* ImgItemHeight, 2, nil, false, nil);
Rect ist leider leer, deshalb funktioniert die Division durch Rect.Bottom nicht.
Das liegt daran, dass WindowFromDC(PDis.HDC) 0 zurückliefert.
Danke dir für die Info.
Was kann man da machen?
Warum WindowFromDC jetzt 0 unter W10 zurück gibt ist mir schleierhaft.
Habe den Source nochmal aktualisiert da auch in CreateShortCut ein Problem mit dem Free vorlag.
vorher
Delphi-Quellcode:
constructor TShortCut.Create;
begin
AddChildWindows();
CreateIcon := TCreateIcon.Create;
end;
Delphi-Quellcode:
if Assigned(Sprites) then
begin
if (Sprites.Count - 1) > ID_MAIN then
begin
for K := ID_FIRST to Sprites.Count - 1 do
begin
if Sprites[K].h_Bitmap <> 0 then
begin
DeleteObject(Sprites[K].h_Bitmap);
Sprites[K].h_Bitmap := 0;
end;
end;
Sprites.Free;
AddChildWindows;
end;
end;
und jetzt
Delphi-Quellcode:
constructor TShortCut.Create;
begin
CreateIcon := TCreateIcon.Create;
end;
Delphi-Quellcode:
if Assigned(Sprites) then
begin
Sprites.Free;
AddChildWindows;
end else
AddChildWindows;
Zitat:
Ohne die Zeile wird das Menü angezeigt, allerdings wird der aktuelle Eintrag nach dem Hovern nicht wieder zurückgesetzt, sprich nach einmal Drüberfahren sehen alle gehovert aus.
Nein, nein die brauchen wir weil sonst die Button zum selektieren der Einträge nicht neu gezeichnet werden.
Das Hintergrund Bitmap sorgt dafür das ein Invalidate auf das Menu ausgeführt wird.
gruss