![]() |
AW: Objekte aus Textdatei erstellen
So, jetzt mit mehr Zeit etwas genauer.
Du kannst Klassen folgendermaßen registrieren (am Beispiel der TodPanel):
Delphi-Quellcode:
Und dann zur Laufzeit:
// Klassenunit
unit odPanel; interface type TodPanel = class(TPanel) ... end; TodPanelClass = class of TodPanel; procedure Register; // wenn Du das Control für die IDE registrieren willst implementation procedure Register; begin RegisterComponents('odControls', [TodPanel]); end; initialization RegisterClasses([TodPanel]); end.
Delphi-Quellcode:
In dieser Richtung solltest Du mal schauen.
FindClass('TodPanel');
odPanel := TodPanelClass(GetClass('TodPanel')).Create(Self); Ach so, es hängt ggf. auch von Deiner Delphiversion ab. |
AW: Objekte aus Textdatei erstellen
Ich nehme mal an, dass ich für meine Klassen stattdessen "RegisterClasses" nehmen soll.
Aber das Problem ist jetzt dabei, dass TImageSprite keine "persistent class" ist und ich die deshalb nicht registrieren kann. Ich versteh auch im Moment nicht wo jetzt der Sinn dahinter ist. Gäbe es denn ne andere Möglichkeit, als die Klassenvererbung zu ändern? Falls nicht, wovon müsst ich theoretisch TImageSprite ableiten? |
AW: Objekte aus Textdatei erstellen
Theoretisch von TPersistant, aber ich würde die Registrierung einfach bei einem eigenen Factory-Objekt machen wie schon geschrieben. Sprich:
Delphi-Quellcode:
Und in MyFactory das ganze in ein TDictionary<string, TClass> werfen, wobei der Key der Klassenname als String der Klasse ist. Dann kannst du aus diesem Dictionary jederzeit über den Namen der Klasse die Klasse finden und kannst die entsprechend erzeugen.
MyFactory.RegisterClass(TBaum);
... |
AW: Objekte aus Textdatei erstellen
@jaenicke :thumb:
So könnte die Klasse aussehen
Delphi-Quellcode:
das Registrieren dann wie schon erwähnt
unit Entity;
TEntity = class end; TEntityClass = class of TEntity; TEntityFactory = class class procedure RegisterClass( const AName : string; AClass : TEntityClass ); overload; class procedure RegisterClass( AClass : TEntityClass ); overload; class function Construct( const AName : string ) : TEntity; // oder mit Generics class function Construct<T : TEntityClass>( const AName : string ) : T; end;
Delphi-Quellcode:
und erzeugen dann mit
unit Baum;
uses Entity; TBaum = class( TEntity ) end; TBusch = class( TEntity ) end; initialization TEntityFactory.RegisterClass( 'Baum', TBaum ); TEntityFactory.RegisterClass( 'Busch', TBusch ); end.
Delphi-Quellcode:
var
LBaum : TEntity; LBusch : TEntity; LBaum := TEntityFactory.Construct( 'Baum' ); LBusch := TEntityFactory.Construct( 'Busch' ); |
AW: Objekte aus Textdatei erstellen
Hab jetzt das mit dem "Dictionary" probiert. Nur heißt das bei Lazarus TFPGMap und hat bisschen andere Namen, wobei das in meinen Augen ansonsten wenig Unterschiede hat.
Eine Klasse einfügen funktioniert und auslesen geht glaube ich auch*. Nur schmeißt der mir jetzt hier ne Fehlermeldung aus (External SIGSEGV):
Delphi-Quellcode:
Ich persönlich würde ja einfach mal sagen, dass ich Zeile 2 einfach falsch geschrieben hab, aber als ich überprüfen wollte*, ob der überhaupt die Klasse ausliest kam mir der Inhalt von "Value" etwas verdächtig vor:
Value := Dictionary.GetKeyData('Baum');
with TImageSprite(Dictionary.GetKeyData('Baum')).Create(AdSpriteEngine) do begin x := i * 96; y := j * 96; z := 30; end;
Code:
Ist das so schon richtig oder passt da das record nicht rein? Wäre ein record nicht eine Gruppierung aus Variablen, also keine Klasse?
Value = TClass($00573390) = record{}
|
AW: Objekte aus Textdatei erstellen
Okay, hat sich erledigt, ich hatte vergessen den "class of"-Befehl zu benutzen.
Delphi-Quellcode:
TUnbenutzbarClass = class of TUnbenutzbar
...
Delphi-Quellcode:
Dictionary := TFPGMap<String, TUnbenutzbarClass>.Create;
...
Delphi-Quellcode:
Jedenfalls danke für die Hilfe! Wir werden uns dann später auch an den Streams und Factorys versuchen :D
Value := Dictionary.GetKeyData('Baum');
TestObjekt := Value.Create(AdSpriteEngine); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 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