[Delphi] onbekend aantal buttons runtime createn

Pagina: 1
Acties:

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Topicstarter
Hey all,

de situatie: ik wil aan de hand van een ini-bestandje een van te voren onbekend aantal knoppen op een form kinkelen. In dat ini-bestandje staat dus het aantal knoppen, de caption voor de knop en een parameter voor de OnClick. Het runtime aanmaken van een knop en er een OnClick aanhangen is me al gelukt. Het doorgeven van de param aan de onclick gaat me denk ik wel lukken.

Het probleem: ik kom er even niet uit hoe ik dat onbekend aantal knoppen op dat form krijg. Het lijkt me namelijk dat ik een knop die ik wil maken van te voren wel zal moeten declareren. En omdat het een onbekend aantal knoppen is weet ik ff niet hoe ik dat ga oplossen.

Wat gedaan? Ik heb gezocht hier op GoT en op Google Groups, maar daar kom ik er niet mee. Ook delphi.about.com biedt geen oplossing. Er is genoeg te vinden over het runtime aanmaken van knoppen, maar niet over dat onbekende aantal! Heeft iemand hier een idee?

My personal website


  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Stop je knoppen in een dynamische array - dan kun je ermee doen wat je wilt.
een knop is gewoon een class, dus het volgende is mogelijk:
code:
1
buttons:array of TButton;

[ Voor 41% gewijzigd door kvdveer op 31-01-2003 10:45 ]

Localhost, sweet localhost


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 24-08 21:28

Creepy

Tactical Espionage Splatterer

IS er zo'n groot verschil tussen 1 knop @ runtime, of meerdere knoppen @ runtime aanmaken??
Als je een referantie naar al je knoppen wilt houden zou je eens kunnen kijken naar een TOBjectList. Hier zewt je dan al je aangemaakt knoppen in

EN aangezien een create een referentie naar een nieuwe knop teruggeeft kan je dezelfde variabele gebruiken om 100 buttosn (of meer) aan te maken.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:20
Ik heb ook al eens een onbekend aantal knoppen op een form at runtime aangemaakt, alleen de info over het aantal enzo, kwamen uit een databank.

Wat je dus doet, is de gegevens die je nodig hebt ophalen en dan in een loopje maak je die Buttons aan.
Je kunt gebruik maken van een TObjectList om je referenties naar die Buttons in op te slaan mocht dat nodig zijn.

code:
1
2
3
4
5
for Indx := 0 to AantalKnoppenTeMaken - 1 do begin
   MyList[Indx] := TButton.Create(Form1);
   TButton(MyList[Indx]).OnClick := EventHandlerForButton;
   TButton(MyList[Indx]).Left := positieButton;
end;


edit:
damn, ik moet nog sneller leren typen

[ Voor 5% gewijzigd door whoami op 31-01-2003 10:50 ]

https://fgheysels.github.io/


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Topicstarter
Thanx mensen.
Ga er nu meteen me aan de slag, zorgen dat 't af is. Ziet er bij nader inzien redelijk simpel uit. Had ik zelf ook op moeten kunnen komen. Maar dat gebeurde niet, dus: bedankt!

[ Voor 3% gewijzigd door OZ-Gump op 31-01-2003 10:56 . Reden: typoooooooh ]

My personal website


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Topicstarter
OK dan, het werkt! Als eerste: dank aan allen die gereageerd hebben.
@whoami - Kleine opmerking: je code is bijna perfect, bij de tweede regel moet je alleen een TObjectList.add doen, omdat je anders een List Index out of Bounds krijgt ;)
Ik heb dus inderdaad met een TObjectList gewerkt. Voordeel hiervan boven een dynamisch array is dat een TObjectlist ook zelf zorgt voor alle frees (ziet er wazig uit zo, 'frees'...) en dergelijke. Ik had al een multidimensionaal dynamisch array met de captions van de knoppen en de params voor de OnClick. Dat gedeelte heb ik opgelost door een tag aan elke knop te hangen die overeenkomt met de index van de bijbehorende param in de array. En klaar is Kees of Piet of Gump of wie er dan ook maar mee bezig is... :*)

My personal website


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:20
[nohtml]
OZ-Gump schreef op 31 januari 2003 @ 11:31:
@whoami - Kleine opmerking: je code is bijna perfect, bij de tweede regel moet je alleen een TObjectList.add doen, omdat je anders een List Index out of Bounds krijgt ;)
Nouja, het was dan ook 'code-uit-de-losse-pols'. :P

https://fgheysels.github.io/

Pagina: 1