델파이에서 TForm에서 파생 된 기본 폼 클래스를 generic으로 정의 할 수 있는지 궁금합니다. 내가하고있는 응용 프로그램은 다양한 하드웨어 장치 (직렬 포트, USB, 이더넷 등을 통해)와 상호 작용하며 각 장치가 해당 장치에 특정한 속성을 포함하는 속성 양식을 표시 할 수 있기를 원합니다. 폼 디자이너에 액세스하려고 할 때Delphi - TForm 및 Generics
지금까지 나는 다음과 같은 코드를 가지고 ...
// DEVICE MODEL...
// Interface defining a device
IDevice = interface
procedure ShowPropertyForm;
// ... Other procedures and functions
end;
// Abstract base device class
TDevice = class(IDevice)
protected
// Override this function to show their property form
procedure DoShowPropertyForm; virtual; abstract;
public
// Calls Self.DoShowPropertyForm;
procedure ShowPropertyForm;
end;
TSerialDevice = class(TDevice)
protected
// Creates and shows the TSerialDeviceForm below
procedure DoShowPropertyForm; override;
end;
// Represents a device capable of providing positioning information
TGpsDevice = class(TSerialDevice)
protected
// Creates and shows the TGpsDeviceForm below
procedure DoShowPropertyForm; override;
end;
// FORM MODEL...
// Represents a base form, with skinning functionality, etc
TBaseForm = class(TForm)
end;
// Base device properties form, allows the form to access a strongly-typed
// version of the IDevice
TDeviceForm<T : IDevice> = class(TBaseForm)
private
FDevice : T;
public
// Accessor for the associated IDevice
property Device : T read FDevice write FDevice;
end;
// Property form for a TSerialDevice, has controls for controlling port name
// baud rate, stop/start bits, etc
TSerialDeviceForm = class(TDeviceForm<TSerialDevice>)
end;
// Property form for a TGpsDevice, has controls in addition to what is
// provided by the TSerialDeviceForm
TGpsDeviceForm = class(TSerialDeviceForm)
end;
문제는 온다. 예를 들어 TBaseForm에는 "OK"및 "Cancel"버튼이 있습니다. TDeviceForm에 추가 기능을 추가하려고하지만 디자이너를 열려고하면 다음 오류가 나타납니다.
폼을 만들 때 오류가 발생했습니다. 루트 클래스를 찾을 수 없습니다 : "". 나는 TGpsDeviceForm 디자이너를 열려고하면
는 마찬가지로, 나는 다음과 같은 오류가 ...
을 만드는 중 오류 형식 : 'TSerialDeviceForm'에 대한 조상을 찾을 수 없습니다.
저는 델파이 폼 디자이너가 제네릭을 다룰 수는 없지만이 문제를 해결할 더 좋은 방법이있을 수 있다고 생각합니다. 상속 DeviceForm에 TDeviceForm :
객체 DeviceForm 다음 DFM 파일에서
는 TBaseForm 이외의 모든 것을, 나는에서 첫 번째 줄을 변경했을 TDeviceForm
그러나이 아무런 차이가없는 것 같습니다.
누구든지 조언을 제공해 줄 수 있습니까? 미리 감사드립니다.
지금까지 내가 아는 한 시각적 형식 상속은 제네릭 형식과 함께 사용할 수 없습니다. –
답변 해 주셔서 감사합니다. 어제 제가 TSerialDeviceForm 및 TGpsDeviceForm과 같은 폼 디자이너에 액세스 할 수 있었던 어제의 시점에 이르렀지만, 이번에는 공을 안 맞았습니다. 순수한 운! – weblar83
일반 매개 변수를 계층 구조의 아래쪽에 배치하면 VFI를 끝내고 나면 정상적으로 작동합니다. –