Einzelnen Beitrag anzeigen

hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#1

TReader (unit Classes), ungültiger Eigenschaftswert

  Alt 24. Jan 2017, 16:37
Hallo,
ich schaue mir gerade einen Quellcode an.
Ziel des Codes ist es, eine DFM-Datei (genauer einen Teil) zu laden und in einem Formular anzuzeigen.

Die Datei sieht wie folgt aus.
object Scrollbox1: TScrollBox
Left = 0
Top = 0
Width = 769
Height = 519
VertScrollBar.Range = 515
Align = alLeft
AutoScroll = False
TabOrder = 1
ExplicitHeight = 470
object Button1: TButton
Left = 0
Top = 0
Width = 732
Height = 515
OnClick = Button1Click
end
end

Und hier ein Teil des Codes.

Delphi-Quellcode:
Procedure StringToComponent(AOwner, AParent: TComponent; Value: string;
                            OnClass: TFindComponentClassEvent; prog: TReadComponentsProc;
                            ReadError: TReaderError; SetName: TSetNameEvent);
var BinStream, StrStream:TMemoryStream;
    Writer: TWriter;
Begin
  if Length(Value)> 0 then
  Begin
    BinStream:= TMemoryStream.Create;
    StrStream:= TMemoryStream.Create;
    try
      StrStream.SetSize(Length(Value));
      StrLCopy(StrStream.Memory,PChar(Value),StrStream.Size);
      while StrStream.Position < StrStream.Size do
        ObjectTextToBinary(StrStream, BinStream);
      Writer:= TWriter.Create(BinStream, 16);
      try
        Writer.WriteListEnd;
      finally
        Writer.Free;
      end;
      BinStream.Seek(0, soFromBeginning);
      with TReader.Create(BinStream, 4096) do
      Begin
        try
          OnFindComponentClass:= OnClass;
          OnSetName:= SetName;
          OnError:= ReadError;
          ReadComponents(AOwner, AParent, Prog);
          BinStream.Seek(0, soFromBeginning);
        finally
          Free;
        end;
      end;
    Finally
      FreeAndNil(BinStream);
      FreeAndNil(StrStream);
    end;
  end;
end;
Das klappt auch alles ganz gut, solange ich das OnClick weglasse.
Mit dem OnClick kommt "ungültiger Eigenchaftswert".

Wie bekomme ich denn dem TReader irgendwie die Methoden beigebracht?


Hintergrund:
Ich will sowas wie einen eigenen Object-Inspector bauen,
um dynamische Forms zu konstruieren.
Das Speichern klappt ja auch (ausser OnClick) und das Laden halt nicht.


Danke im voraus.
Heiko
  Mit Zitat antworten Zitat