Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Überkreuzender Bezug 2er Units :( (https://www.delphipraxis.net/113411-ueberkreuzender-bezug-2er-units.html)

angos 7. Mai 2008 15:49

Re: Überkreuzender Bezug 2er Units :(
 
Hi, ich glaube du machst einen elementaren Fehler mit Objekten, auch wenn dein akutes Problem jetzt gelöst scheint.

Zitat:

Zitat von Spiderpig_GER_15
[...]
ABER, ich kann nur von meiner Main Unit auf meinen Mario zugreifen(Wenn ich einen Punkt mache erscheint dieses Menü) und wenn ich In Meiner TMyMario Unit "MyMario.*Punkt*" eingebe, kommt Fehler in Quelltext.
[...]

Aus welchem Grunde solltest du in der TMyMario - Unit auf (das interpretiere ich jetzt einfach mal so) das Objekt MyMario welches du in der Main erstellst, zugreifen?

Du solltest doch alles was du mit der Klasse machen willst innerhalb der Klasse zur Verfügung haben/durch Funktionen an die Klasse übergeben.

um mkinzler zu zitieren
Zitat:

prüfe mal dein Objektdesign!
(Ich hoffe du sprichst grad auch von OOP ;) )

[edit]fehlerteufel[/edit]

Spiderpig_GER_15 7. Mai 2008 16:12

Re: Überkreuzender Bezug 2er Units :(
 
also das ist soweit correct interpretiert, aber ich bin mir keiner Schuld bewusst,
denn ich habe meine Methoden(MyMario.GoRight) von MyMario in der Unit TMyMario.
Und dafür muss ich wohl oder übel folgendes eingeben:

Delphi-Quellcode:

//In der Unit TMyMario

procedure TMario.GoRight;
begin
MyMario.X:=MyMario.X+5;
end;
und so wie es im Moment ist funktioniert es!

und was soll denn da falsch sein?

MfG Spiderpig

Assertor 7. Mai 2008 16:15

Re: Überkreuzender Bezug 2er Units :(
 
Zitat:

Zitat von Spiderpig_GER_15
Delphi-Quellcode:
//In der Unit TMyMario
procedure TMario.GoRight;
begin
MyMario.X:=MyMario.X+5; // hier ist was FALSCH!
end;

Also wenn Du das so machst, wunder dich später mal nicht über Exceptions!

Da gehört folgendes hin:
Delphi-Quellcode:
//In der Unit TMyMario
procedure TMario.GoRight;
begin
 X := X + 5; // hier ist was richtig!
end;
Gruß Assertor

Edit: Und überleg mal genau, warum. Was ist eine Klasse?

Spiderpig_GER_15 7. Mai 2008 16:37

Re: Überkreuzender Bezug 2er Units :(
 
Zitat:

Zitat von Assertor
Edit: Und überleg mal genau, warum. Was ist eine Klasse?

ähm was denn? Warum ist das denn jetzt richtiger?, was sind exceptions und warum funktioniert es dann trotzdem?

MFG

Spiderpig

Habe das jetzt geändert, und die Unit Main aus Unit TMyMario wieder ausgebunden(Das sollte ich ja tun?!), die Stelle mit dem X funktioniert, jetzt kann ich aber nicht mehr auf MyImageList zugreifen, und das geht nur dann wieder, wenn ich die Unit wieder einbinde
Also muss ich die Unit Main doch drinnen lassen?!

Assertor 8. Mai 2008 10:30

Re: Überkreuzender Bezug 2er Units :(
 
Zitat:

Zitat von Spiderpig_GER_15
Warum ist das denn jetzt richtiger?

Weil Du dich innerhalb einer Klasse, auf eine einzelne Klasseninstanz beziehst. Das kann nur Probleme machen. Bei Dir geht es diesmal gut, weil es die Instanz gibt. Wenn diese Instanz mal anders heißt, wirft der Compiler eine Fehlermeldung, wenn Sie aber da ist, jedoch noch nicht Erzeugt, gibt es eine Exception.

Kurze Analogie:
- Klasse: Grüne Autos
- Klasseninstanz: Ein (bestimmtes) grünes Auto

Zitat:

Zitat von Spiderpig_GER_15
was sind exceptions und warum funktioniert es dann trotzdem?

Exceptions sing grob vereinfacht Fehlermeldungen:
http://www.delphi-treff.de/tutorials...shkurs/page/9/

Zitat:

Zitat von Spiderpig_GER_15
...jetzt kann ich aber nicht mehr auf MyImageList zugreifen, und das geht nur dann wieder, wenn ich die Unit wieder einbinde. Also muss ich die Unit Main doch drinnen lassen?!

Ich habe keine Anhang, wo Deine "MyImageList" deklariert ist *Glaskugel such*

Ansonsten mal grob die Empfehlung für ein günstiges Anfängerbuch:
Amazon Delphi Einsteiger Buch

Gruß Assertor

angos 8. Mai 2008 10:38

Re: Überkreuzender Bezug 2er Units :(
 
Zitat:

Zitat von Spiderpig_GER_15
Zitat:

Zitat von Assertor
Edit: Und überleg mal genau, warum. Was ist eine Klasse?

ähm was denn? Warum ist das denn jetzt richtiger?, was sind exceptions und warum funktioniert es dann trotzdem?

Geh mal davon aus du willst 2 TMyMario-Objekte erzeugen, dann haste im Main MyMario und MyMario2. Wenn du das nach der korrekten Methode wie durch Assertor beschrieben machst, kannst du wunderbar mit beiden MyMarios arbeiten. Was würde denn bei deinem Source passieren, wenn nur MyMario2 schon erzeugt ist, und du dann auf deine GoRight Funktion zugreifst. Genau!: Eine Exception (Ausnahmefehler) würde auftreten.

Befasse dich nochmal mit den Grundlagen der objektorientierten Programmierung. Dann wird dir einiges klarer sein.

Zitat:


MFG

Spiderpig

Habe das jetzt geändert, und die Unit Main aus Unit TMyMario wieder ausgebunden(Das sollte ich ja tun?!), die Stelle mit dem X funktioniert, jetzt kann ich aber nicht mehr auf MyImageList zugreifen, und das geht nur dann wieder, wenn ich die Unit wieder einbinde
Also muss ich die Unit Main doch drinnen lassen?!
Wenn du innerhalb der Klasse ein Imagelist benötigst, warum übergibst du die imagelist nicht an die Klasse?

Grobes BeispieL:
Delphi-Quellcode:
  TMyMario = class(TObject);
private
FMyImgList: TImageList;
public
property MyImgList: TImageList read FMyImgList write FMyImgList;
[...]
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:43 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz