[Delphi] Klasse variabelen wijzigen

Pagina: 1
Acties:

  • Nibble
  • Registratie: Juli 2001
  • Laatst online: 16-08 02:25
ok, hier even de code:

code:
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
Type RModuleCollection = record
       TotalMods        : Integer;
       ModFile          : Array[0..maxModules] of RModule;
End;

Type TCWModule = class(TObject)
    private
        ModFile       : File;
        Modules       : RModuleCollection;
    public
        SpelerNaam    : String;
        SpelerEmail   : String;
        Score         : Integer;
        Function DetectModules(Path: String) : Integer;
    end;

//------------------------------------------------------

implementation


Function TCWModule.DetectModules(Path: String) : Integer;
var   Searchrec: TSearchRec;
         aantal: Integer;
       modList : TListView;
begin
Result := 1;
aantal:=0;
 try
   if FindFirst((Path)+'*.cmo',faAnyfile,SearchRec) = 0 then                    
    begin
      repeat
        begin
        aantal:=aantal+1;
        end
      until (FindNext(SearchRec) <> 0) or (aantal > maxModules);
    Modules.TotalMods := aantal;
    showmessage(inttostr(Aantal));
    FindClose(SearchRec);                                                          
    Result := 0;
    end;
 Except
   FindClose(SearchRec);                                                        
   Result := 1;
 end;
End;


Hij knalt er steeds uit bij "Modules.TotalMods := aantal" en ik kan er maar niet achter komen waarom ...
Dit zou eigenlijk toch moeten lukken niet ? (of ik kijk er echt falikant langs).
Ik bedoel, het is een functie van die klasse, dus die zou die variabele zo moeten kunnen wijzigen.
Toch krijg ik er een access violation op...
Iemand een idee, want ik zit er doorheen...

[ Voor 3% gewijzigd door Nibble op 29-07-2003 20:09 ]

T is for TANK, and T is for TERROR ... and K is the K for KILLING in error.


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 10:45

mulder

ik spuug op het trottoir

Moet je niet eerst een instantie van Modules maken?

oogjes open, snaveltjes dicht


  • klinz
  • Registratie: Maart 2002
  • Laatst online: 10-08 15:44

klinz

weet van NIETS

Don Facundo schreef op 29 July 2003 @ 21:12:
Moet je niet eerst een instantie van Modules maken?
Nee, het is een variabele van het type record.

[ Voor 76% gewijzigd door klinz op 29-07-2003 21:18 ]


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 17:28

alienfruit

the alien you never expected

Ja. Dus je moet eerst geheugen vrij maken voor die record etc.

  • klinz
  • Registratie: Maart 2002
  • Laatst online: 10-08 15:44

klinz

weet van NIETS

Nee, dus.
code:
1
2
3
4
5
type
    pRModuleCollection = RModuleCollection;
    RModuleCollection = record
    // ...
    end;

RModuleCollection kun je gebruiken om een instantie te creeeren van dat record. Bij het gebruik van pRModuleCollection moet je inderdaad met GetMem geheugen alloceren. Je bent in de war met een class. Dat is namelijk altijd een pointer.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
alienfruit schreef op 29 July 2003 @ 21:23:
Ja. Dus je moet eerst geheugen vrij maken voor die record etc.
Nee , dat hoeft niet.

Als RModuleCollection een class was geweest, dan moest dat wel. RModuleCollection is echter een record en wordt op de stack gecreërd, en niet op de heap, waardoor je geen memory moet alloceren voor 'Modules'.

https://fgheysels.github.io/


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 17:28

alienfruit

the alien you never expected

Neej. Ik ben in de war omdat ik zelf altijd pRModuleCollection (bijv.) gebruik bij een record :)

  • Nibble
  • Registratie: Juli 2001
  • Laatst online: 16-08 02:25
Tis ook altijd op het moment dat je na uuuuuren (wat zeg ik dagen) zoeken een post maakt en nog geen uur later de oplossing hebt gevonden.
Het moest dus wel een .create worden om mijn probleem op te lossen :)

Maar desalniettemin wil het nog niet :P heb nog een vage xml error.
Omdat ik geen component gebruik maar direct "TXMLDocument" moet ik een domvendor opgeven.
Alleen hoe doe ik dat ? ik kan wel iets van "XMLFile.DOMVendor := " doen, maar als ik daarachter bijvoorbeeld "MSXML" met of zonder quotes gebruik pakt hij het niet.
Als ik los een domvendor maak met:

DOMVendor := TDOMVendor.Create;
DOMVendor.DOMImplementation('MSXML');

Wil hij het ook niet slikken.
MSXML is in elk geval bestaand (in het visual component properties window kan ik hem namelijk zo kiezen)... maar hoe is dit onder water geregeld ?

T is for TANK, and T is for TERROR ... and K is the K for KILLING in error.


  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Nibble schreef op 29 juli 2003 @ 21:46:
Tis ook altijd op het moment dat je na uuuuuren (wat zeg ik dagen) zoeken een post maakt en nog geen uur later de oplossing hebt gevonden.
Het moest dus wel een .create worden om mijn probleem op te lossen :)
Zeer vreemd.
Ik had het ff uitgetest:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
type
  TTest = record

    aantal : integer;
  end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    recordtest  : TTest;
  end;


code:
1
2
3
4
5
6
7
8
9
procedure TForm1.Button1Click(Sender: TObject);
begin
  recordtest.aantal := 5;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   MessageDlg ( IntToStr (recordtest.aantal), mtInformation, [mbOk], 0);
end;


En dat werkt gewoon; dus zonder 'Create' van de member variabele die een record is.
Maar desalniettemin wil het nog niet :P heb nog een vage xml error.
Omdat ik geen component gebruik maar direct "TXMLDocument" moet ik een domvendor opgeven.
Alleen hoe doe ik dat ? ik kan wel iets van "XMLFile.DOMVendor := " doen, maar als ik daarachter bijvoorbeeld "MSXML" met of zonder quotes gebruik pakt hij het niet.
Als ik los een domvendor maak met:

DOMVendor := TDOMVendor.Create;
DOMVendor.DOMImplementation('MSXML');

Wil hij het ook niet slikken.
MSXML is in elk geval bestaand (in het visual component properties window kan ik hem namelijk zo kiezen)... maar hoe is dit onder water geregeld ?
Kijk eens wat het type is dat die DOMVendor verwacht. Ben je zker dat het een string is? Is het geen enum?

https://fgheysels.github.io/

Pagina: 1