| Autor |
Beitrag |
GR-Thunderstorm
      
Beiträge: 206
|
Verfasst: Mo 28.01.08 21:36
Ich spiele zur Zeit viel Second Life und scripte dort auch hin und wieder.
In der dortigen Programmiersprache gibt es einen "Vector" Variablentyp, den man in der Schreibweise "V = <1,2,3>" angeben kann. Ich finde das ziemlich praktisch, da man auch über V.x / V.y / V.z auf die einzelnen Zahlenwerte zugreifen kann. Ich möchte diesen Variablentypen in ein Delphiprogramm einbauen. Kann mir einer erklären, wie ich sowas mache?
Klar könnte man ein Array nehmen, aber das wäre irgendwie nicht das gleiche...
Kann ich da evtl mit ner Klasse rangehen?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| type Vector = Class
private
public
end; |
|
|
jakobwenzel
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: Mo 28.01.08 21:46
Genau diese Schreibweise geht in Delphi leider nicht.
Und hier wäre ein Record besser, da eine Klasse hier oversized ist (oder willst du später mal neue Vektorklassen ableiten?)
Die Funktion zum erstellen der Vektoren sähe dann ungefähr so aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| type TVektor = record X,Y,Z: IrgendeinZahlentyp end;
function MakeVector(X,Y,Z:IrgendeinZahlentyp):TVector |
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
GR-Thunderstorm 
      
Beiträge: 206
|
Verfasst: Mo 28.01.08 21:51
Hmm stimmt, darauf hätte ich auch kommen können. ^^
Danke! ^^
Aber direkt Werte eingeben kann ich so nicht. :/ Muss also immer per procedure oder jede Koordinate einzeln...
Gibts da evtl ne andere Möglichkeit?
Edit: Kann man evtl irgendwie etwas "triggern", dass wenn ich k.value:=Blubb (string) mache, dass dann eine Function ausgeführt wird?
|
|
jakobwenzel
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: Mo 28.01.08 21:59
Außer class operators (Ab delphi 2k6, nur für records) hab ich nur noch was ganz ekliges:
Hierfür ein eigenes PlugIn schreiben, was die Syntax genau nachbaut.
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
GR-Thunderstorm 
      
Beiträge: 206
|
Verfasst: Mo 28.01.08 22:02
Hmm, dann steh ich aber noch vor dem großen Problem der Mathematik...
Zwei Rekords addieren ginge auch nicht ohne Funktion....
Ich glaub ich lass des denn einfach. Hatte gehofft man kann nen komplett eigenen Typen einführen ohne mit anderen Sachen rumzumurksen. 
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 28.01.08 22:03
Moin!
Lassen wir doch mal die Kirche im Dorf.
Die Klasse ist doch schon der "richtige" Ansatz gewesen, würde ich sagen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| type TVector = class(TObject) private FX, FY, FZ: Integer; public property X: Integer read FX write FX; property Y: Integer read FY write FY; property Z: Integer read FZ write FZ; property ValueStr: String read GetValueStr write SetValueStr; | Mal so als Idee, lässt sich sicher auch noch anders abbilden.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mo 28.01.08 22:04
GR-Thunderstorm hat folgendes geschrieben: | | Edit: Kann man evtl irgendwie etwas "triggern", dass wenn ich k.value:=Blubb (string) mache, dass dann eine Function ausgeführt wird? |
Eine Klasse erzeugen, und dann den Write-Property verwenden?
Edit: Zu langsam..
|
|
GR-Thunderstorm 
      
