![]() |
Objekte zu einer Stringliste bearbeiten
Hallo, ich steh wieder einmal völlig auf dem Schlauch.
Ich habe eine Stringliste Paare und zu dieser Stringliste Objekte vom Typ Tpaar
Delphi-Quellcode:
Bis daher ist alles klar. Jetzt würde ich gerne auf die Daten eines solchen Paares zugreifen:
type
TPaar=class(TObject) pEndzeit: Tdate; pLevel: byte end; var Paare: TStringlist; Paar: Tpaar; Symbol: string; pi: integer; ... begin ... Paar:=Tpaar.Create; pi:=Paare.AddObject(symbol,Paar) ...
Delphi-Quellcode:
Da meckert der Compiler: Operator ist auf diesen Operandentyp nicht anwendbar. Wie kann ich sonst auf meine Objekte vom typ TPaar zugreifen?
with Paare.Objects[pi] as Tpaar do
....
Delphi-Quellcode:
geht genausowenig, das hatte ich ursprünglich geschrieben.
with Tpaar(Paare.Objects[pi]) do
|
AW: Objekte zu einer Stringliste bearbeiten
Vielleicht so...
Delphi-Quellcode:
Tipp: WITH braucht man nie
var ItemObject:TObject;
Paar:TPaar; begin ItemObject:=Paare.Objects[pi]; if ItemObject is TPaar then begin Paar:=ItemObject; Paar.pEndzeit:=Now; end; end; |
AW: Objekte zu einer Stringliste bearbeiten
Delphi-Quellcode:
Danke, so geht es tatsächlich (und da kann man sich das with dann natürlich auch sparen). Ich bin gar nicht auf den Gedanken gekommen, dass das Problem etwas mit der with Anweisung zu tun haben könnte. Warum der Compiler im with kein as und keinen Typecast zulässt, verstehe ich eigentich nicht (und möchte hier auch keine Grundsatzdiskussion darüber führen, ob man with verwenden darf oder soll oder warum nicht - ich finde, es ist in manchen Fällen ein sehr praktisches Sprachelement, speziell wenn der Record oder hier die Klasseninstanz Element eines Arrays ist oder sonstwie kompliziert adressiert wird, aber natürlich nur, wenn es funktioniert).
Paar:=Tpaar(Paare.Objects[pi]);
with Paar do Ich habe jetzt noch einmal die Delphi Hilfe überprüft, da ist bei der Dokumentation der with Anweisung keine derartige Einschränkung zu finden. |
AW: Objekte zu einer Stringliste bearbeiten
da gibt es kein Problem, setze einfach mal Klammern um den as Ausdruck ;)
|
AW: Objekte zu einer Stringliste bearbeiten
Hab ich gleich probiert, funktioniert aber genausowenig mit Klammern um den as-Ausdruck.
|
AW: Objekte zu einer Stringliste bearbeiten
Das sollte eigentlich so funktionieren
Delphi-Quellcode:
with ( Paare.Objects[pi] as Tpaar ) do
|
AW: Objekte zu einer Stringliste bearbeiten
Wie im Post 5 geschrieben: funktioniert auch mit Klammern nicht, gleiche Fehlermeldung.
Und
Delphi-Quellcode:
geht auch nicht, da kann es nicht an fehlenden Klammern liegen.
with Tpaar(Paare.Objects[pi])
|
AW: Objekte zu einer Stringliste bearbeiten
mmhhh .... sehe ich zum ersten mal dass es da Probleme geben soll, hier D2010 gibt es kein Problem damit.
|
AW: Objekte zu einer Stringliste bearbeiten
Liste der Anhänge anzeigen (Anzahl: 2)
Das Ding treibt mich zum Wahnsinn. Mit dem with hat das Problem doch nichts zu tun.
Delphi-Quellcode:
Fehlermeldung: Operator oder Semikolon fehlt
Paar:=TPaar(Paare.Objects[pi]);
Delphi-Quellcode:
Fehlermeldung: Operator ist auf diesen Operandentyp nicht anwendbar
Paar:=Paare.Objects[pi] as TPaar;
Bin für jeden Hinweis dankbar. |
AW: Objekte zu einer Stringliste bearbeiten
kann es sein dass TTrade auch eine Property Paare hat?
|
AW: Objekte zu einer Stringliste bearbeiten
Moin idefix,
probier' doch mal die Variable pi anders zu benennen. Vielleicht kommt der Compiler da ins Stolpern, denn so heisst ja auch die Konstante für die Zahl PI. |
AW: Objekte zu einer Stringliste bearbeiten
Zitat:
Zitat:
:evil: |
AW: Objekte zu einer Stringliste bearbeiten
Mich irritiert, dass der Compiler Paar für einen String hält. Außerdem scheint das "end." am Dateiende zu fehlen (es sei denn, es handelt sich um einen Folgefehler, da kommen ja auch schon einmal die komischsten Meldungen).
|
AW: Objekte zu einer Stringliste bearbeiten
Danke, jetzt habt ihr mich doch noch auf die Spur gebracht, man kann es wirklich nie schlau genug machen. Sir Rufo hatte eigentlich schon die richtige Idee, und dank DeddyH's
Zitat:
Eben zur Vermeidung von derartigen Mehrdeutigkeiten habe ich allen Properties von TTrade ein t vorgesetzt, und war deshalb ganz sicher, dass mir da nichts passieren kann:
Delphi-Quellcode:
und jetzt gibt es erst recht eine Property tPaar und einen Klassennamen TPaar.TTrade = class(TObject) tPaar: string; tStartzeit, tEndzeit: TDate; //Aktueller Trade tLevel: byte; tKaufen: boolean; tLot: real; tKaufkurs: real; tVkkurs: real; tErfolg: real; end; :wall: |
AW: Objekte zu einer Stringliste bearbeiten
Zitat:
Es schadet doch nicht, den Objektnamen voranzustellen. im Gegenteil, man weiß gleich, wer gemeint ist. Geschütze d.h. nicht sichtbare Feldnamen wird ein 'f' vorangestellt. Ansonsten hüte dich vor Präfixen, außer bei Typen, Exceptions und Interfaces. |
AW: Objekte zu einer Stringliste bearbeiten
Zitat:
Zitat:
Zitat:
|
AW: Objekte zu einer Stringliste bearbeiten
ei jo, vor allem weil Delphi bei der CodeCompletion für Variablen-Felder (bei Properties) in einer Klasse ein F (=Field) verwendet.
Ich versuche folgende Logik bei der Verwendung zu benutzen:
Delphi-Quellcode:
Aber als Präfix das t zu verwenden kam mir eigentlich noch niemals in den Sinn ;)
type
TFoo = class private fMyValue : string; public procedure FooMethod; property MyValue : string read fMyValue write fMyValue; end; implementation ressourcestring sMyValue = 'MyValue'; const cMyValue = 'MyValue'; var gMyValue : string; // unit-global Variable procedure TFoo.FooMethod; var lMyValue : string; // local Variable begin fMyValue := cMyValue; lMyValue := cMyValue; gMyValue := cMyValue; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:55 Uhr. |
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