AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Problem mit mehreren Typen in unterschiedlichen Units!
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit mehreren Typen in unterschiedlichen Units!

Ein Thema von wuchzael · begonnen am 8. Okt 2006 · letzter Beitrag vom 8. Okt 2006
Antwort Antwort
wuchzael

Registriert seit: 14. Sep 2005
Ort: Hessen
5 Beiträge
 
#1

Problem mit mehreren Typen in unterschiedlichen Units!

  Alt 8. Okt 2006, 16:59
Hi!


Ich hab folgendes Problem. Ich erstelle gerade ein KLEINES Spielchen, mit mehreren Units, auf welchen jeweils eine Klasse und deren Routinen drauf sind.

Ausgangspunkt:
http://img145.imageshack.us/img145/9...gspunktrf5.jpg


Delphi-Quellcode:
unit U_Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Buttons,U_Hero, jpeg, ComCtrls, Menus, U_Items;

type
  TForm1 = class(TForm)
    P_Intro: TPanel;
    L_INtro: TLabel;
    [...]
    procedure FormCreate(Sender: TObject);
    [...]
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Hero : THero;
  Trank : TItems;

implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
begin
 Hero := THero.Create;
 Trank := TItems.Create;
 Hero.HPSpeichern(50);
 Hero.MaxHPSpeichern(200);
 Trank.PunkteSpeichern(50);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Trank.ItemUse;
end;

end.

Delphi-Quellcode:
unit U_Hero;

interface

uses Messages, Dialogs, Sysutils;

type
 THero = class (TObject)
  private
   Lebensenergie : Integer;
   MaxHP : Integer;
  public
   procedure HPSpeichern(Wert : Integer);
   procedure MaxHPSpeichern(Wert : Integer);
   function HPAuslesen : Integer;
 end;


implementation


procedure THero.HPSpeichern(Wert : Integer);
begin
 Lebensenergie := Wert;
end;

procedure THero.MaxHPSpeichern(Wert : Integer);
begin
 MaxHP := Wert;
end;

function THero.HPAuslesen : Integer;
begin
 Result := Lebensenergie;
end;


end.

Delphi-Quellcode:
unit U_Items;

interface


uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, Menus, ExtCtrls, StdCtrls, U_Hero;


type TItems = class (TObject)
     private
      HPReg : Integer;
     public
      procedure PunkteSpeichern(Wert : Integer);
      procedure ItemUse;
end;


var Hero : THero;

implementation

procedure TItems.PunkteSpeichern(Wert : Integer);
begin
 HPReg := Wert;
end;



procedure TItems.ItemUse;
begin
 Hero.HPSpeichern((Hero.HPAusgeben+HPReg));
end;


end.



Also, ich will, dass ich vom Formular aus eine Routine aus U_Item aufrufen kann und diese Routine einen Wert in U_Hero ändert. Man sieht schon, dass das nicht funktionieren kann... ich habe aus Verzweiflung die Variable "Hero : THero" in der U_Items Unit nochmal deklariert, weil "unbekannter Bezeichner (Hero)" als Fehlermeldung kam. Jetzt kennt er zwar "Hero", aber "Hero" wird hier nicht created, also gibts nen Speicherfehler. Und WENN ich "Hero" hier create, dann ist das ein eigener "Hero", der mit dem auf dem Formuler createden nichts zu tun hat. Ich hab einfach vergessen, wie ich das alles verknüpfen muss, dass das so geht, wie ich das möchte


Hoffentlich könnt ihr mir schnell und einfach helfen, bin noch nicht so weit





Grüße!
Alexander
Intel Core 2 Duo E6600 + 2 x 1024 MB DDR2-800 Corsair XMs²
GigaByte 965P-DS4 + ATi Radeon X1950 XTX + 4 x 250GB S-ATA im RAID 10
  Mit Zitat antworten Zitat
Hudel1965

Registriert seit: 4. Nov 2005
Ort: Köln
32 Beiträge
 
Delphi XE3 Professional
 
#2

Re: Problem mit mehreren Typen in unterschiedlichen Units!

  Alt 8. Okt 2006, 17:07
Hi

Übergib doch einfach den Hero als Parameter an ItemUse.

Gruß

Hudel
  Mit Zitat antworten Zitat
wuchzael

Registriert seit: 14. Sep 2005
Ort: Hessen
5 Beiträge
 
#3

Re: Problem mit mehreren Typen in unterschiedlichen Units!

  Alt 8. Okt 2006, 17:14
Das versteh ich jetzt nicht genau... wie gesagt ich bin noch nicht so weit. Ich will das ja so machen, weil der Held im Spiel viel mehr als nur die LebensEnergie hat... und mit den "Monstern" ist es genau so... hab den QT extrem beschnitten, damit es nicht so unübersichtlich ist


