Главная страница
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.02 c
14-1085451868
gn
2004-05-25 06:24
2004.06.13
M$ Word


3-1085054789
pok
2004-05-20 16:06
2004.06.13
Interbase .... уходит слишком много времени...


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


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


4-1084133388
RyDmi
2004-05-10 00:09
2004.06.13
Имя текущего пользователя