2017-10-10 1 views
3

사용자 정의 구성 요소를 삭제하고 모두는 다음과 같이 할 수 없습니다 내가 VCL과 FMX에 사용할 수있는이 방법으로델파이 드래그 나는 IDE에 대한 몇 가지 구성 요소를 작성했습니다

unit xxx; 

interface 

uses 
System.Classes, System.SysUtils; 

type 
TMyClass = class(TComponent) 
    //code... 
end; 

implementation 

end. 

; 즉, 내 구성 요소를 사용하는 VCL win 프로그램과 FMX Android 앱을 만들 수 있습니다. 볼 수없는 코드는 클래스의 구현이지만 중요한 것은 아닙니다.

  1. VCL 프로젝트를 시작하면 구성 요소를 드래그 앤 드롭하여 사용할 수 있습니다.
  2. FMX win32 프로젝트를 시작하면 구성 요소를 끌어다 놓을 수 있습니다. 플랫폼을 Android로 전환하면 구성 요소가 그대로 유지되며 성공으로 컴파일 할 수 있습니다. 그건 그렇고 구성 요소를 드래그 앤 드롭 할 수 없습니다. 왜? 나는이

    enter image description here

    를 얻을 내가 플랫폼을 변경하는 경우

    enter image description here

    (예를 들어 안드로이드) :

포인트 2에서 나는 FMX의 Win32에서이 같은 구성 요소를 가지고 있다는 것을 의미

내가 뭘 잘못하고 있니? IDE> 도구> 옵션> 라이브러리로 이동하여 각 플랫폼에 대해 IDE에서 소스와 함께 .pas를 찾을 수있는 경로를 추가했습니다. 어떤 생각?

이상한 점은 FMX에서 필자는 구성 요소가있는 Android 응용 프로그램을 만들려면 플랫폼을 win32로 변경하고 구성 요소를 끌어다 놓은 다음 다시 Android로 변경해야한다는 것입니다. 구성 요소는 너무 잘 안드로이드에서 작동합니다. 드래그 할 수있을에서 구성 요소를 삭제합니다 이런 식으로

type 
[ComponentPlatformsAttribute(pidWin32 or pidAndroid)] 
TTestComponent = class(TComponent) 
    //... 
end; 

:

+0

Mybe는'TLang' 컴포넌트를 의미합니다. – Sami

+0

비주얼 컴포넌트로 숫자 클래스를 구현하는 것은 여전히 ​​큰 실수입니다. 'TObject'에서 파생하여 모든 문제를 해결하십시오. –

+2

[Views] (http://docwiki.embarcadero.com/RADStudio/en/Using_FireMonkey_Views)를 사용하고 있습니까? 구성 요소를 마스터보기 또는 Android보기에 놓으시겠습니까? 또한 구성 요소를 ['ComponentPlatforms'] (http://docwiki.embarcadero.com/Libraries/en/System.Classes.ComponentPlatformsAttribute) 속성으로 표시해야 IDE에서 구성 요소가 실제로 지원하는 플랫폼을 알 수 있습니다 . –

답변

5

당신은 단지 System.Classes을 포함 할 필요가이 속성을 사용하는 usure 할 다음 (당신은 이미 내가 볼 수있는 것과 그것을 가지고) 및 Android로 전환 한 경우에도 IDE가보기로 전환됩니다. 기본적으로 코드는 잘되고 VCL 및 FMX와 작동하지만 해당 특성을 사용하면 구성 요소가 지정하는 플랫폼과 호환된다는 것을 IDE에 알립니다.

ComponentPlatformsAttribute는 구성 요소 작성자에게 노출 된 구성 요소에 대한보다 구체적인 제어를 제공합니다.

  • 는 클래스 정의
  • 위의 속성을 추가 제거를 클릭>
  • 오른쪽 프로젝트 관리자의 구성 요소를 클릭

    1. 열기 구성 요소의 프로젝트 :
  • 당신이해야이 문제를 해결하려면
  • 모두 저장하고 컴파일하고 빌드하고 설치하십시오.
  • 당신은 속성의 생성자에 전달하는 이상의 인수를 찾을 수 있습니다, 나는 파일 System.Classes 싶어서에서 그들을 발견 :

    pidWin32  = $0001; 
        pidWin64  = $0002; 
        pidOSX32  = $0004; 
        pidiOSSimulator = $0008; 
        pidAndroid  = $0010; 
        pidLinux32  = $0020; 
        pidiOSDevice32 = $0040; 
        pidiOSDevice = pidiOSDevice32;// deprecated 'Use pidiOSDevice32'; 
        pidLinux64  = $0080; 
    
        pidWinNX32  = $0100; 
        pidWinIoT32  = $0200; // Embedded IoT (Internet of Things) Windows w/ Intel Galileo 
        pidiOSDevice64 = $0400; 
        pidWinARM  = $0800; 
        pidOSX64  = $1000; 
        pidOSXNX64  = pidOSX64 deprecated 'Use pidOSX64'; 
        pidLinux32Arm = $2000; 
        pidLinux64Arm = $4000; 
        pidAndroid64 = $8000; 
    

    당신이 원하는 경우에 도움이 될 수있는 답변 here있다 모든 단일 플랫폼을 포함하면 [ComponentPlatformsAttribute(0)]과 같은 속성의 생성자에 0을 전달할 수 있습니다. 그것은 작동하지만 나는 그것을 사용하지 않을 것 같다, 나는 지루할 수있는 경우에도 플랫폼을 하나씩 선언하는 것을 선호한다!

    관련 문제