Diskussion:Die Direct2D-Zeichenfläche

Aus RAD Studio
Wechseln zu: Navigation, Suche

--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 ?