2015-01-17 2 views
3

graphics32 아주 멋진 라이브러리이지만 제대로 사용하는 방법을 찾지 못했습니다. 예를 들어, LAYERS는 멋진 기능입니다.Delphi graphics32 선택된 레이어 삭제

    내가 그것을 수행하는 방법 아무 생각을 삭제하려면 내가 주위를 이동을 선택, 이미지 뷰에 레이어를 추가 크기를 조절할 수 있지만,
  • .

  • 또한 레이어가 선택되었지만 키 이벤트를 캡처 할 수 없습니다. 나는 키보드의 화살표를 사용하여 픽셀 단위로 레이어를 이동하려하지만, 나는 기울이지 않습니다.

아무도 이러한 문제를 해결하는 방법을 알고 있습니까?

도와주세요

화살표 키를 캡처의 핵심이 허용하는 당신에게

+3

http://graphics32.org/documentation/Docs/Units/GR32_Layers/Classes/TLayerCollection/Methods/Delete.htm –

+0

감사 : 이것은로 구현됩니다. 레이어 삭제가 완료되었습니다. 내 다른 문제는 어때? 키 이벤트 캡처? 키보드 화살표를 사용하여 레이어를 어떻게 움직일 수 있습니까? – user1137313

+0

잘 모르겠다. 컨트롤이이를 지원합니까? –

답변

1

감사드립니다. 이를 위해서는 기본 TCustomPaintBox32 클래스의 공개 (하지만 게시되지 않은) 속성을 조정해야합니다.

뭔가

ImgView.Options := ImgView.Options + [pboWantArrowKeys]; 

등이 TImgView32 클래스 (여기라는 이름의 ImgView)는 화살표 키를 캡처 할 수 있습니다. OffsetRect가 왼쪽/오른쪽 및 위/아래로 델타 (2 층과 3 인자)를 추가하여 TFloatRect을 조정

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); 
... 

:

일단 당신이 같은 키보드 핸들러를 작성할 수있었습니다.

위 예제에서 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; 
+0

'이러한 인수로 호출 할 수있는 OffsetRect의 오버로드 된 버전이 없습니다 .' – user1137313

+0

OffsetRect를 직접 작성하거나 최신 트렁크를 업데이트해야합니다 (GR32_Geometry에 있음). 답변에 사용한 구현을 추가하겠습니다. – CWBudde

+0

나는이 함수의 문법을 이해하지 못한다. 컴파일러가 뭔가 잘못되었다고 생각하는 것을 제외하면 모두 괜찮아 보인다 ... 무엇이 잘못 되었나요? 나는 프로 시저로서 호출했지만 동일한 결과 인 컴파일러 오류를 tryied했다. 절차는 gr32.pas – user1137313

관련 문제