Einzelnen Beitrag anzeigen

apoc

Registriert seit: 12. Dez 2004
7 Beiträge
 
#6

Re: Problem mit Klasse und EInvalidPointer

  Alt 12. Dez 2004, 15:52
ok also hier die Klasse (auszugsweise)

Delphi-Quellcode:
unit Bricks;

interface

uses
  SysUtils,
  IniFiles;

type
brick = record
   x, y : Integer;         // x, y Position des Bricks (auf dem Bildschirm)
  world_y : Integer;       // die y Welt koordinate
  w, h : Integer;         // die Breite und Höhe, Breite muss durch 16 teilbar sein
 (...)
end;

{* Diese Klasse ist für das Anlegen, Zeichnen und Bewegen der
* Bricks zuständig.
*}

TBricks = class

   private
      {* zugriff auf die Brick INI Datei
       *}

    iniFile : TIniFile;

  public

     {* In diesem dynamischen Array von Bricks sind alle Bricks gespeichert
       *}

      bricks : Array of brick;

    {* läd die INI Datei im Filename, legt entsprächend viele bricks an und
    * speichert die Daten in dem bricks Array
       *}

     procedure CreateFromINI(Filename : String);


end;

implementation

{* läd die INI Datei im Filename, legt entsprächend viele bricks an und
* speichert die Daten in dem bricks Array
*}

procedure TBricks.CreateFromINI(Filename : String);
var i,i2 : Integer;
    i2str : String;
begin
  iniFile := TIniFile.Create(ExtractFilePath(ParamStr(0))+Filename);

  Write('Suche Bricks in '+Filename+'...');

  // suche nach Bricks in Datei und speichere die Anzahl in i
  i := 1;
  while iniFile.ReadString('brick'+IntToStr(i), 'x', 'NULL') <> 'NULLdo
    Inc(i);
  Dec(i);

  Writeln(IntToStr(i)+' Brick gefunden');

  // um Speicherleaks zu vermeiden wird setLength nur einmal aufgerufen
  setLength(bricks,i);

  Write('Speichere Bricks in dynamisches Array...');

  for i2 := 1 to i do
  begin
    i2str := IntToStr(i2);

    bricks[i2].x           := StrToInt(iniFile.ReadString('brick'+i2str, 'x', '0'));
    bricks[i2].world_y := StrToInt(iniFile.ReadString('brick'+i2str, 'world_y', '0'));
    bricks[i2].w           := StrToInt(iniFile.ReadString('brick'+i2str, 'w', '0'));
    bricks[i2].h           := StrToInt(iniFile.ReadString('brick'+i2str, 'h', '0'));
 (...)
  end;

  Writeln('done');

  iniFile.Free;
end;


end.
so und hier die unit die die klasse aufruft

Delphi-Quellcode:
program main;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Bricks in 'Bricks.pas';

var
  OBricks : TBricks;

begin
  { TODO -oUser -cConsole Main : Hier Code einfügen }

  OBricks:=TBricks.Create;

  OBricks.CreateFromINI('bricks.ini');

  OBricks.Free;
end.
  Mit Zitat antworten Zitat