Главная страница
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.027 c
3-1084427584
BPK
2004-05-13 09:53
2004.06.13
DTS портит данные типа sql_variant


3-1085126857
Виктор
2004-05-21 12:07
2004.06.13
Запрос с горизонтальным объединением таблиц


1-1086150441
ZHK
2004-06-02 08:27
2004.06.13
ReadCоmponent и WriteComponent


3-1085419286
m2003
2004-05-24 21:21
2004.06.13
База vs. Файл


3-1084954154
AlexSerp
2004-05-19 12:09
2004.06.13
Весь в непонятках. Хранимая процедура(+)