Page 1 of 2 1 2 LastLast
Results 1 to 15 of 16

Thread: Dynamische arrays

  1. #1

    Over TObjectList

    Naar aanleiding van het Snake berichtje, waarin mij de tip is gegeven met dynamische arrays te gaan werken, ben ik aan de slag gegaan.
    Maar, voordat ik een willekeurige source van het forum in m'n applicatie
    zet, wil ik het eerst 100% snappen... eigenwijs,

    Nu heb ik dus als ik mijn form creeer, al 5 shapes nodig.
    Met mijn variabele

    Var SegMents: Array of TShape;

    Wil ik verder gaan werken. Alle 5 de shapes in moeten Top 300 zijn,
    en Left telkens 20 eraf (Ze zijn Circle, 20*20 zodat je een rijtje van
    5 shapes krijgt) dus bijv.

    SegMents[0].Left := 300;
    SegMents[1].Left := 280;
    SegMents[2].Left := 260;

    Uit het vorige bericht heb ik dan dit genomen:

    SegMents[High(SegMents)] := TShape.Create(Application);
    // Kon dit ook niet met (Self) ?

    Dit is dus 'alles' tot nu toe.
    Dus, nog even voor de duidelijkheid wil ik in de OnCreate van m'n form
    wil ik dat er 5 shapes op een rij worden gecreeerd, mbv. mijn array.
    Ik heb namelijk nog nooit met arrays gewerkt, alleen met rekenkundige
    en string functies.

    Groeten, Pieter
    Last edited by RedPanda; 30-Jan-03 at 20:43.

  2. #2
    Senior Member
    Join Date
    Jan 2002
    Location
    Nieuwlande, Nederland
    Posts
    612
    Hallo Pieter,

    Misschien kun je beter objecten gebruiken inplaats van een array. Een lijst van objecten (TObjectlist) biedt namelijk ook ruimte om objecten tussen te voegen of ergens tussenuit te gooien.

  3. #3
    Hm, kunnen deze dan ook varieren van lengte, en heb je hier misschien een voorbeeldje van ?

  4. #4
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    een klein voorbeeldje:

    Code:
    //Aanmaken lijst:
    MyList := TObjectList.Create;
    //Niet vergeten te destroyen!
    MyList.Free;
    
    Var
      I: Integer;
      MyShape: TShape;
    Begin
    //We willen 5 shapen hebben
    For I := 1to5do
    Begin
          MyShape := TShape.Create( Self );
          MyShape.Left := 320 - I * 20;
          MyList.Add( MyShape );
        End;
    End;
    !

  5. #5
    Hey, bedankt.

    *Wordt nu tussen Objectlist en array heen en weer gegooid*
    Nu ben ik ook weer een tijdje zoet met m'n prog.

    [Edit]
    Toch nog een vraag, hoe declareer ik de Variabele ?

    Groeten, Pieter
    Last edited by RedPanda; 30-Jan-03 at 16:11.

  6. #6
    TD5user
    Join Date
    Sep 2002
    Location
    Den Bosch
    Posts
    210
    -> aObjectlist : TObjectlist;

    Kijk tevens naar de TObjectlist.Ownsobjects property.

    Hiermee kun je ervoor zorgen dat de Objectlist zijn
    bijbehorende objecten kan freeen.

  7. #7
    Hm, waarschijnlijk doe ik weer wat doms fout, want bij de

    Code:
    var
      Form1: TForm1;
      MyShape: TShape;
      SegMents: TObjectlist;
    zegt Delphi dat hij TObjectlist niet kent !
    [ [Error] Unit1.pas(21): Undeclared identifier: 'TObjectList' ]

    Moet ik nog iets bij de uses toevoegen, of de variable anders declareren ?

  8. #8
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    Je moet natuurlijk nog wel even de bijbehorende unit Contnrs aan de uses-clause toevoegen
    !

  9. #9
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    Als je in de Delphi help naar TObjectList zoekt staat er keurig bij dat deze in de 'Contnrs' unit zit, die moet je dus toevoegen aan je uses
    Qui custodiet ipsos custodes

  10. #10
    Sorry, was weer te snel.... F1 tussen ObjectList... en daar is de use Contnrs !
    Foutje...

    [EDIT]
    En wederom waren Mark en Stijn me weer voor

    Pieter

  11. #11
    Snik snik, nou lukt het nog steeds niet, wordt er echt ongeduldig van...
    Zouden jullie mij nog een keer willen helpen ?

    bij de
    Code:
    var
      Form1: TForm1;
      MyShape: TShape;
      SegMents: TObjectlist;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      SegMents := TObjectList.Create;
      SegMents.Free;
    
      SetSnake;
    end;
    
    procedure TForm1.SetSnake;
    Var I: Integer;
    begin
      For I := 1 to 5 do
    Begin
      MyShape := TShape.Create( Self );
      MyShape.Left := 320 - I * 20;
      MyShape.Top := 300;
      MyShape.Shape := StCircle;
      MyShape.Width := 20;
      MyShape.Height := 20;
      MyShape.Pen.Color := ClBlack;
      MyShape.Pen.Width := 2;
      MyShape.Brush.Color := ClYellow;
      SegMents.Add( MyShape );
    end;
    end;
    Geeft de compiler geen fouten weer, maar als ik het uitvoer verschijnt de error
    EAccesVolation, nog wat technisch geblaat erbij.
    Als ik de SegMents.Free weghaal, wordt m'n prog wel uitgevoerd maar gebeurt er niks. Hoe kan dit nou ?

  12. #12
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    Eerst maak je de ObjectList aan, en meteen daarna free je m. Die Free moet je pas uitvoeren in de OnDestroy van je form. En wat zou er moeten gebeuren?
    !

  13. #13
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    Als ie niet zichtbaar wordt; dat is logisch: je moet eerst nog even MyShape.Parent := Self; doen anders weet de TShape niet waar ie op komt te staan
    Qui custodiet ipsos custodes

  14. #14
    Owkie, is dat ook weer voor elkaar.
    Dankjulliewel !

  15. #15
    Nog even een vraag, hoe kan ik ervoor zorgen, dat alle 5 de shapes een nieuwe top krijgen ? (Top := Top - 40)
    Als ik dit namelijk weet, kan ik ook aan de gang met left, positions en verder.

    Groeten, Pieter

Page 1 of 2 1 2 LastLast

Thread Information

Users Browsing this Thread

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

Similar Threads

  1. Dynamisch veld wijzigen via dynamische box
    By mr.Pac Stealy in forum Algemeen
    Replies: 4
    Last Post: 19-Feb-04, 18:04
  2. Namen vanuit database in arrays zetten
    By Area62 in forum Databases
    Replies: 33
    Last Post: 29-Jan-04, 20:28
  3. Dynamische Structuur met pointers
    By Mar-T in forum Algemeen
    Replies: 10
    Last Post: 07-Jan-04, 10:53
  4. Aanpassen van dynamische arrays
    By KillerB in forum Algemeen
    Replies: 5
    Last Post: 31-Aug-03, 20:59

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
  •