Grüße!
Alexander
Intel Core 2 Duo E6600 + 2 x 1024 MB DDR2-800 Corsair XMs²
GigaByte 965P-DS4 + ATi Radeon X1950 XTX + 4 x 250GB S-ATA im RAID 10
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Problem mit mehreren Typen in unterschiedlichen Units!

  Alt 8. Okt 2006, 17:16
Herzlich willkommen in der Delphi-PRAXiS, Alexander.

Eine gute Vorgehensweise ist folgende:

Delphi-Quellcode:
unit U_Main;
interface
// ...
type
  TForm1 = class(TForm)
    P_Intro: TPanel;
    L_INtro: TLabel;
    // ...
    procedure FormCreate(Sender: TObject);
    // ...
  private
    FHero: THero;
  public
    property Hero: THero read FHero;
  end;
// ...
implementation
// ...
procedure TForm1.FormCreate(Sender: TObject);
begin
  FHero := THero.Create;
  // ...
end;
So kannst du von überall her lesend auf Form1.Hero zugreifen, sobald du in den anderen Units in der implementation section die Uses-Klausel um die Unit U_Main erweitert hast.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
wuchzael

Registriert seit: 14. Sep 2005
Ort: Hessen
5 Beiträge
 
#5

Re: Problem mit mehreren Typen in unterschiedlichen Units!

  Alt 8. Okt 2006, 17:18
Damit kann ich schonmal was anfangen, super

Aber wenn ich jetzt in den anderen Units in die Uses "U_Main" schreibe, sagt er mir, dass sich das überkreuzt





Grüße!





Edit: Ach sorry, "implementation" überlesen
Jetzt spuckt er folgende Fehler aus:

Feld oder Methodenbezeichner erwartet
Einer "nur-lesen" Eigenschaft kann kein wert zugefügt werden
Lesen einer "nur-schreiben" Eigenschaft nicht möglich





Grüße!
Alexander
Intel Core 2 Duo E6600 + 2 x 1024 MB DDR2-800 Corsair XMs²
GigaByte 965P-DS4 + ATi Radeon X1950 XTX + 4 x 250GB S-ATA im RAID 10
  Mit Zitat antworten Zitat
wuchzael

Registriert seit: 14. Sep 2005
Ort: Hessen
5 Beiträge
 
#6

Re: Problem mit mehreren Typen in unterschiedlichen Units!

  Alt 8. Okt 2006, 17:30
Oh lol!!!

Allein, wenn ich "uses U_Main" in den implementation Teil schreibe funzt alles



DANKE!!!!
Alexander
Intel Core 2 Duo E6600 + 2 x 1024 MB DDR2-800 Corsair XMs²
GigaByte 965P-DS4 + ATi Radeon X1950 XTX + 4 x 250GB S-ATA im RAID 10
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Problem mit mehreren Typen in unterschiedlichen Units!

  Alt 8. Okt 2006, 17:37
Zitat von wuchzael:
Oh lol!!!

Allein, wenn ich "uses U_Main" in den implementation Teil schreibe funzt alles
Gut, dann kann ich endlich auch was hier schreiben. *g*
Du musst immer im Hinterkopf bewahren, dass Delphi einen single pass compiler benutzt.
Er wird erst alle units durchlaufen, die in der interface uses clause stehen (und auch in der Reihenfolge). Danach die in der implementation uses clause.
Auf die Art können sich 2 Units gegenseitig "sehen", wenn auch mit der Einschränkung, dass mindestens eine von beiden es nur in der implementation section kann.

Absolut abstrakter Bleistift, dessen sinnloser Inhalt nicht zu Hause nachgemacht werden sollte:
Delphi-Quellcode:
unit Unit1;
interface
type
  TClass1 = class
  public
    procedure DoSomething;
  end;
implementation
uses
  Unit2;
procedure TClass1.DoSomething;
begin
  if self is TClass2 then
    blabla
  else
    blabla;
end;
end.
Delphi-Quellcode:
unit Unit2;
interface
uses
  Unit1;
type
  TClass2 = class(TClass1)
  end;
implementation
end.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
wuchzael

Registriert seit: 14. Sep 2005
Ort: Hessen
5 Beiträge
 
#8

Re: Problem mit mehreren Typen in unterschiedlichen Units!

  Alt 8. Okt 2006, 18:14
Muhaha das ist so geil...

Meine Monster wählen sich jetzt selbstständig ihre Zauber und Angriffe aus (halt je nach Monster) und zum Items benutzen brauch ich jetzt z.B. nurnoch sagen Trank.ItemUse und so


1000 Dank!




Grüße!
Alexander
Intel Core 2 Duo E6600 + 2 x 1024 MB DDR2-800 Corsair XMs²
GigaByte 965P-DS4 + ATi Radeon X1950 XTX + 4 x 250GB S-ATA im RAID 10
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:24 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