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

Вниз

ReadCоmponent и WriteComponent   Найти похожие ветки 

 
ZHK ©   (2004-06-02 08:27) [0]

Господа, помогите разобраться. Привожу две процедуры. Одна сохраняет страницы из объекта TPageControl, а вторая, соответственно, загружает из туда из файла. Сохраняется все отлично, а при открытии возникает ошибочка Class not found. Очевидно, что я чего-то не учел, только что? Подскажите, плз. Буду признателен за любую информацию.


procedure TForm6.Button1Click(Sender: TObject);
var
 ms:TMemoryStream;
 fs:TFileStream;
 I:Integer;
begin
 if SaveDialog1.Execute then
    begin
      ms:=TMemoryStream.Create;
      fs:=TFileStream.Create(SaveDialog1.FileName,fmCreate or fmOpenWrite);
      for I:=0 to PageControl1.PageCount-1 do
        begin
          ms.WriteComponent(TControl(PageControl1.Pages[I]));
          ms.Position:=0;
          if UpperCase(ExtractFileExt(SaveDialog1.FileName))=".TOB" then
             ObjectBinaryToText(ms,fs)
          else
            fs.CopyFrom(ms,ms.Size);
        end;
      fs.Free;
      ms.Free;
    end;
end;


procedure TForm6.Button6Click(Sender: TObject);
var
 fs:TFileStream;
 ms:TMemoryStream;
 C:TComponent;
begin
 while PageControl1.PageCount>0 do
   PageControl1.Pages[0].Free;
 if OpenDialog1.Execute then
    begin
      fs:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
      ms:=TMemoryStream.Create;
      while fs.Position<fs.Size do
        begin
          C:=TTabSheet.Create(PageControl1);
          ms.Clear;
          if UpperCase(ExtractFileExt(OpenDialog1.FileName))=".TOB" then
             begin
               ObjectTextToBinary(fs, ms);
               ms.Position:=0;
               ms.ReadComponent(C);
             end
          else
            fs.ReadComponent(C);
          TTabSheet(C).PageControl:=PageControl1;
        end;
      ms.Free;
      fs.Free;
    end;
end;


 
Digitman ©   (2004-06-02 08:38) [1]

см. RegisterClass()


 
ZHK ©   (2004-06-02 09:14) [2]

Да, понятно. Но если я только что, в течении одного сеанса, не закрывая программы, записываю компонент в файл, то,я думаю, это означает, что классы уже зарегистрированы. Не так ли? А при попытке чтения, тут же, оказывается, что нет. Или я все-таки не прав?


 
Digitman ©   (2004-06-02 09:36) [3]

Call RegisterClass to register a class with the streaming system. Form classes and component classes that are referenced in a form declaration (instance variables) are automatically registered.  Any other classes used by an application must be explicitly registered by calling RegisterClass if instances are to be saved.
Once classes are registered, they can be loaded or saved by the VCL streaming system. GetClass returns nil when passed the class name of an unregistered class, and FindClass raises an exception for unregistered classes.


 
ZHK ©   (2004-06-02 10:10) [4]

Ага. Понял! Работает!



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

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

Наверх




Память: 0.47 MB
Время: 0.05 c
14-1085638234
REA
2004-05-27 10:10
2004.06.13
Хороший тон


1-1085381152
Дмитрий 2004
2004-05-24 10:45
2004.06.13
Вертикальный QRlabel


3-1085108938
mikl2002
2004-05-21 07:08
2004.06.13
Выборка записей и возвращение промежутка выбранных строк


3-1085041275
slava7
2004-05-20 12:21
2004.06.13
работа с БД в сети


14-1085311405
VMcL
2004-05-23 15:23
2004.06.13
Голосование "Образование программиста?"