Cita:
|
Empezado por Al González
Quizás el destructor heredado está siendo ejecutado antes de tiempo.
|
No lo sé, pero como podrás ver en el código al final, yo no lo llamo (por lo menos intencionadamente)
Cita:
|
Empezado por Al González
En realidad es TCustomComboBox, la clase padre de TComboBox (Delphi 6), quien normalmente instancía y destruye la propiedad Items.
|
Correcto, error mío
Cita:
|
Empezado por Al González
Quizás estás destruyendo esa propiedad en otro lugar o modificaste su método de lectura.
|
El método de lectura no se módifica e Items no se destruye
Cita:
|
Empezado por Al González
Pudiera ser que algún evento esté disparando una llamada al método SetFocus del control, lo cual causa la excepción mencionada si éste no tiene contenedor padre.
|
No le programo ningún evento, tansolo lo instancio y ejecuto
Cita:
|
Empezado por Al González
Por último debo agregar que el término sobrecarga se aplica más bien a los casos donde el compilador determina....
|
Buena correccíon, se me cruzaron los conceptos
Cita:
|
Empezado por Al González
De cualquier forma te agradecería que detallaras un poco más este caso.
|
Ok, te paso el código del componente, no es nada secreto y es muyyyyy sencillo:
Código:
unit NxAuxCombo;
interface
uses
Windows, Messages, SysUtils, Classes, Controls,
StdCtrls, NxAuxiliar, Dialogs;
type
TNxAuxCombo = class(TComboBox)
private
FOwnObjects: Boolean;
function GetSelectedObject: TNxAuxiliar;
procedure SetOwnObjects(const Value: Boolean);
protected
public
property SelectedObject: TNxAuxiliar
read GetSelectedObject;
property OwnObjects: Boolean
read FOwnObjects
write SetOwnObjects;
procedure Carrega(List: TStringList);
procedure Clear; override;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Nex', [TNxAuxCombo]);
end;
{ TNxAuxCombo }
procedure TNxAuxCombo.Carrega(List: TStringList);
var
i: Integer;
begin
for i := 0 to List.Count -1 do
Items.AddObject(List[i], List.Objects[i]);
end;
procedure TNxAuxCombo.Clear;
var
i: Integer;
begin
if FOwnObjects then
begin
for i := 0 to Items.Count - 1 do
if Items.Objects[i] <> Nil then
try Items.Objects[i].Free; except end;
end;
inherited;
end;
constructor TNxAuxCombo.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FOwnObjects := true;
Style := csDropDownList;
end;
destructor TNxAuxCombo.Destroy;
var
i: Integer;
begin
if FOwnObjects then
begin
for i := 0 to Items.Count - 1 do
if Items.Objects[i] <> Nil then
try Items.Objects[i].Free; except end;
end;
inherited;
end;
function TNxAuxCombo.GetSelectedObject: TNxAuxiliar;
begin
if Items.Objects[ItemIndex] is TNxAuxiliar then
Result := TNxAuxiliar(Items.Objects[ItemIndex])
else Result := Nil;
end;
procedure TNxAuxCombo.SetOwnObjects(const Value: Boolean);
begin
FOwnObjects := Value;
end;
end.