AGB  ·  Datenschutz  ·  Impressum  







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

Object zur Laufzeit generieren

Ein Thema von Taladan · begonnen am 13. Jun 2005 · letzter Beitrag vom 13. Jun 2005
Antwort Antwort
Benutzerbild von Taladan
Taladan

Registriert seit: 5. Aug 2003
Ort: Osnabrück
505 Beiträge
 
Delphi 2005 Professional
 
#1

Object zur Laufzeit generieren

  Alt 13. Jun 2005, 07:40
Hallo, gibt es eine möglichkeit, ein Object erst zur Laufzeit zu definieren. Mein Problem ist, der Nutzer bestimmt erst bei der Laufzeit, was alles rein gehört. Sowohl die Anzahl der Elemente und auch deren Art (String, Integer, Boolean usw) werden dann bestimmt.

Kann man so was machen?
Marco
Wer Rechtschreibfehler findet, der darf sie behalten

Carpe Diem - Nutze den Tag (und zwar den ganzen!)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Object zur Laufzeit generieren

  Alt 13. Jun 2005, 07:48
So wie du es dir vermutlich vorstellst nicht. Dazu wäre eine Kompilierung zu laufzeit nötig.

Aber du könntest ja deine Klassen so dynamisch/intelligent machen, da die Element in einer Auflistung liegen, die der User (über entsprechende Dialoge) "füllen" kann. Ähnlich Klassen/Auflistungen wie es z.B. bei der Delphi TDataset-Klasse realisiert ist. Da weis die Komponente auch nicht mit welchen Feldern (Anzahl/Typ) die Komponente arbeiten muss.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#3

Re: Object zur Laufzeit generieren

  Alt 13. Jun 2005, 08:22
wenn du so fexibel sein willst/musst hast du nur die möglichkeit von den nativen typen weg zu gehen und einen Abstrakten Weg zu gehen.

Möglichkeit a)
Du machst dir eine Sammlung von Strings (oder auch nur Integer Werten - noch Abstrakter) und fängst zu Laufzeit an diese Auszuwerten. Das kannst du natürlich auch mit anderen Mitteln machen als String. Ich denke ein Bytestream mit darstellung in HEX würde sich anbieten. Da je jede Information sowiso nur mit logisch '1' ond '0' dargestellt wird kannst du sie danach ja interprätieren wie du willst.

Delphi-Quellcode:
MyArray[0][0]:='1// Boolean
MyArray[0][1]:='true'

MyArray[1][0]:='2// Integer
MyArray[1][1]:='1024'
geht auch mit records, wo du dir typen [typeInt, typeBool, typeSonstwas, ...] anlegst.


Möglichkeit b)
Du erzeugst...

hab mir grad soviel Gedanken um Möglichkeit A gemacht, dass ich B vergessen hab
Was kann man an nem Montag Morgen schon erwarten...
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#4

Re: Object zur Laufzeit generieren

  Alt 13. Jun 2005, 08:56
Schlag mich, aber mir fällt der Objektorientierte Ansatz, den ich grad hatte nicht mehr ein... ich geh mir mal nen Kaffee holen. Hier noch schnell die etwas elegantere Variante A, die ich grad mal QFD getippt hab.

Delphi-Quellcode:
type
  TType = (typeInt, typeBool, typeString);

type
  TMyRecord = record
    Typ: TType;
    Data: String;
  end;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    MyRecord: Array of TMyRecord;
  public
    function machBool(meinWert: String):String;
  end;

// [...]

procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
  setlength(MyRecord, 3);
  MyRecord[0].Typ:=TypeInt;
  MyRecord[0].Data:='65';
  MyRecord[1].Typ:=TypeString;
  MyRecord[1].Data:='65';
  MyRecord[2].Typ:=TypeBool;
  MyRecord[2].Data:='65';

  for i:=0 to high(MyRecord) do
  begin
    case MyRecord[i].Typ of
      TypeInt: showmessage(MyRecord[i].Data);
      TypeString: showmessage(Chr(StrToInt(MyRecord[i].Data))); // Okay, ist momentan eher ein Char statt ein String ;)
      TypeBool: showmessage(machBool(MyRecord[i].Data));
    end;
  end;
end;

function TForm1.machBool(meinWert: String):String;
begin
  if meinWert = '0then
    Result:='false'
  else
    Result:='true';
end;
Ich hab wegen der Anschaulichkeit hier mal mit String gearbeitet. Ist IMHO nicht der beste Weg, aber sehr übersichtlich.

MfG

Tonic
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Benutzerbild von Kroko1999
Kroko1999

Registriert seit: 21. Apr 2005
Ort: Spremberg
455 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Object zur Laufzeit generieren

  Alt 13. Jun 2005, 12:38
Ist dazu nicht der Typ: Variant da
Da sprach der Stumme zum Blinden: "Du wirst sehen ..."
oder
Wer lesen kann, ist klar im Vorteil!
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#6

Re: Object zur Laufzeit generieren

  Alt 13. Jun 2005, 12:45
Es hilft dir nur nicht, wenn du zwar den Wert der Variablen aufnehmen kannst, jedoch nicht weisst wie du ihn interprätieren musst. Von daher kannst du zwar deine Daten in einem Variant speichern, bist aber keinen Schritt weiter. Und wenn du jedes Mal wenn du auf den Wert zugreifen willst erst ne prüfroutine durchlaufen lassen willst, kannst du auch den Typ mitschleppen. Variants sind IMHO nur sinnvoll wenn du nicht weisst, was du als Ergebnis aus einer Routine erwartest.

Du kannst in meinem beispiel Statt String natürlich Variant einsetzen. Aber dass ich den String nur aus Veranschaulichkeits-Gründen benutzt habe hatte ich ja dazu geschrieben.
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#7

Re: Object zur Laufzeit generieren

  Alt 13. Jun 2005, 13:56
Hallo Tonic1024,

sieht mal in der OH unter VarType() nach. Ich stimme Kroko1999 zu: eine Variable vom Typ Variant speichert sehr wohl den Typ der Daten, die sie darställt
gruß, choose
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#8

Re: Object zur Laufzeit generieren

  Alt 13. Jun 2005, 15:45
Ich mag es nicht wirklich gerne, wenn ein anderer Ansatz als falsch dargestellt wird *quengel*

Also. Im Prinzip habt ihr ja recht, aber mit VarAsType kannst du jede Menge Unfug machen und im Prizip ist es nichts Anderes als mein Vorschlag. Und genau das hatte ich mit der Prüfungsroutine gemeint, hatte nur das Schlagwort nicht parat...

Ich hab auch nicht behauptet, das dies die einzige lösung ist, gell
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:31 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