Diskussion:Die Direct2D-Zeichenfläche
--PrivatPrimat (Diskussion) 16:06, 9. Apr. 2016 (PDT)
Ein kurzes, aber sehr lehrreiches Codebeispiel.
Sehr gut daran: Zwei Themen in einem Beispiel. Komponentenentwicklung und Windows-nahes Programmieren.
Bitte der Vollständigkeit halber das komplette USES - Statement (meiner Meinung nach) wie folgt angeben:
uses System.SysUtils, System.Classes, Vcl.Controls, Vcl.direct2d, winapi.d2d1, vcl.graphics, winapi.messages, winapi.windows;
Hier auch eine Anregung für die Methode WMSize
procedure TCustomAcceleratedPaintBox.WMSize(var Message: TWMSize);
var resizeparam:TD2D1SizeU;
// der Umweg über die Variable ist nicht vermeidbar
// der ursprüngliche Code führt zu einer Fehlermeldung
begin
if FD2DCanvas <> nil then
begin
resizeparam:=D2D1SizeU(Width, Height);
ID2D1HwndRenderTarget(FD2DCanvas.RenderTarget).Resize(resizeparam);
end;
inherited;
end;
Windows Anzeigeeinstellungen haben seltsame Effekte - Skalierung des D2dRendertargets ist fehlerhaft
PrivatPrimat (Diskussion) 11:41, 22. Apr. 2016 (PDT)
Dieses Beispiel funktioniert gut wenn ....
in den Windows Anzeigeeinstellungen die Option: Elemente vergrößert darstellen (Prozentsatz) auf 100 % gesetzt wird.
ist Fehlerhaft / hat seltsames Verhalten, wenn ...
eine andere Einstellung z.B. 125% oder 150% gewählt wird. wirkt sich auf die Breite und Höhe des Direct DRaw Objekts aus. So z,b, - sind 100 Bildpunkte auf der d2dcanvas nämlich 125 Punkte auf der GDI Canvas ...... die Hälfte ist dann ca. 2/3 des Clients usw.
Wie kann man das beheben ?