Results 1 to 13 of 13

Thread: Component definitie @runtime

Hybrid View

  1. #1

    Component definitie @runtime

    Hallo hallo,

    Als ik in de IDE een component copy/paste naar notepad dan zie ik de component definitie (weet niet of dit zo heet. Dit is wat ik bedoel

    Code:
      object btnOpen: TButton
        Left = 254
        Top = 8
        Width = 75
        Height = 25
        Caption = 'btnOpen'
        TabOrder = 2
      end
    )


    zoals gelijk in het DFM file. Is er een mogelijkheid om dit ook @runtime te doen?

    Bij voorbaat dank!
    Last edited by luigi; 09-Jul-18 at 16:18.

  2. #2
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Nee. Het opbouwen van een form @runtime werkt niet met object. Deze constructie is bedoeld voor de IDE zodat deze weet hoe de DFM is opgebouwd.
    Al twijfel ik wel als je het opslaat en weer inleest als stream. Maar dat ben ik nog niet tegengekomen.
    Delphi is great. Lazarus is more powerfull

  3. #3
    *+E13818MU01F0F* Norrit's Avatar
    Join Date
    Aug 2001
    Location
    Landgraaf
    Posts
    967
    Het zijn allemaal published properties en methods, lijkt me dat je met wat RTTI dit wel na kan bouwen.
    Objective reality is a delirium caused by lack of alcohol in blood

  4. #4
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    De btnopen staat ook in de class definitie in de .pas. De vraag is dus of je een klasse geheel van DFM wil opbouwen, of alleen de properties wil zetten op een normale designtime gemaakte class.

    Het eerste is iets lastiger. Je kan runtime geen class types en velden declareren.

    De velden kan je in theorie in een collectie houden, en die dan streamen met defineproperty.

    Maar een class type te definiëren en te registereren voor streaming, dat is lastig.

  5. #5
    Je kunt toch gewoon WriteComponent gebruiken om van een component in run-time dit weer als string weer te geven.
    Er staat zelfs een voorbeeld van ComponentToStringProc(). Werkt prima hoor.

    http://docs.embarcadero.com/products...Component.html

    Resultaat:
    Code:
    object Button1: TButton
      Left = 40
      Top = 8
      Width = 75
      Height = 25
      Caption = 'Button1'
      TabOrder = 0
    end
    Mmmm, ik zie dat de OnClick daar niet bij staat
    Waarschijnlijk omdat dat code is. Daar zul je dus wat meer voor moeten doen.

  6. #6
    Heb de oplossing gevonden bij embarcadero

    Code:
    function ComponentToStringProc(Component: TComponent): string;
    var
      BinStream: TMemoryStream;
      StrStream: TStringStream;
      s: string;
    begin
      BinStream := TMemoryStream.Create;
      try
        StrStream := TStringStream.Create(s);
        try
          BinStream.WriteComponent(Component);
          BinStream.Seek(0, soFromBeginning);
          ObjectBinaryToText(BinStream, StrStream);
          StrStream.Seek(0, soFromBeginning);
          Result := StrStream.DataString;
        finally
          StrStream.Free;
        end;
      finally
        BinStream.Free
      end;
    end;

  7. #7
    Yep, die had ik ook gevonden. Dan mis je alleen nog de OnClick.

  8. #8
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    " MyScrollBar" in dat voorbeeld is wat ik bedoelde met het classtype om te registreren in mijn reply.

  9. #9
    OnClick had ik weggehaald.

  10. #10
    Ik bedoel dat de ComponentToStringProc() geen OnClick genereert in het resultaat. Ook niet als die wel toegekend is.

  11. #11
    Dat stond gelukkig ook niet op mijn wensen lijst Als je in de IDE copy/paste dan wordt de onclick procedure ook niet meegenomen toch?

  12. #12
    Quote Originally Posted by luigi View Post
    Dat stond gelukkig ook niet op mijn wensen lijst Als je in de IDE copy/paste dan wordt de onclick procedure ook niet meegenomen toch?
    Jawel, Hij staat er in jouw openingspost ook zelfs bij

  13. #13
    Nu niet meer

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •