Einzelnen Beitrag anzeigen

sanobub

Registriert seit: 15. Jul 2004
9 Beiträge
 
#6

Re: Arbeiten mit mehreren Formularen

  Alt 23. Aug 2004, 19:17
Hallo,
nun gibts Quellcodefetzen zum besseren Verständnis! Also ich würde da nicht durchsteigen an eurer Stelle Aber wers sich antun möchte, kann das natürlich gerne!

Meine Frage nach wie vor:
Zitat:
Warum mir das so fraglich erscheint kommt daher, weil TSpielfeld von TPanel vererbt wird und das erzuegte Objekt auf Form2 liegt. Darf TSpielfeld dann selbst auf Unit2 und damit auch auf Form2 und dessen Komponeten zugreifen?
Delphi-Quellcode:
unit Unit1;

interface

uses Unit2, Unit3, Spielfeld, Spielregel;

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
  end;

var
  Form1: TForm1;
  Spielfeld1: TSpielfeld;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  Spielfeld1:= TSpielfeld.Einrichten(Self, Spielregel); //Spielregel ist globale Variable in Unit3
  Form2.Show;
end;

end.
Form2 als nacktes Formular!

Delphi-Quellcode:
unit Unit2;

interface

type
  TForm2 = class(TForm)
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

end.
Delphi-Quellcode:
unit Spielfeld;

interface

uses Unit2, Schiffe, Felder, Spielregel;

type
  TSpielfeld = class(TPanel)
  public
    constructor Einrichten(aMainFrame : TForm; aSpielregel : TSpielregel);
    procedure NewSchiff(aSchiff : TSchiff);
    procedure AutoSchiffCreate;
    procedure Show;
    function Angriff(ax_cor, ay_cor : word) : integer;
    function IsFeldInUse(aFeld : TFeld) : TSchiff;
    procedure OnFeldMouseDown(Sender: Tobject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure OnFeldMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure OnFeldEndDrag(Sender, Target: TObject; X, Y: Integer);
    procedure OnFeldDragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure OnFeldDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
  private
    Feld: array of array of TFeld;
    Schiff : array of TSchiff;
    Schiff_neu : TSchiff;
    Schiff_anz : word;
    Regel : TSpielregel;
  end;

implementation

constructor TSpielfeld.Einrichten(aMainFrame : TForm; aSpielregel : TSpielregel);
var a,b : integer;
begin
  inherited Create(Form2);
  Parent := Form2;
  Regel := aSpielregel;
  Regel.Show(Form2.StringGrid1);

  //Spiefeld-Aussehen
  Left := 50;
  Top := 50;
  Color := clwhite;
  BevelOuter := bvnone;
  BevelInner := bvnone;
  Width := Regel.Feldgroesse * Regel.felder_x;
  Height := Regel.Feldgroesse * Regel.Felder_y;

  // Aussehen Form2
  Form2.StringGrid1.Left := Self.Left + Self.Width + 20;
  Form2.Memo1.Width := Self.Left + Self.Width - Form2.Memo1.Left;
  Form2.edit5.Width := Self.Left + Self.Width - Form2.Edit5.Left;
  Form2.Memo1.Top := Self.top + Self.height + 20;
  Form2.Edit5.Top := Form2.Memo1.Top + Form2.Memo1.Height + 5;

  // ClientHeight/Width gibt die tatsächliche Nutzfläche eines Formulars an!
  Form2.ClientHeight := Form2.Edit5.Top + Form2.Edit5.Height;
  Form2.ClientWidth := 2 * Self.Left + Self.Width + Form2.StringGrid1.Width;

  SetLength(Feld,Regel.felder_x+1,Regel.felder_x+1);
  for a := 1 to Regel.felder_x do
    for b := 1 to Regel.felder_y do
      begin
        Feld[a,b] := TFeld.Erstellen(Self, Regel.Feldgroesse, a,b);
        Feld[a,b].OnMouseDown := OnFeldMouseDown;
        Feld[a,b].OnMouseMove := OnFeldMouseMove;
        Feld[a,b].OnDragOver := OnFeldDragOver;
        Feld[a,b].OnDragDrop := OnFeldDragDrop;
        Feld[a,b].OnEndDrag := OnFeldEndDrag;
      end;
end;
  Mit Zitat antworten Zitat