Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.04 c
2-1127235261
RDS
2005-09-20 20:54
2005.10.16
вопрос по FindFirst, FindNext &amp; FindClose


11-1108458489
NorthMan
2005-02-15 12:08
2005.10.16
Почему KOL ругается на Classes.pas?


14-1127400606
Джо
2005-09-22 18:50
2005.10.16
Мирная тема.


1-1127479554
Duk_
2005-09-23 16:45
2005.10.16
HTML page


14-1127401725
Кручен-Верчен
2005-09-22 19:08
2005.10.16
Проверьте задачу по физике.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский