2015-01-08 2 views
2

저는 델파이에 새로운 기능을 제공합니다. 자바로 작성된 코드가 있습니다. 그것은 내부 클래스 구조를 가지고 있습니다. 하지만 델파이로 변환하는 방법을 모른다.델파이의 자바 내부 클래스

unit resolutionSet; 

interface 

uses 
    Winapi.Windows, System.Math; 

type 
TResolutionSet = class 
    type 
    TResolutionLevel = class 
    private 
    { private declarations } 
    discardLayers : Integer; 
    dims   : TRect; 
    function getZoomLevel : Integer; 
    function getZoomPercent : Double; 
    function getResolutionBounds : TRect; 
    constructor Create(_discardLayers : Integer; _dims : TRect) overload; 
    protected 
    { protected declarations } 
    public 
    { public declarations } 
    published 
    { published declarations } 
    end; 
private 
    { private declarations } 
    resolutions : array of TResolutionLevel; 
protected 
    { protected declarations } 
public 
    { public declarations } 
    function getResolutionLevel(_currRes : TResolutionLevel; _delta : Integer) : TResolutionLevel overload; 
    function getResolutionLevel(_index : Integer) : TResolutionLevel overload; 
    function getClosestResolutionLevel(_source : Double; _target : Double) : TResolutionLevel; 
    procedure addResolutionLevel(_discardLayer : Integer; _dims : TRect); 
    constructor Create(_numResolutions : Integer) overload; 
published 
    { published declarations } 
end; 
implementation 

constructor TResolutionSet.Create(_numResolutions : Integer) overload; 
begin 
    SetLength(resolutions, _numResolutions); 
end; 

procedure TResolutionSet.addResolutionLevel(_discardLayer : Integer; _dims : TRect); 
begin 
    resolutions[_discardLayer]:= TResolutionLevel.Create(_discardLayer, _dims); 
end; 

function TResolutionSet.getResolutionLevel(_currRes : TResolutionLevel; _delta : Integer) : TResolutionLevel overload; 
begin 
    //Result:= resolutions 
end; 

function TResolutionSet.getResolutionLevel(_index : Integer) : TResolutionLevel overload; 
begin 
    Result:= resolutions[_index]; 
end; 

function TResolutionSet.getClosestResolutionLevel(_source : Double; _target : Double) : TResolutionLevel; 
var 
    idx : Integer = 0; 
    i : Integer; 
begin 
    for i := Length(resolutions)-1 downto 0 do 
    begin 
    idx:= i; 
    if (_source * Power(2, resolutions[i].getZoomLevel())) <= _target then 
     break; 
    end; 
    Result:= resolutions[idx]; 
end; 

end. 

TResolutionLevel을 내부 클래스로 선언했지만 어떻게이 클래스의 메서드를 어디에서 구현할 수 있습니까?

+0

이 구문은 Java 내부 클래스와 직접적으로 유사하지 않습니다. –

+1

델파이를 처음 사용하기 때문에 문서를 추천 해 드릴 수 있습니다. http://docwiki.embarcadero.com/RADStudio/en/Nested_Type_Declarations –

+0

감사합니다. there –

답변

3

자동 실종 방법을 생성 클래스의 인터페이스 선언 델파이 내부에있는 동안은 + 시프트 Ctrl 키 + C을 누르면. 귀하의 경우에는 그 위치 : 당신이 볼 수 있듯이 각 방법의 완전한 이름을 제공함으로써, 다른 클래스의 메소드를 구현으로

{ TResolutionSet.TResolutionLevel } 

constructor TResolutionSet.TResolutionLevel.Create(_discardLayers: Integer; _dims: TRect); 
begin 

end; 

function TResolutionSet.TResolutionLevel.getResolutionBounds: TRect; 
begin 

end; 

function TResolutionSet.TResolutionLevel.getZoomLevel: Integer; 
begin 

end; 

function TResolutionSet.TResolutionLevel.getZoomPercent: Double; 
begin 

end; 

, 당신은 내부 클래스의 메소드 같은 방법을 구현한다. 중첩 된 클래스의 경우에는 외부 클래스의 이름을 포함해야합니다.

+0

베이비 감사합니다;) 10 분 안에 받아 들일 것입니다 –

+0

베이비? 진심으로? –

+0

@NickHodges 그래서 뭐? 게이 –

관련 문제