Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Коллекция после запуска пустая [D7, Win2k]


Anatoly ©   (2004-12-15 19:45:00) 

В designTime заполняю коллекцию элементами, а после запуска она оказывается пустой. Подскажите, пожалуйста, в чем дело. Кстати, если закрыть и открыть Delphi, то она опустошается и в DesignTime.


Anatoly   (2004-12-16 16:55:00) [1]

Спасибо, все получилось


Pentium133   (2004-12-16 16:24:00) [2]

используй  TQueryCollection = class ( TOwnedCollection)


Anatoly   (2004-12-16 11:12:00) [3]

Вот код:

 TQueryCollectionItem = class(TCollectionItem)
 private
   FQuery: TQuery;
   FMasterQuery: TQuery;
   FPK_FieldName: string;
   FFK_MasterFieldName: string;
   FQueryCaption: string;
   procedure SetQuery(const Value: TQuery);
   procedure SetMasterQuery(const Value: TQuery);
   procedure SetFK_MasterFieldName(const Value: string);
   procedure SetPK_FieldName(const Value: string);
   procedure SetQueryCaption(const Value: string);
 protected
   function GetDisplayName: string; override;
 published
   property Query: TQuery read FQuery write SetQuery;
   property QueryCaption: string read FQueryCaption write SetQueryCaption;
   property MasterQuery: TQuery read FMasterQuery write SetMasterQuery;
   property PK_FieldName: string read FPK_FieldName write SetPK_FieldName;
   property FK_MasterFieldName: string read FFK_MasterFieldName write SetFK_MasterFieldName;
 public
   (*
             type
          TDriverNameProperty = class(TDBStringProperty)
          public
            procedure GetValueList(List: TStrings); override;
          end;

         procedure TDriverNameProperty.GetValueList(List: TStrings);
         begin
          (GetComponent(0) as TDatabase).Session.GetDriverNames(List);
         end;

         ...

         RegisterPropertyEditor(TypeInfo(string), TDatabase, 'DriverName', TDriverNameProperty);
   *)
 end;

 TQueryCollection = class (TCollection)
 private
   FOwner: TPersistent;
   function GetItem(Index: Integer): TQueryCollectionItem;
   procedure SetItem(Index: Integer; Value: TQueryCollectionItem);
 protected
   function GetOwner: TPersistent; override;
   procedure Added(var Item: TCollectionItem); override;
 public
   constructor Create(Owner: TPersistent);
   function Add: TQueryCollectionItem;
   property Items[Index: Integer]: TQueryCollectionItem read GetItem write SetItem stored True; default;
 end;

 THReport =  class (TComponent)
 ...
   FQueryList: TQueryCollection;

 
   constructor Create(AOwner: TComponent); override;

 ...
  end;

...

constructor THReport.Create(AOwner: TComponent);
begin
...
 FQueryList := TQueryCollection.Create(self);
end;

{ TQueryCollection }

function TQueryCollection.Add: TQueryCollectionItem;
begin
 Result := TQueryCollectionItem(inherited Add);
end;

procedure TQueryCollection.Added(var Item: TCollectionItem);
begin
 inherited Added(Item);

end;

constructor TQueryCollection.Create(Owner: TPersistent);
begin
 FOwner := Owner;
 inherited Create(TQueryCollectionItem);
end;

function TQueryCollection.GetItem(Index: Integer): TQueryCollectionItem;
begin
 Result := TQueryCollectionItem(inherited GetItem(Index));
end;

function TQueryCollection.GetOwner: TPersistent;
begin
 Result := FOwner;
end;

procedure TQueryCollection.SetItem(Index: Integer;
 Value: TQueryCollectionItem);
begin
 inherited SetItem(Index, TCollectionItem(Value));
end;

{ TQueryCollectionItem }

function TQueryCollectionItem.GetDisplayName: string;
begin
 if FQuery <> nil then
 begin
   result := FQuery.Name;
   if FQueryCaption <> '' then
     result := FQueryCaption + '(' + result + ')';
 end
 else
   result := inherited GetDisplayName;
end;

procedure TQueryCollectionItem.SetFK_MasterFieldName(const Value: string);
begin
 FFK_MasterFieldName := Value;
end;

procedure TQueryCollectionItem.SetMasterQuery(const Value: TQuery);
begin
 FMasterQuery := Value;
end;

procedure TQueryCollectionItem.SetPK_FieldName(const Value: string);
begin
 FPK_FieldName := Value;
end;

procedure TQueryCollectionItem.SetQuery(const Value: TQuery);
begin
 FQuery := Value;
end;

procedure TQueryCollectionItem.SetQueryCaption(const Value: string);
begin
 FQueryCaption := Value;
end;


Юрий Зотов   (2004-12-16 00:26:00) [4]

Ответ простой - коллекция не сохраняется в DFM. А почему - это без кода не скажешь.


Наверх

Титульная страница Поиск, карта сайта Написать письмо