Beiträge: 206
|
Verfasst: Mo 28.01.08 22:49
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 28.01.08 23:27
Narses hat folgendes geschrieben: | Die Klasse ist doch schon der "richtige" Ansatz gewesen, würde ich sagen:  |
Vektoren würde ich nicht als Referenzdatentypen implementieren, das gibt nur dumme Fehler, wenn man sie dann so benutzt, wie man es gewohnt ist. Würde daher für ein Record plädieren.
GR-Thunderstorm hat folgendes geschrieben: | | Aber jetzt stünde ich doch vorm selben Problem wie beim Record, oder? Wenn ich zwei Vektoren addieren möchte, geht das nur über Funktionen die das Property für Property machen und nicht einfach nur Vek3:=Vek1+Vek2; |
Du musst den "+"-Operator noch definieren, was in Delphi inzwischen geht. Man nennt das dann "den Operator überladen". (Nötig ist mindestens Turbo Delphi 2006)
Hier mal eine Überladung für das Addieren.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| type TVector = record private FX, FY, FZ: Integer; public property X: Integer read FX write FX; property Y: Integer read FY write FY; property Z: Integer read FZ write FZ;
class operator Add(v1 : TVector; v2 : TVector) : TVector; end;
class operator TVector.Add(v1, v2: TVector): TVector; begin result.X := v1.X + v2.X; result.Y := v1.Y + v2.Y; result.Z := v1.Z + v2.Z; end; |
Dann kannst Du den "+"-Operator ganz normal für Deinen Record benutzen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| var v1, v2, r : TVector; begin v1.X := 5; v2.X := 10;
r := v1 + v2; end; |
Mehr findest Du in der Delphi-Hilfe und zwar in der Sprachreferenz zu Delphi. Wichtig: In Win32 geht das Überladen von Operatoren nur bei Records (evtl. ist's bei 2007 anders, weiß ich nicht) und mindestens Turbo Delphi 2006.
Grüße
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
GR-Thunderstorm 
      
Beiträge: 206
|
Verfasst: Di 29.01.08 02:43
Wow cool, das wär ja dann quasi was ich brauche.
Ist dieses "Turbo Delphi" irgendne spezielle erweiterte Version? Ich hab Delphi7 Enterprise, das sollte doch gehen, oder?
EDIT: Ich versuch das grad anzuwenden aber der meckert bei den Propertys..
"'=' Expected but identifier 'Property' found."
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Di 29.01.08 06:40
Wie oben schon geschrieben wurde, werden Klassenoperatoren nur in .Net oder ab D10 auch unter Win32 (für Records) unterstützt.
_________________ Markus Kinzler.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Di 29.01.08 09:18
Wie Du an Turbo-Delphi ran kommst, habe ich hier mal beschrieben: www.christian-stelzm...oaded/#_Toc180058857
Kann sein, dass Properties in Records auch erst ab Turbo Delphi oder so funktionieren 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Di 29.01.08 09:39
in Turbo-Delphi auf jeden Fall!
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
GR-Thunderstorm 
      
Beiträge: 206
|
Verfasst: Di 29.01.08 11:57
K, ich lad dann grade des Turbo Delphi runter...
Aber eine Sache:
| Zitat: | | Im Unterschied zu den „großen“ Delphis enthält diese Version nur eine Sprache und kann nicht mit den Produkten von Drittanbietern erweitert werden. |
Also kann ich keine Objekte zur Oberfläche hinzufügen oder wie ist das gemeint?
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Di 29.01.08 12:12
neue frage -> neues Thema!
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Di 29.01.08 13:44
Kroko hat folgendes geschrieben: | | neue frage -> neues Thema! |
So ist es! Und hiermit auch offiziell 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
GR-Thunderstorm 
      
Beiträge: 206
|
Verfasst: Di 29.01.08 14:09
Christian S. hat folgendes geschrieben: | Kroko hat folgendes geschrieben: | | neue frage -> neues Thema! | So ist es! Und hiermit auch offiziell  |
Die eine kurze Frage hätte man zwar sicher auch noch mit nem Zweizeiler beantworten können aber was solls.. O_o
Des lässt sich nicht installieren weil NET 1.1 SP1 fehlt, welches sich ebenso nicht installen lässt weil NET 1.1 fehlt, da ich bereits NET 3.0 hab....
Danke trotzdem soweit.
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Di 29.01.08 14:11
Du musst trotzdem Net 1.1 installieren!
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Di 29.01.08 14:18
GR-Thunderstorm hat folgendes geschrieben: | | Des lässt sich nicht installieren weil NET 1.1 SP1 fehlt, welches sich ebenso nicht installen lässt weil NET 1.1 fehlt, da ich bereits NET 3.0 hab.... |
Auch die Installation von TD hat nichts in einem Thread zu Vektoren zu suchen. Erstelle dafür bitte einen Thread in der Sparte "Programmierwerkzeuge".
Bevor Du also immer weiter neue Fragen hier stellst, mache ich hier zu. Solltest Du noch Fragen zum eigentlichen Thema haben, melde Dich über den "kontaktiere bitte das Team"-Link unter diesem Posting.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|