Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.021 c
1-1085905033
ilnarab
2004-05-30 12:17
2004.06.13
С помощью OpenDialog-а открыть папку


11-1075137019
NavigatorV
2004-01-26 20:10
2004.06.13
Компонент TKOLMHDateTimePicker


3-1085379751
DimonNew
2004-05-24 10:22
2004.06.13
ADO и кэширование данных


1-1085979482
Litr
2004-05-31 08:58
2004.06.13
Chart


8-1080807007
Videobaton
2004-04-01 12:10
2004.06.13
Работа с видеокртой




   Наверх