AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wie Array mit Pointern auf Klassen-Instanzen füllen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie Array mit Pointern auf Klassen-Instanzen füllen?

Ein Thema von Nonsense · begonnen am 25. Mär 2004 · letzter Beitrag vom 25. Mär 2004
Antwort Antwort
Seite 2 von 3     12 3      
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#11

Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?

  Alt 25. Mär 2004, 17:11
Delphi-Quellcode:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, PWLists, ComCtrls, CommCtrl;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    fEdits : array of array of TObject;
  public
    procedure CreateEdits(aiWidth, aiHeight : Integer);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  CreateEdits(10, 10);
end;

procedure TForm1.CreateEdits(aiWidth, aiHeight: Integer);
var i,
    j : Integer;
begin
  LockWindowUpdate(Handle); // hat nix mit Array zu tun

  SetLength(fEdits, aiHeight);
  for i := 0 to aiHeight - 1 do
      begin
        SetLength(fEdits[i], aiWidth);
        for j := 0 to aiWidth - 1 do
            begin
              fEdits[i, j] := TEdit.Create(Self);
              with fEdits[i, j] as TEdit do
                begin
                  Parent := Self;
                  SetBounds(34 * j + 16, 25 * i + 16, 30, 21);
                  Text := Format('%d, %d', [i, j]);
                end;
            end;
      end;

  LockWindowUpdate(0);
end;

end.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#12

Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?

  Alt 25. Mär 2004, 17:16
Hier mal meins.

Die Klassen:
Delphi-Quellcode:
  TWorld = class
  private
    FWorldHeight: Integer;
    FWorldWidth: Integer;
    FBufferArray: array of array of TCreature;
    FWorldArray: array of array of TCreature;
  public
    constructor Create(WorldHeight, WorldWidth: Integer);
    destructor Destroy; override;
  end;

  TCreature = class
  private
    FName: string;
  public
  end;

  TGround = class(TCreature)
  private
  public
  end;

  TSand = class(TGround)
  private
  public
    constructor Create;
    destructor Destroy;
  end;
Und hier die Klasse TSand:
Delphi-Quellcode:
constructor TSand.Create;
begin
  inherited Create;

  FName := 'Sand';
end;
Sowie die Klasse TWorld:
Delphi-Quellcode:
constructor TWorld.Create(WorldHeight, WorldWidth: Integer);
var
  i: Integer;
  j: Integer;
  ArrayLength: Integer;
begin
  FWorldHeight := WorldHeight;
  FWorldWidth := WorldWidth;

  ArrayLength := WorldHeight * WorldWidth;
  SetLength(FBufferArray, ArrayLength);
  SetLength(FWorldArray, ArrayLength);

  for i := 0 to FWorldHeight - 1 do
    for j := 0 to FWorldWidth - 1 do
    begin
      FBufferArray[i][j] := TGround.Create;
    end;
end;
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#13

Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?

  Alt 25. Mär 2004, 17:26
Und hier meine korrekturen

Delphi-Quellcode:
constructor TWorld.Create(WorldHeight, WorldWidth: Integer);
var
  i: Integer;
  j: Integer;
  ArrayLength: Integer;
begin
  FWorldHeight := WorldHeight;
  FWorldWidth := WorldWidth;

  SetLength(FBufferArray, WorldHeight, WorldWidth);
  SetLength(FWorldArray, WorldHeight, WorldWidth);

  for i := 0 to FWorldHeight - 1 do
    for j := 0 to FWorldWidth - 1 do
    begin
      FBufferArray[i][j] := TGround.Create;
    end;
end;
Versuch es mal so
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#14

Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?

  Alt 25. Mär 2004, 17:39
Zitat von neolithos:
Und hier meine korrekturen
[ ... ]
Versuch es mal so
Neeeein! Verdammte Sche*ße nochmal. Wieso bin ich nicht darauf gekommen *handandenkopfklatsch*
Ich danke dir!
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#15

Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?

  Alt 25. Mär 2004, 18:17
Letzt Frage (wirklich! ):

Wie kann ich jetzt auf Variablen im Array zugreifen, ich meine:
Delphi-Quellcode:
TCreature = class
private
  FName: string;
public
end;

constructor TSand.Create;
begin
  inherited Create;

  FName := 'Sand';
end;

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

  for i := 0 to FBlockNumX - 1 do
    for j := 0 to FBlockNumY - 1 do
    begin
      FBufferArray[i][j] := TSand.Create;
      FWorldArray[i][j] := TSand.Create;
    end;

// ---------------------------------
// Undeclared indetifier!
  if FWorldArray[i][j].FName := 'Sandthen ...;
Wo liegt der Fehler?
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#16

Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?

  Alt 25. Mär 2004, 18:29
Du musst noch das Private Element FName veröffentlichen.
Delphi-Quellcode:
TCreature = class
private
  FName: string;
public
  property Name : String read fName;
end;
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#17

Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?

  Alt 25. Mär 2004, 18:34
Zitat von neolithos:
Du musst noch das Private Element FName veröffentlichen.
Delphi-Quellcode:
TCreature = class
private
  FName: string;
public
  property Name : String read fName;
end;
Nääd, meine Fresse, bin ich heute schon wieder verpeilt...Ja, hat sich erledigt, du hast Recht...Wo bin ich bloß mit meinen Gedanken?
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#18

Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?

  Alt 25. Mär 2004, 18:43
Klappt soweit, aber ich würde gerne eine Funktion schreiben, die den Namen zurückgibt. Dazu ein Frage: Wie kann ich die Instanz bei FWorldArray[x][y] per als Zeiger übergeben?
Habe sowas unter Object Pascal noch nie gemacht.

Muss ich da einen Pointer übergeben oder einen Pointer auf TCreature? (d.h. übergebe ich "PCreature: Pointer" oder "PCreature: ^TCreature"?).
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#19

Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?

  Alt 25. Mär 2004, 18:46
Delphi-Quellcode:
function GetName(fCreatur : TCreatur) : String;
begin
  Result := 'Name: ' + fCreatur.Name;
end;
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#20

Re: Wie Array mit Pointern auf Klassen-Instanzen füllen?

  Alt 25. Mär 2004, 18:52
Ich dachte mir das so:
Delphi-Quellcode:
function TCreature.GetName(PCreatur : TCreatur): string;
begin
  Result := PCreatur.FName;
end;

[...]

if MyCreature.GetName(^FWorldArray[i][j]) = 'Sandthen ...
Naja, vielleicht hänge ich bei dieser Geschichte auch zu sehr an C++ ...

Edit: Wieso kann ich keine Stile im Delphi-Code nutzen!?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz