Ver Mensaje Individual
  #3  
Antiguo 23-01-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Reputación: 24
marto Va por buen camino
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.
__________________
E pur si muove

Última edición por marto fecha: 23-01-2004 a las 20:51:32.
Responder Con Cita