Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.16;
Скачать: CL | DM;

Вниз

Коллекция после запуска пустая   Найти похожие ветки 

 
Anatoly ©   (2004-12-15 19:45) [0]

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


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

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


 
Anatoly ©   (2004-12-16 11:12) [2]

Вот код:

 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;



 
Pentium133 ©   (2004-12-16 16:24) [3]

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


 
Anatoly ©   (2004-12-16 16:55) [4]

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



Страницы: 1 вся ветка

Текущий архив: 2005.10.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.056 c
14-1127454959
Тульский
2005-09-23 09:55
2005.10.16
Реклама ПО


9-1117530925
rsy
2005-05-31 13:15
2005.10.16
Тенис


2-1127106166
ilya_ae
2005-09-19 09:02
2005.10.16
освобождение памяти


2-1125789112
Пантелеев Иван
2005-09-04 03:11
2005.10.16
Подсчёт выбраных записей


3-1125899780
Комар
2005-09-05 09:56
2005.10.16
Как можно отправлять на сервер только измененные данные