Buenos días a todos, hacía mucho que no pasaba por aquí.
Estoy migrando una aplicación desde Delphi 7 a Delphi 10.2.3 Tokyo.
Os pongo primero en antecendentes, conseguí migrar dicha aplicación a Delphi XE7, compilada perfectamente (con el QuickReport 5.05). Ahora la empresa para la que trabajo ha comprado la versión 10.2.3 y ando en la migración (que no debería dar ningún problema, excepto algunos componentes nuevos...).
Todos los componentes de terceros están instalados y migrados (los gratuitos y antiguos que vienen desde D7) correctamente (de hecho los he probado en aplicaciones independientes). El problema me surge a la hora de compilar, me lleva a la unit qrpcontrols y me da un error de incompatibilidad de tipos.
Lo raro es que la incompatibilidad de tipos que me da es "TField" y "TBlobField", aquí me descuadra todo porque un "TBlobField" hereda de "TField".
Este código me compila y entra en el IF correspondiente sin problemas:
Código Delphi
[-]var
oField : TField;
oBlobField : TBlobField;
begin
oField := TField.Create( Self );
oBlobField := TBlobField.Create( Self );
if oBlobField is TField then
ShowMessage( 'Entra en TField' );
if oField is TBlobField then
ShowMessage( 'No debe entrar nunca.' );
oField.Free;
oBlobField.Free;
end;
Pues en la unit de qrpcontrols me da el error en esta parte:
Código Delphi
[-]procedure TQRPDBImage.LoadPicture;
var
S: String;
begin
if (DataField<>'') and (Dataset<>NIL) then
begin
try
If Not (DataSet.FindField(DataField) is TBlobField) Then begin
S:=ExpandFileName(Dataset.FindField(DataField).AsString);
If ExtractFileExt(S)='' Then S:=ChangeFileExt(S,'.BMP');
If FileExists(S) Then Picture.LoadFromFile(S);
end
Else
Picture.Assign(Dataset.FindField(DataField));
except
end;
end;
end;
Os pongo la clase TQRPDBImage:
Código Delphi
[-]TQRPDBImage = class(TQRDBImage)
private
FFixBottomPosition : Boolean;
FStretchHeightWithBand : Boolean;
protected
procedure Print(OfsX, OfsY : integer); override;
public
procedure LoadPicture;
published
property FixBottomPosition: Boolean Read FFixBottomPosition
Write FFixBottomPosition;
property StretchHeightWithBand: Boolean Read FStretchHeightWithBand
write FStretchHeightWithBand;
end;
Hereda de esta que está en la unit QRCtrls:
Código Delphi
[-]
TQRDBImage = class(TQRPrintable)
private
FField : TField;
FDataSet : TDataSet;
FDataField : string;
FPicture: TPicture;
FStretch: boolean;
FCenter: boolean;
FPictureLoaded: boolean;
procedure PictureChanged(Sender: TObject);
procedure SetCenter(Value: Boolean);
procedure SetDataField(const Value: string);
procedure SetDataSet(Value: TDataSet);
procedure SetPicture(Value: TPicture);
procedure SetStretch(Value: Boolean);
protected
function GetPalette: HPALETTE; override;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure Paint; override;
procedure Prepare; override;
procedure Print(OfsX, OfsY : integer); override;
procedure UnPrepare; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure GetExpandedHeight(var newheight : extended ); override;
procedure GetFieldString( var DataStr : string); override;
procedure LoadPicture;
property Field: TField read FField;
property Picture: TPicture read FPicture write SetPicture;
published
property Center: boolean read FCenter write SetCenter default True;
property DataField: string read FDataField write SetDataField;
property DataSet: TDataSet read FDataSet write SetDataSet;
property Stretch: boolean read FStretch write SetStretch default False;
property ActiveInPreview;
end;
Estas funciones son idénticas y no han cambiado nada en QuickReport 5.05 y en XE7 funciona.
Me estoy volviendo un poco loco
Gracias de antemano.