Главная страница
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.024 c
4-1084292929
fc
2004-05-11 20:28
2004.06.13
Как присвоить TPopupMenu имедж лист?


14-1085393487
lehich
2004-05-24 14:11
2004.06.13
запароленый excel


1-1086077407
Viller
2004-06-01 12:10
2004.06.13
Вопрос по FastScript. Работа с формами.


3-1084957679
Users
2004-05-19 13:07
2004.06.13
Транзации в ADO


14-1085537546
Думкин
2004-05-26 06:12
2004.06.13
С днем рождения! 26 мая