USING BDS2006 : C++에서 Graphics32 Resampler_ex 예제를 변환하려고하지만 일부 코드에서 어떤 일이 발생하는지 또는 해당 코드를 다시 작성하는 방법을 이해할 수 없습니다. C++. 이 샘플에서 Graphics32 Delphi 샘플을 C++로 변환하는 데 도움이 필요합니다.
사용하는 샘플러 선택할 수있는 콤보가있다 : 이 자신의 OnChange 이벤트에 Deplhi 코드 :{ TClassList }
{ This is a class that maintains a list of classes. }
TClassList = class(TList)
protected
function GetItems(Index: Integer): TClass;
procedure SetItems(Index: Integer; AClass: TClass);
public
function Add(AClass: TClass): Integer;
function Extract(Item: TClass): TClass;
function Remove(AClass: TClass): Integer;
function IndexOf(AClass: TClass): Integer;
function First: TClass;
function Last: TClass;
function Find(AClassName: string): TClass;
procedure GetClassNames(Strings: TStrings);
procedure Insert(Index: Integer; AClass: TClass);
property Items[Index: Integer]: TClass read GetItems write SetItems; default;
end;
ResamplerList: TClassList;
내 문제는이 라인에 있습니다
procedure TfmResamplersExample.KernelClassNamesListClick(Sender: TObject);
var
Index: Integer;
begin
Index := KernelClassNamesList.ItemIndex;
if Src.Resampler is TKernelResampler then
with TKernelResampler(Src.Resampler) do
begin
Kernel := TCustomKernelClass(KernelList[Index]).Create;
LbParameter.Visible := (Kernel is TAlbrechtKernel) or
{$IFDEF Ex}
(Kernel is TGaussianKernel) or
(Kernel is TKaiserBesselKernel) or
(Kernel is TNutallKernel) or
(Kernel is TBurgessKernel) or
(Kernel is TBlackmanHarrisKernel) or
(Kernel is TLawreyKernel) or
{$ENDIF}
(Kernel is TSinshKernel);
gbParameter.Visible := LbParameter.Visible;
SetKernelParameter(Kernel);
CurveImage.Repaint;
end;
end;
Kernel := TCustomKernelClass(KernelList[Index]).Create;
어떻게이 줄을 C++로 변환 할 수 있습니까? 코멘트 제품과 ANWERS AFTER
편집 :
좋아, 내 undertanding 넘어 보인다. 내 목적을 위해,이 코드가 너무 번거롭지 않게 복제 할 수 있다면 충분할 것입니다.
itemindex를 기반으로 스위치를 사용하여 올바른 클래스를 인스턴스화 할 수 있습니까?
class DELPHICLASS TNearestResampler;
class PASCALIMPLEMENTATION TNearestResampler : public Gr32::TCustomResampler
{
typedef Gr32::TCustomResampler inherited;
[...]
}
class DELPHICLASS TLinearResampler;
class PASCALIMPLEMENTATION TLinearResampler : public Gr32::TCustomResampler
{
typedef Gr32::TCustomResampler inherited;
[...]
};
class DELPHICLASS TDraftResampler;
class PASCALIMPLEMENTATION TDraftResampler : public TLinearResampler
{
typedef TLinearResampler inherited;
[...]
};
class DELPHICLASS TKernelResampler;
class PASCALIMPLEMENTATION TKernelResampler : public Gr32::TCustomResampler
{
typedef Gr32::TCustomResampler inherited;
[...]
};
내가 내가 그들 중 하나가 "커널"을 지정할 수있는 방법을 얻을하지 않습니다 .... 내가로부터 무엇을 기억에서
흠, 가상 생성자. C++에서 어렵습니다. 나는 그것이 가능하다는 것을 확신하지 못한다. 클래스 목록보다는 함수 목록을 유지한다고 생각합니다. 각 함수는 매개 변수가 없으며 호출 될 때 새로 생성 된 커널 인스턴스를 반환합니다. –