graphics32是一个非常好的库,但是我很难找到正确使用它的方法。例如,层,它们是一个很棒的特性。
有人知道如何解决这些问题吗?
请帮忙谢谢
发布于 2015-01-18 10:08:50
捕获箭头键的关键是允许这样做。为此,您需要调整基础TCustomPaintBox32类的公共(但不是已发布)属性。
有点像
ImgView.Options := ImgView.Options + [pboWantArrowKeys];应该允许TImgView32类(此处命名为ImgView )捕获箭头键。
一旦启用,您就可以编写键盘处理程序如下:
procedure TMainForm.ImgViewKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
Location: TFloatRect;
begin
if Assigned(FSelection) then
case Key of
VK_LEFT:
FSelection.Location := OffsetRect(FSelection.Location, -1, 0);
...其中,OffsetRect通过向左/右和顶部/底部添加三角洲(第2和第3参数)来调整TFloatRect。
在上面的示例中,FSelection是当前选中的层。它是在选择图层后存储的(用鼠标单击)。此外,您还可能需要调整橡皮筋的位置,以防止您使用TRubberBandLayer作为选择器。
增编:
OffsetRect的实现:
function OffsetRect(const Rct: TFloatRect; const DeltaX, DeltaY: TFloat): TFloatRect;
begin
Result.TopLeft := OffsetPoint(Rct.TopLeft, DeltaX, DeltaY);
Result.BottomRight := OffsetPoint(Rct.BottomRight, DeltaX, DeltaY);
end;或者,您可以直接使用这样的代码:
procedure TMainForm.ImgViewKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
Location: TFloatRect;
begin
if Assigned(FSelection) then
case Key of
VK_LEFT:
FSelection.Location := FloatRect(FSelection.Location.Left - 1, FSelection.Location.Top, FSelection.Location.Right - 1, FSelection.Location.Bottom);
...但看起来有点丑。
增编2:
对于库的旧版本(例如1.9.x),可能也缺少OffsetPoint函数。这项工作的实施情况如下:
function OffsetPoint(const Pt: TFloatPoint; DeltaX, DeltaY: TFloat): TFloatPoint;
begin
Result.X := Pt.X + DeltaX;
Result.Y := Pt.Y + DeltaY;
end;https://stackoverflow.com/questions/27996499
复制相似问题