gpt4 book ai didi

Delphi Graphics32 删除选定图层

转载 作者:行者123 更新时间:2023-12-03 15:58:04 25 4
gpt4 key购买 nike

graphics32 是一个非常好的库,但我无法弄清楚如何正确使用它。例如图层,它们是一个很棒的功能。

  • 我可以向 ImageView 添加图层、选择它们、移动它们、调整它们的大小,但是,如果我想删除它们,我不知道该怎么做。

  • 图层也已选择,但我无法捕获其上的任何关键事件。我的意思是我想使用键盘上的箭头将图层移动一个像素,但我不能。

有人知道如何解决这些问题吗?

请帮忙谢谢

最佳答案

捕获箭头键的关键是允许这样做。为此,您需要调整基础 TCustomPaintBox32 类的公共(public)(但未发布)属性。

类似于

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 通过将增量(第二个和第三个参数)添加到左/右和上/下来调整 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;

关于Delphi Graphics32 删除选定图层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27996499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com