Ga naar inhoud


Aanbevolen berichten

Geplaatst:

Hallo,

 

Ik heb een vraagje over de programmeertaal delphi. Misschien staat dit topic in de verkeerde forum, maar ik kon geen beter alternatief vinden vandaar...

 

Ik heb een class TDEELNEMER gedefineerd, met bijbehordende properties en functies.

Nu wil ik een array van de class DEELNEMER defineren.

Hiervoor gebruik ik de instructies:

 

Type TDEELNEMERS:Array of TDEELNEMER;

Var DEELNEMERS:TDEELNEMERS;

 

Hoe moet ik de variabele DEELNEMERS instantieren, zodat ik elk element van het array afzonderlijk kan benaderen?

 

Welke delphi goeroe weet raad?

 

The Iron Maiden

VU+ duo met OpenPli, CCam 2.11 op 78 cm triax wok en multiblock op Astra 19.2, 23.5 en 28.2

 

-- Hier had uw reclame kunnen staan --


Geplaatst:

Leuk probleem.

 

Volgens mij heeft Delphi een al een datastructuur om classes in te proppen. Zoiets als een TList. Er worden uiteraard pointers opgeslagen. Dus dan zal het wel zoiets worden als TDeelnemers[4] as TDeelnemer.

 

Ik zal morgen eens in de boeken duiken.

  • Resistance is futile you will be assimilated
  • Those who would give up essential liberty, to purchase a little temporary safety, deserve neither liberty nor safety. Benjamin Franklin (1706-1790)
  • Mijn vrijheid eindigt niet waar jouw angst begint!

 

 

Geplaatst:

OK. Voor de liefhebbers dan. Er zijn 2 manieren:

- Een dynamisch array zoals jij voorstelt;

- Met een TClassList;

 

Code:
VarTA : Array of TDeelnemer  //Dynamisch arrayDN : TDeelnemer           //Je objectBegin    Setlength(TA,20);  //Plaats voor 20 elementen    DN := TDeelnemer.Create //Maak object    DN.property := eenwaarde  //Vul je object    TA[5] := DN  //Zet object in array op positie 5//doe andere dingen    DN := TA[5]   //Object ophalen    ShowMessage(DN.property)  //Inhoud van object tonen//bij afsluiten prog alle array objecten vrijgeven!!!!    For I := 0 to 19 do    Begin        DN := TA[i];        DN.Free;    End;

Of met een TClassList

Code:
Var  DN: TDeelnemer;  TC: TClassList;  Begin      TC := TClasslist.Create;      DN := TDeelnemer.Create //Maak object      DN.property := eenwaarde  //Vul je object      TC.Add(TClass(DN));    //Typecasten//doe andere dingen      DN := TDeelnemer(TC.Items[b]);  //Object ophalen      ShowMessage(DN.property)  //Inhoud van object tonen//bij afsluiten prog alle classlist objecten vrijgeven!!!!      For B := 0 to TC.Count-1 do      Begin          DN := TDeelnemer(TC.Items[b]);          DN.Free;      End;      TC.Free;  //En ClassList zelf vrijgeven
  • Resistance is futile you will be assimilated
  • Those who would give up essential liberty, to purchase a little temporary safety, deserve neither liberty nor safety. Benjamin Franklin (1706-1790)
  • Mijn vrijheid eindigt niet waar jouw angst begint!

 

 

Geplaatst:

Het gaat prima met een TClasslist, maar ik zit nog met 1 probleem:

 

Hoe kan ik items uit een classlist updaten?

Een classlist heeft geen replace of update method.

Natuurlijk kan ik eerst net betreffende element wissen en daarna weer toevoegen, maar is er geen eenvoudigere oplossing?

 

The Iron Maiden

VU+ duo met OpenPli, CCam 2.11 op 78 cm triax wok en multiblock op Astra 19.2, 23.5 en 28.2

 

-- Hier had uw reclame kunnen staan --

Geplaatst:

Natuurlijk. Je kan direct het object in de ClassList benaderen en de property's van het object wijzigen. Dat gaat op de volgende manier:

 

Code:
TDeelnemer(TC.Items[b]).Property := Waarde;

 

In een array zou dat er ongeveer zo uitgezien hebben:

 

Code:
Deelnemers[5].Property := Waarde

 

Het idee is het zelfde.

  • Resistance is futile you will be assimilated
  • Those who would give up essential liberty, to purchase a little temporary safety, deserve neither liberty nor safety. Benjamin Franklin (1706-1790)
  • Mijn vrijheid eindigt niet waar jouw angst begint!

 

 

Geplaatst:

Waarschijnlijk heb ik een syntax fout gemaakt, want zo dacht ik het ook te doen.

Met jouw voorbeeld lukt het wel.

Bedankt!

 

The Iron Maiden

VU+ duo met OpenPli, CCam 2.11 op 78 cm triax wok en multiblock op Astra 19.2, 23.5 en 28.2

 

-- Hier had uw reclame kunnen staan --

Geplaatst:

Wat voor een fantastisch opensource programma ben je aan het maken?

  • Resistance is futile you will be assimilated
  • Those who would give up essential liberty, to purchase a little temporary safety, deserve neither liberty nor safety. Benjamin Franklin (1706-1790)
  • Mijn vrijheid eindigt niet waar jouw angst begint!

 

 

Geplaatst:

ben momenteel met bezig met een programma om een F1 pool bij te houden. Ik heb een aantal jaar geleden een eerste opzet gemaakt, maar dit was niet object geörienteerd. Nu ben ik bezig om de hele datatypering om te gooien naar objecten.

 

Je moet bezig blijven tijdens deze regenachtige dagen...

 

The Iron Maiden

VU+ duo met OpenPli, CCam 2.11 op 78 cm triax wok en multiblock op Astra 19.2, 23.5 en 28.2

 

-- Hier had uw reclame kunnen staan --

Geplaatst:

Laaste vraag:

 

Hoe kan ik een TClasslist, dus een array van classes opslaan in een bestand?

 

Ik probeer het met:

 

var

Dn:TDeelnemer;

F:File of TDeelnemer;

 

 

assignfile(F,'deelnrs.dat');

rewrite(F);

 

Dn:=TDeelnemer.Create;

if Deelnemers.count > 0

then

for k:=0 to Deelnemers.Count-1

do

begin

Dn:=TDeelnemer(Deelnemers.Items[k]);

write(F,dn);

end;

closefile(F);

 

Dn:=nil;

Dn.Free;

 

Maar ik krijg steeds bestanden van 4 of 8 bytes groot <img src="/forums/images/graemlins/confused.gif" alt="" />

Met records werkte het wel altijd zo.

Wat doe ik verkeerd??

 

mvg,

The Iron Maiden

VU+ duo met OpenPli, CCam 2.11 op 78 cm triax wok en multiblock op Astra 19.2, 23.5 en 28.2

 

-- Hier had uw reclame kunnen staan --

Geplaatst:

Deze is ook leuk. Het verschil met records is dat je variable geen record is maar een pointer naar een datastructuur. Nu sla je dus de pointer op en niet de inhoud. Ik denk dat je dit met steams moet oplossen.

 

Ik ga dit voor je uitzoeken. Kan een dagje of 2 duren.

  • Resistance is futile you will be assimilated
  • Those who would give up essential liberty, to purchase a little temporary safety, deserve neither liberty nor safety. Benjamin Franklin (1706-1790)
  • Mijn vrijheid eindigt niet waar jouw angst begint!

 

 

Geplaatst:

Zo, dat heeft even geduurd. Dit is nog niet zo'n eenvoudig probleem. Een class is niet alleen data maar ook de bijbehorende methoden. Je zou denken dat het een veelvoorkomende vraag is maar ik heb de oplossing toch niet direct kunnen vinden.

 

Een aantal objecten heeft een loadfromfile/savetofile method maar hier gaat het altijd om strings, dus eenvoudige data. Jij hebt complexe data.

 

Je zal voor je objecten een eigen loadfromfile/savetofile moeten schrijven.

 

Ik heb een voorbeeld gevonden van een soort Paint waarbij je vierkantjes en circeltjes object blijven. De objecten worden als XML opgeslagen. Hieronder een stukje van de file.

 

Code:
<surface version="1.0">    <layer id="1818609651">        <visible>1</visible>        <locked>0</locked>        <elements>            <element class="TSCDeRectangle" id="1437924106">                <visible>1</visible>                <locked>0</locked>                <rect>                    <left>91</left>                    <top>43</top>                    <right>211</right>                    <bottom>151</bottom>                </rect>                <brush>                    <color>$0000CC99</color>                    <style>0</style>                </brush>                <pen>                    <color>clBlack</color>                    <mode>4</mode>                    <style>0</style>                    <width>1</width>                </pen>            </element>  

 

Het is een leuk component met voorbeeldprogramma. Als je je daar eens doorheen worstelt kom je er denk ik wel uit.

 

Het voorbeeld is te vinden op Torry, de Delphi site. De naam is sweetdrawingengine.

 

Suc6

  • Resistance is futile you will be assimilated
  • Those who would give up essential liberty, to purchase a little temporary safety, deserve neither liberty nor safety. Benjamin Franklin (1706-1790)
  • Mijn vrijheid eindigt niet waar jouw angst begint!

 

 

Geplaatst:

Ok, bedankt voor je moeite.

Ik weet waar ik het nu moet zoeken.

 

The Iron Maiden

VU+ duo met OpenPli, CCam 2.11 op 78 cm triax wok en multiblock op Astra 19.2, 23.5 en 28.2

 

-- Hier had uw reclame kunnen staan --

Maak een account aan of log in om te reageren

Je moet een lid zijn om een reactie te kunnen achterlaten

Account aanmaken

Registreer voor een nieuwe account in onze community. Het is erg gemakkelijk!

Registreer een nieuwe account

Inloggen

Heb je reeds een account? Log hier in.

Nu inloggen
  • Wie is er online   0 leden

    • Er zijn geen geregistreerde gebruikers deze pagina aan het bekijken
×
×
  • Nieuwe aanmaken...