Verwijderd schreef op 07 December 2002 @ 12:00:
[...]
Eigen objecten: zijn dat ook een willekeurig aantal tekstvelden die je in de onFormShow op je scherm laat toveren? Dat wil dus zeggen dat ik er niet aan moet zitten.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
| //---------------------------------------------------------------------------
#ifndef InvoerH
#define InvoeH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <DBGrids.hpp>
#include <ExtCtrls.hpp>
#include <Grids.hpp>
//---------------------------------------------------------------------------
class TForm6 : public TForm
{
__published: // IDE-managed Components
TDBGrid *DBGrid1;
TPanel *Panel1;
TLabel *Label1;
TLabel *Label2;
TEdit *Afkorting;
TButton *Button1;
TButton *Button2;
TButton *Button3;
TButton *Volgende;
TButton *Laatste;
TButton *Vorige;
TButton *Eerste;
void __fastcall Button3Click(TObject *Sender);
void __fastcall FormShow(TObject *Sender);
void __fastcall DBGrid1DrawColumnCell(TObject *Sender,
const TRect &Rect, int DataCol, TColumn *Column,
TGridDrawState State);
void __fastcall EersteClick(TObject *Sender);
void __fastcall LaatsteClick(TObject *Sender);
void __fastcall VolgendeClick(TObject *Sender);
void __fastcall VorigeClick(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
DynamicArray<TEdit *> teksvelden;// de length var. wordt in een methode "gezet"
__fastcall TForm6(TComponent* Owner);
void __fastcall UpdateFields();
};
//---------------------------------------------------------------------------
extern PACKAGE TForm6 *Form6;
//---------------------------------------------------------------------------
#endif |
Waar moet ik dan de destructor neerzeten? Om een Dynamic_array uit het geheugen te verwijderen, moet ik tekstvelden.Length=0; doen in de destructor, maar waar zet ik die in mijn code dat precies neer?
Uhm, misschien een domme opmerking: maar hebben jullie al antwoord gegeven op mijn concrete vraag?
Dit is wat ik er tot nu toe van begrijp: Van alle auto-generated windows moet ik afblijven en ik dacht in de laatste opmerking te horen dat controls die aan een autogenerated window worden toegevoegd, dezelfde owner hebben en bij het afsluiten van dat Form ook worden verwijderd, maar dat moest ik dan toch maar weer deleten. (Voorstaande is beetje wartaal, en zo begrijp ik het ook). Een antwoord met je moet het zetten van die array op length 0 daar neerzetten, omdat ...... is echt genoeg en dan voor het willekeurig aantal tekstvelden een soortgelijke uitleg.
Nog een keer voor de duidelijkheid de algemene structuur:
De dynamische array wordt aangemaakt in de headerfile die ik hierboven al heb staan.
In een methode die wordt aangeroepen als je klikt op een Button:
C++:
1
2
3
4
5
6
7
8
9
10
11
| tekstveld.Length=aantal;
for (int i=0;i<aantal;i++){
//maak een textveld aan
tekstveld[i] = new TEdit(Panel1);
tekstveld[i]->Parent = Panel1;
tekstveld[i]->Visible = true;
//enz andere properties
}
Het doel van dit alles is dat ik geen memoryleaks wil hebben en bij gebruikers geen blauwe schermen en Runtime errors genereer. Bovendien vind ik het interessant om te weten, wat er nu eigenlijk echt gebeurt, maar dat is in principe bijzaak. |