Results 1 to 11 of 11

Thread: stringgrid.create

  1. #1
    Senior Member
    Join Date
    Jan 2005
    Location
    Waspik
    Posts
    579

    stringgrid.create

    Een sullige vraag. Hoe maak je run time een stringgrid aan? Navolgende geeft geen foutmelding, maar toont ook geen stringgrid.


    Code:
    procedure TForm1.Button3Click(Sender: TObject);
      procedure TMain_Frm_Basis.Button1Click(Sender: TObject);
      var
        stringgrid : TStringgrid;
      begin
        stringgrid := TStringgrid.Create(self);
        stringgrid.Top := 25;
        stringgrid.Left := 416;
        stringgrid.ColCount := 5;
        stringgrid.RowCount := 10;
        stringgrid.Name := 'test';
      end;
    end;

  2. #2
    Even toevoegen aan je code:

    Code:
    StringGrid.Parent := EenOfAnderForm;
    Bart

  3. #3
    Jan
    Join Date
    Oct 2007
    Location
    Mijdrecht
    Posts
    906
    Waarom zou je dat in runtime doen ?

  4. #4
    @mesa75: waarom niet?
    Bovendien beantwoordt dat de vraag niet.

    Bart

  5. #5
    Jan
    Join Date
    Oct 2007
    Location
    Mijdrecht
    Posts
    906
    De vraag was al beantwoord.
    Het lijkt me gewoon makkelijker om de stringgrid in designtime te plaatsen.

  6. #6
    Senior Member
    Join Date
    Jan 2005
    Location
    Waspik
    Posts
    579
    Bedankt, het werkt.

    Waarom runtime? Omdat ik vooraf niet precies weet hoeveel stringgrids nodig zijn. Door ze runtime aan te maken o.b.v. gevonden info heb ik altijd het juiste aantal.

  7. #7
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Het standaard antwoord van mijn kinderen op een vraag zoals dat is altijd: "Omdat het kan"
    TMemoryLeak.Create(Nil);

  8. #8
    Jan
    Join Date
    Oct 2007
    Location
    Mijdrecht
    Posts
    906
    Zo kan het in ieder geval niet, want de stringgrid is een local variable procedure TMain_Frm_Basis.Button1Click. Die verdwijnt dus weer heel snel.

    Het voordeel van de delphi IDE vind ik : wysiwyg. En als je visual components in runtime aanmaakt, dan heb je dat voordeel nou net weer niet. In dit geval heel legitiem hoor.

  9. #9
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Quote Originally Posted by mesa57 View Post
    Zo kan het in ieder geval niet, want de stringgrid is een local variable procedure TMain_Frm_Basis.Button1Click. Die verdwijnt dus weer heel snel.
    Dat is niet waar want hij geeft hem in die test-procedure niet vrij; hij raakt alleen
    zijn referentie naar de TStringGrid kwijt.

    Quote Originally Posted by mesa57 View Post
    Het voordeel van de delphi IDE vind ik : wysiwyg.
    Het leuke is dat deze vraag gesteld wordt in het Lazarus-forum, maar onder Delphi
    gelden dezelfde regels.

    Soms (heel soms) is het interessanter om @runtime dingen aan te maken, vooral
    als je van te voren niet weet hoeveel TStringGrids (of welke control dan ook) je
    nodig hebt op een TForm.

    Zelf zou ik een container pakken (bijvoorbeeld een TFrame of TForm) en daar
    alle controls op droppen @designtime en wanneer nodig aanmaken @runtime.

    Maar zoals gezegd: het ging hier slechts om de theoretische vraag hoe zoiets
    moet, niet of het wenselijk of de meest ideale manier is.

    Greetz,

    Peter.
    TMemoryLeak.Create(Nil);

  10. #10
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,133
    Quote Originally Posted by VideoRipper View Post
    Dat is niet waar want hij geeft hem in die test-procedure niet vrij; hij raakt alleen zijn referentie naar de TStringGrid kwijt.
    Inderdaad, maar ook weer niet helemaal. De referentie zit nog ergens in de Controls array property, en je zou hem ook nog kunnen vinden via FindComponent('test'). Bij meerdere grids moet je dan dus wel unieke namen meegeven. Maar een referentie onthouden in een private TList field is dan allemaal wel wat makkelijker. Dat is: als OP überhaupt een referentie nodig heeft.
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

  11. #11
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Quote Originally Posted by NGLN View Post
    Inderdaad, maar ook weer niet helemaal.
    Ik doelde op:
    Delphi Code:
    1. var
    2.     stringgrid : TStringgrid;
    Die referentie raak je kwijt.

    Omdat de form waar de grid op wordt geplaatst als owner is aangesteld
    Delphi Code:
    1. stringgrid := TStringgrid.Create(self);
    komt hij automatisch in zijn components-array, zodat de form de grid wel blijft
    kennen, waardoor hij de grid aan het einde van z'n leven keurig kan opruimen.
    TMemoryLeak.Create(Nil);

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
  •