[FONT=arial]
Ik wil graag een reeks van componenten vernietigen, maar wanneer een component niet bestaat moet de melding hiervan worden opgevangen. Hoe doe ik dit???
[FONT=arial]
Ik wil graag een reeks van componenten vernietigen, maar wanneer een component niet bestaat moet de melding hiervan worden opgevangen. Hoe doe ik dit???
WDS
Je kun er een try except omheen zetten, maar je kunt als je ze aan een variabelel toewijst met assigned(MijnVariabele) kijken of er wel iets in die var zit. Verder kun je als je die compo's op een form of datamodule heb staan, met form.Controls of form.Components alle controls/components op een form aflopen...
Nee, de Romeinen spraken geen ISO-8859-1 LATIN
Het 'mooie' van componenten (TComponent) is toch dat de owner deze opruimt. Wanneer je deze componenten allemaal dezelfde owner geeft, hoef je alleen die owner op te ruimen om de reeks van componenten te verwijderen.
Mvg,
MH.
Mijn comingout:
Mam, Pap, ik programmeer Delphi.
Uhm dit werkt niet, omdat ik gebruik maak van in runtime aangemaakte componenten.. Weet je nog een andere oplossing.
Ik krijg nu de melding Undeclared identifier tijdens het compileren.
WDS
dan doe je toch iets fout. Alleen klassen (of componenten) die afgeleid zijn van TComponent hebben in de constructor een optie om een owner mee te geven. TStringlist heeft dat bijvoorbeeld niet. Maar iets (een variabele of lijst) houd de gecreerde objecten toch voor je vast? Dan kan je ze ook free'en. Als je zeker weet dat een object is gecreeerd (bijvoorbeeld in een constructor) dan kan je zonder problemen de free aanroepen, anders kan je Assigned() gebruiken.Uhm dit werkt niet, omdat ik gebruik maak van in runtime aangemaakte componenten
Geef eens een stukje code, of verduidelijk je probleem.
Hoe maak je die componenten aan? Sla je het resultaat van die actie niet ergens op?
Marcel
Originally posted by Wybe
Ik krijg nu de melding Undeclared identifier tijdens het compileren.
Bedoel je dat je in de source componenten verwijderd (met naam en toenaam) die je runtime aanmaakt
Ik ben benieuwd naar de source. Misschien biedt dat een nieuw licht
Ik heb een functie aangemaakt waarin ik op de volgende manier een component aan maak.
var Lbl_test
Lbl_test:=TLabel.Create(Frm_orderBekijken.GrpBx_Pr oduct);
Lbl_test.Parent:=Frm_OrderBekijken.GrpBx_Product;
Lbl_test.Top:=16;
Lbl_test.Left:=8;
Lbl_test.Caption:='Behuizing:';
Lbl_test.Visible:=true;
Lbl_test.Enabled:=true;
Nu is het probleem dat wanneer ik op dezelfde posities een ander label wil plaatsen (ter vervanging van) de is het oude label ook nog deels zichtbaar, het overlapt elkaar .
Nu heb ik een functie destroyComponent() gemaakt, welke alle componenten af moet gaan en de bestaande componenten destroyed.
Het controleren of het component bestaat krijg ik niet voor elkaar.
WDS
je moet de owner (das de variabele tussen de haakjes bij de aanroep naar create) niet op de groupbox zetten, maar op het form. Als je dan het form sluit worden je compo's automagisch gedestroyed. Je hoeft zelf dan niets meer te doen.
Voor dat destroyen: je kunt ook het label visible op false zetten, dan wordt het gedestroyed als het form gesloten wordt. Maar simpeler nog: waarom vervang je niet gewoon de tekst van het label? dat scheelt heel wat werk...
Nee, de Romeinen spraken geen ISO-8859-1 LATIN
Ja maar ik zit ook er mee dat ik niet altijd evenveel componenten nodig heb
WDS
Wat wil je dan precies? want ik heb toch het vermoeden dat je de verkeerde remedie gebruikt tegen je probleem
Nee, de Romeinen spraken geen ISO-8859-1 LATIN
Dat is het mooie van een form als owner. Wanneer je het form destroyed gaan alle componenten mee in de Destroy, Hoeveel je er ook hebt. Het maakt dus niet uit hoeveel componenten je hebt.Originally posted by Wybe
Ja maar ik zit ook er mee dat ik niet altijd evenveel componenten nodig heb
Jos
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks