Registriert seit: 12. Dez 2004
7 Beiträge
|
Re: Problem mit Klasse und EInvalidPointer
12. Dez 2004, 16: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') <> ' NULL' do
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.
|
|
Zitat
|