AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Objekte aus Textdatei erstellen

Ein Thema von Acuaplano · begonnen am 16. Jun 2013 · letzter Beitrag vom 22. Jun 2013
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Objekte aus Textdatei erstellen

  Alt 18. Jun 2013, 21:33
So, jetzt mit mehr Zeit etwas genauer.

Du kannst Klassen folgendermaßen registrieren (am Beispiel der TodPanel):

Delphi-Quellcode:
// 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.
Und dann zur Laufzeit:

Delphi-Quellcode:
FindClass('TodPanel');
odPanel := TodPanelClass(GetClass('TodPanel')).Create(Self);
In dieser Richtung solltest Du mal schauen.
Ach so, es hängt ggf. auch von Deiner Delphiversion ab.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Acuaplano

Registriert seit: 8. Mai 2013
29 Beiträge
 
#12

AW: Objekte aus Textdatei erstellen

  Alt 18. Jun 2013, 22:11
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?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Objekte aus Textdatei erstellen

  Alt 18. Jun 2013, 22:29
Theoretisch von TPersistant, aber ich würde die Registrierung einfach bei einem eigenen Factory-Objekt machen wie schon geschrieben. Sprich:
Delphi-Quellcode:
MyFactory.RegisterClass(TBaum);
...
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#14

AW: Objekte aus Textdatei erstellen

  Alt 18. Jun 2013, 22:45
@jaenicke

So könnte die Klasse aussehen
Delphi-Quellcode:
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;
das Registrieren dann wie schon erwähnt
Delphi-Quellcode:
unit Baum;

uses
  Entity;

TBaum = class( TEntity )
end;

TBusch = class( TEntity )
end;

initialization

TEntityFactory.RegisterClass( 'Baum', TBaum );
TEntityFactory.RegisterClass( 'Busch', TBusch );

end.
und erzeugen dann mit
Delphi-Quellcode:
var
  LBaum : TEntity;
  LBusch : TEntity;

LBaum := TEntityFactory.Construct( 'Baum' );
LBusch := TEntityFactory.Construct( 'Busch' );
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Acuaplano

Registriert seit: 8. Mai 2013
29 Beiträge
 
#15

AW: Objekte aus Textdatei erstellen

  Alt 20. Jun 2013, 17:36
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:
Value := Dictionary.GetKeyData('Baum');
with TImageSprite(Dictionary.GetKeyData('Baum')).Create(AdSpriteEngine) do
begin
  x := i * 96;
  y := j * 96;
  z := 30;
end;
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:
Code:
Value = TClass($00573390) = record{}
Ist das so schon richtig oder passt da das record nicht rein? Wäre ein record nicht eine Gruppierung aus Variablen, also keine Klasse?
  Mit Zitat antworten Zitat
Acuaplano

Registriert seit: 8. Mai 2013
29 Beiträge
 
#16

AW: Objekte aus Textdatei erstellen

  Alt 22. Jun 2013, 16:43
Okay, hat sich erledigt, ich hatte vergessen den "class of"-Befehl zu benutzen.
TUnbenutzbarClass = class of TUnbenutzbar
...
Dictionary := TFPGMap<String, TUnbenutzbarClass>.Create;
...
Delphi-Quellcode:
Value := Dictionary.GetKeyData('Baum');
TestObjekt := Value.Create(AdSpriteEngine);
Jedenfalls danke für die Hilfe! Wir werden uns dann später auch an den Streams und Factorys versuchen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz