AGB  ·  Datenschutz  ·  Impressum  







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

Ein Objekt zu Laufzeit die Klasse zuweisen

Ein Thema von Popov · begonnen am 13. Okt 2012 · letzter Beitrag vom 13. Okt 2012
Antwort Antwort
Popov
(Gast)

n/a Beiträge
 
#1

AW: Ein Objekt zu Laufzeit die Klasse zuweisen

  Alt 13. Okt 2012, 20:21
Das eigentlich Problem ist, dass nichts bisher funktionierte was ich getestet habe. Vielleicht liegt das Problem im Detail. Ich mache noch paar Versuche.

//Edit:

Nein, es funktioniert doch nicht. Wie gesagt, anscheinend habe ich beim ersten Mal das Problem richtig beschrieben, beim zweiten Mal zu Missverständnissen geführt.

Aber letztendlich ist es egal, es war eher nur eine Idee und eine Frage der Machbarkeit. Kein eigentliches Problem, mehr Interesse. Aber wenn ich gerade so überlege, dann kann das nicht klappen. Selbst wenn es klappen würde, wahrscheinlich würde der Compiler es nicht mitmachen. Wenn ich z.B. Tmp.Canvas im Code eingebe, dann macht er das beim falschen Objekt sowieso nicht mit.

Geändert von Popov (13. Okt 2012 um 20:40 Uhr)
  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
 
#2

AW: Ein Objekt zu Laufzeit die Klasse zuweisen

  Alt 13. Okt 2012, 20:29
Das eigentlich Problem ist, dass nichts bisher funktionierte was ich getestet habe. Vielleicht liegt das Problem im Detail. Ich mache noch paar Versuche.
Wenn du uns - oder mir - mal erklären würdest, was du denn wirklich machen möchtest, dann erhöhen sich die Chancen schlagartig. Mir ist es auf jeden Fall noch nicht ganz klar

Möchtest du evtl. in dieser Richtung?
Delphi-Quellcode:
procedure DoSomething( AInstance : TObject );
begin
  ...
end;
Übergibst du eine TButton Instanz, soll die Caption geändert werden, übergibst du eine Instanz von TStringList, dann soll der Inhalt gelöscht werden.

Suchst du sowas in der Art?
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)

Geändert von Sir Rufo (13. Okt 2012 um 20:33 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: Ein Objekt zu Laufzeit die Klasse zuweisen

  Alt 13. Okt 2012, 20:57
Wie gesagt, inzwischen gehe ich davon aus, dass es nicht klappen kann. Aber ich beschreibe man meine Überlegungen noch mal mit meinen Beispiel aus dem ersten Beitrag (nur der Vollständigkeitshalber).

Delphi-Quellcode:
procedure TForm1.FormDestroy(Sender: TObject);
var
  i: Integer;
  Tmp: T???;
begin
  with ListBox1 do
    for i := 0 to Items.Count - 1 do
    begin
//An jedem Item hängt ein Objekt, nehmen wir an es ist ein TBitmap, aber ich weiß es nicht
//Nun stellt sich die Frage ob ich Tmp im Betrieb zu dem Objekttyp machen kann der
//am Item hängt. Also ermitteln, dass es TBitmap ist und Tmp zu TBitmap machen
      Tmp:= T???(Items.Objects[i]);
//Das Free ist hier Sekundär und nur ein Beispiel. Das wird auch so klappen, da es jedes Objekt besitzt
//Aber um das geht es weniger, sondern kann ich Tmp zuerst zu TBitmap machen und
//es erst dann freigebe
      Tmp.Free;
    end;
end;
Wie gesagt, mich interessierte es nur ob das geht.

//Edit:

Oder anders ausgedrückt

Delphi-Quellcode:
  (Tmp as TBitmap)
  ..
nur das ich die Info TBitmap aus dem Objekt an dem Item erfahre.

Geändert von Popov (13. Okt 2012 um 21:10 Uhr)
  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
 
#4

AW: Ein Objekt zu Laufzeit die Klasse zuweisen

  Alt 13. Okt 2012, 21:33
Da es nur Sinn macht den Typen zu erfahren, wenn mit diesem Objekt etwas klassenspezifisches machen möchte (also z.B. der TBitmap-Instanz ein Bild zuweisen), denn ansonsten wäre der Typ egal, bzw. man muss nicht immer den ganz konkreten Typen wissen, wenn die geplante Aktion auch schon ein paar Klassen vorher implementiert ist/ansprechbar ist (z.B. die Eigenschaft Tag wird von TComponent eingeführt, darum müsste ich nicht auf TButton prüfen um das Tag zu setzen)

Also ist meine Vermutung schon richtig gewesen, dass du einen Visitor haben möchtest

Hier der Link zum Blog von Uwe Visitor Pattern Teil 4
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
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Ein Objekt zu Laufzeit die Klasse zuweisen

  Alt 13. Okt 2012, 22:29
Nur um sicher zu gehen, dass das Objekt weiß was es ist weißt Du?
Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
begin
  Listbox1.Items.AddObject('',TButton.Create(self));
  Listbox1.Items.AddObject('',TListbox.Create(self));
  Listbox1.Items.AddObject('',TBitmap.Create);

end;

procedure TForm3.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin

    ListBox1.Canvas.FillRect(rect); ListBox1.Canvas.TextOut(rect.Left,rect.Top,ListBox1.Items.Objects[index].ClassName);

end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  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 13:25 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