2017-09-25 5 views
1

저는 항상 비 시각적 구성 요소를 작성했습니다. 그들의 제작은 매우 쉽고 VCL과 FMX에서도 똑같이 잘 작동합니다. 지금까지는 그렇게 좋았지 만 지금은 문제에 직면하고 있습니다. Delphi 시각적 구성 요소 (캔버스 포함)

나는 TComponent에서 상속하는 데 사용하지만, 지금은 TRedistPreview라고 내 구성 요소는 정말이 같은 절차가 필요 없습니다 더 이상 때문에 :

procedure drawPreview(area: TCanvas); 

이 절차를 들면, 어딘가에 뭔가 (모양, 선 및 색상)을 그릴 수있다 예 : TRectangle. TComponent에는 그릴 수있는 기능이 없으므로 다른 것을 상속해야한다는 것을 온라인에서 보았습니다. TWinControl (하지만 VCL 만 해당) 및 TCustomControl (VCL 만 해당)을 찾았습니다.

내가 캔버스를 얻기 위해 상속해야 할 내용을 알려주십시오. 나는 대체 할 의미 :

TRedistPreview = class(TComponent) 
end; 

으로 :

TRedistPreview = class(TSomeClassThatHasCanvas) 
end; 

나는 procedure drawPreview(area: TCanvas);를 호출하고 (A TRectangle 같은) 표면에 그릴 수있는 곳.

Canvas를 사용하여 계층에서 가능한 가장 낮은 클래스를 찾고 있습니다.


이 구성 요소는 Windows와 Android에서 매우 유용하기 때문에 Firemonkey 구현을 찾고 있습니다. 내 연구에서, 내가 에서 상속받을 수 있다는 것을 보았습니다. 이것은 FMX.Objects 안에 있습니다. 그러나 이것이 올바른 선택인지는 모르겠습니다.

어떻게해야합니까?

또한이 구성 요소가 VCL에 있어야하는 경우 다른 클래스에서 상속 한 다른 구성 요소를 작성해야합니까?

내가 말했듯이 이것은 시각 구성 요소 작성에 대한 저의 첫 번째 시간이므로 올바른 방법을 보여줄 사람을 원합니다!

+0

TComponent에서 절대적으로 양호합니다. 캔바스에 컴포넌트를 그리는 메소드를 구현할 수 없다는 이유는 전혀 없습니다. 물론, 그 디자인은 틀릴 수도 있습니다. 어쩌면 시각적 제어가 필요할 수도 있습니다. 아마도 당신은 잘못된 것을 요구하고있을 것입니다. –

+1

예, VCL과 FMX는 서로 어떤 방식으로도 호환되지 않습니다. 둘 다 작동하는 단일 컨트롤을 작성하지 않습니다. 이것은 기본적으로 세미 트럭에서 디젤 엔진을 미니 쿠퍼에 설치하는 것과 같습니다. –

+0

점프 시작으로,이 질문에서 내 코드와 같이 미리 쓰여진 것을 볼 수 있습니다 : https://stackoverflow.com/questions/31767346/capturing-signature-very-sketchy-on-touch-screen 그것을 연구하고 자신의 것을 구현하십시오. –

답변

2

VCL에서 캔버스를 지원하는 첫 번째 클래스는 TCustomcontrol이고 이는 TWinControl의 자손입니다. http://docwiki.embarcadero.com/Libraries/Seattle/en/Vcl.Controls.TCustomControl

FMX에서 페인팅 루틴을 허용하는 기본 클래스는 TControl입니다.

그러나 FireMonkey의 시각적 구성 요소 렌더링은 VCL과 많이 다르다는 점에 유의하십시오. 따라서 FMX에서 VCL 코드를 재사용하거나 그 반대로 생각하면 아마도 가능하지 않을 것 같습니다.

+0

이것은 실제로 작동하지 않았습니다! TControl을 TComponent 대신에 아버지 클래스로 추가했는데 위에서 볼 수있는 프로 시저를 사용하여 TCanvas에 액세스 할 수 없습니다 ... TControl에서 상속 된 다음 FMX.Graphics (TCanvas가 있음)를 추가하면 충분합니까? –

+0

캔버스를 인수로 허용하는 함수를 구현하기 위해 특별히 클래스에서 파생 될 필요는 없습니다. –

+0

@DavidHeffernan 방금 가져 왔습니다. 나는 평소와 같이 TComponent에서 파생하기로 결정하고, 필요에 따라 uses 절을 추가하기로 결정했습니다. 예를 들어 FMX.Graphics (TCanvas의 경우). 그것은 지금까지 일하고있다, 나는 내가 무엇을해야하는지에 관해 이해했다고 생각한다! –