Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Klassen Problem: er finde die funktion nicht.[Gelöst]
mimi - Mi 09.07.03 14:27
Titel: Klassen Problem: er finde die funktion nicht.[Gelöst]
Hallo,
ersteinmal folgenden code habe ich:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| unit thredUnit;
interface
uses Classes,Dialogs;
type Test1 = class(TThread) private protected public procedure Execute; override; end;
implementation
uses soundsystem;
procedure Test1.Execute; var t:Integer; begin t:=0; while (Not Terminated) and (t=0) do
end;
end. type TSound = class private GoFlag:Integer; test:Test1; protected
public PlayListe: array of TPlayListe; Random_Music: array of TPlayListe; constructor create(pSoundFiles,SoundDir,DefaultExt:String;flag:Integer); procedure NewMusik; procedure NewMusik2; procedure LoadMusikFile(Index:Integer;RM:Boolean); procedure AddPlayListe(FileName:String); procedure PlayMusikFile(Index:Integer); end; |
da wo das * soll die procdedure NewMusik aufgerufen werden, aber wie mache ich das ?
er finded als funktion nur die crate eingenschaft.
hat da jemmand eine idee ?
AndyB - Mi 09.07.03 14:38
Titel: Re: Klassen Problem: er finde die funktion nicht.
| mimi hat folgendes geschrieben: |
| er finded als funktion nur die crate eingenschaft. |
Du befindest dich da ja auch im Sichtbarkeitsbereich von Test1 (wo ist da eigentlich das führende "T", oder heißt die Klasse etwa
est1 ? :wink: ) und da gibt es nun mal keine NewMusik Methode. Diese gehört zum Sichtbarkeitsbereich von TSound. Du musst also in diesen Sichtbarkeitsbereich eintreten und das kannst du über die globale Variable
Sound.
mimi - Mi 09.07.03 14:44
wie meinst du das ?
ich wollte keine variable definieren in der 1. klasse für sound.
könntes du mal ein beispiel machen wie du das meinst?
naja das t habe ich einfach weggelassen, weil es ja einfach nur ein Test da stellen soll.
Edit:
fehler gemacht beim posten: die gobale varibal sound gibt es garnicht. das war nur ein test aber so will ich das nicht machen weil es dann nicht mehr so geht wie ich es haben will.
maximus - Mi 09.07.03 15:07
Hi mimi,
hast du das so in der unit stehen?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| ... end;
end. type TSound = class private GoFlag:Integer;
... |
Wenn ja, dann sollte dir klar sein, dass Quellcode nach 'end.' komplett ignoriert wird :wink:
Ansonsten musst du schon irgendwo einer referenz auf dein sound-obj haben, sonst is asche.
mimi - Mi 09.07.03 15:13
die klassen habe ich in zwei units aufgeteielt.
das geht leider nicht was du vorschlägt, da ich dann eine neue instanz der sound klasse erstellen müsste, aber das bringt leider nichts, weil ich die "Alten" werte haben wollte. gibt es da eine lösung für ?
AndyB - Mi 09.07.03 15:19
Wie würdest du denn auf NewMusik zugreifen, wenn du nicht in einem TThread wärst?
| Zitat: |
| da ich dann eine neue instanz der sound klasse erstellen müsste |
Also hast du schon irgendwo eine Instanz auf die du zugreifen kannst. Dann nimm doch diese.
mimi - Mi 09.07.03 16:59
problem: diese ist in einer anderen klasse definiert, und deshalb kann ich da auch nicht draufzugreifen. Gibt es noch weitere lösungen ?
AndyB - Mi 09.07.03 17:12
Du könntest dem Konstruktor des Threads die Instanz übergeben.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| TTest1 = class(TThread) private FSound: TSound; protected procedure Execute; override; public constructor Create(ACreateSuspended: Boolean; Sound: TSound); end;
constructor TTest1.Create(ACreateSuspended: Boolean; Sound: TSound); begin FSound := Sound; inherited Create(ACreateSuspended); end; |
Execute ist übrigens als protected deklariert und sollte da auch bleiben.
mimi - Mi 09.07.03 19:36
ja stimmt hatte ich geänder aus einem andern grund,
kann man den consstructor eifnach so überschreiben ?
werde ich gleich mal testen.
AndyB - Mi 09.07.03 19:58
Da es kein virtueller Konstruktor wie bei TComponent ist: Ja.
mimi - Mi 09.07.03 20:04
danke, es hat funktiniert, aber leider habe ich noch kleiner fehler drin die ich aber selbst behben muss.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!