![]() |
TReader (unit Classes), ungültiger Eigenschaftswert
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:
Das klappt auch alles ganz gut, solange ich das OnClick weglasse.
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; 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. |
AW: TReader (unit Classes), ungültiger Eigenschaftswert
Du könntest mal versuchen, den OnFindMethod- oder OnFindMethodInstance-Event zu verdrahten. Es genügt vielleicht schon dort einfach nil oder bzw. (Code: nil; Data: nil) zurückzugeben und Error auf false zu setzen.
|
AW: TReader (unit Classes), ungültiger Eigenschaftswert
Jupp, OnFindMethod :angle:
Der TReader sucht eigentlich in der Instanz der Root-Komponente (meistens die Form) nach den Event-Methoden, sowie nach verlinkten Komponenten. Entweder du gibst irgendwo im Reader diesen "Parent" an oder du mußt selber suchen. Alternativ ganz böse den "Code" für deine Root-Komponente vor und hint diesem Codeschnipsel anhängen. |
AW: TReader (unit Classes), ungültiger Eigenschaftswert
Hallo,
ah, das mit den TForm-Suchen benutzen klingt doch chon mal ganz gut. Der Bsp.-Code ist etwas "verworren" ;) Da war auch ein TForm lokal erzeugt und als Owner bzw. Parent angegeben. Mal weiter probieren, aber nicht mehr heute *nach Hause schlurf*. Ich melde mich zu Fort- / Rückschritten. So, doch noch mal gestartet in der Tat hat das ursprüngliche Form genau diese Methode ;) dann bin ich morgen ja mal etwas schlauer. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz