Code: Alles auswählen
procedure TForm1.MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
var w,h:integer;
// CopyRect(DestRect, SrcCanvas, SrcRect)
begin w:=200; h:=200;
bitmap.setsize(w,h);
bitmap.Canvas.CopyRect(Rect(0,0,w,h), canvas, Rect(-left, -top, w-left, h-top);
canvas.draw(x,y,bitmap);
end;
Es gibt da nur ein Problem: Die Werte (0,0) ergeben nicht exakt die obere linke Ecke des Bildschirms, sondern etwa 30 Pixel darüber, sodaß die ersten 30 Pixel-Zeilen nicht mitgelesen werden. Das liegt daran, daß die Zählung der y-Position in der Form erst etwa 30 Pixel oberhalb des äußeren Randes beginnt (nämlich oberhalb der Titelzeile). Gibt es eine Möglichkeit, die Dicke dieser Zeile zu bekommen? Ich könnte es mit Iteration machen (Beginn mit (-35,0) und dann jeweil ein Pixel dekrementieren, bis die erste Pixel-Zeile nicht mehr schwarz ist), aber vielleicht gibt es auch eine Variable, die diesen Wert angibt (borderwidth scheint nur die Dicke der anderen drei Seiten zu betreffen)?