Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Klassennamen von Designtime-Komponenten herausfinden
ml-kuen - Mi 19.09.12 02:37
Titel: Klassennamen von Designtime-Komponenten herausfinden
Hallo Leute!
probier schon zwei Abende lang den Klassennamen einer zur Designtime hinzugefügten aber nicht automatisch erzeugten Form (Projekt - Optionen - Verfügbare Formulare) herauszufinden. Hat schon mal funktioniert aber irgendwann nicht mehr. Ich vermute, dass das registrieren im Implementationsabschnitt nicht zuverlässig funktioniert. Und die Registrierung ist Voraussetzung um das Formular zur Laufzeit erzeugen zu können. Hab rausgefunden dass man dies im Initialisazion-Abschnitt machen muss. Folgendes funktioniert also, löst aber mein problem nicht, da ich ja den Namen finden will.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Unit2;
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private public end;
VAR Form1: TForm1; aClass: TPersistentClass; Fenster: TForm; implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin aClass := TPersistentClass(GetClass('TForm2')); showMessage(aClass.ClassName); Fenster := TComponentClass(AClass).Create(Application.MainForm) as TForm; Fenster.Show; end;
initialization RegisterClasses([TForm2]); end. |
Das obere RegisterClasses funktioniert zwar hier auch noch, aber wenn die Sache komplexer wird hagelt es nur noch Exceptions. Ich vermute, dass es nicht möglich sein wird, da bis zum Initialization-Abschnitt noch nicht viel passiert ist.
Aber - wenn doch jemand einen Tipp hätte?
Gruß
Michael
bummi - Mi 19.09.12 08:00
Delphi-Quelltext
1:
| Showmessage(GetClass('TForm2').ClassName); |
jaenicke - Mi 19.09.12 09:29
Wenn die Klasse nirgends im Quelltext verwendet wird, wird die auch nicht mit einkompiliert bzw. gelinkt. Und dann kannst du dich auf den Kopf stellen, aber zu nicht in der Exe vorhandenen Daten bekommst du keinen Klassennamen. ;-)
ml-kuen - Mi 19.09.12 13:15
jaenicke hat folgendes geschrieben : |
Wenn die Klasse nirgends im Quelltext verwendet wird, wird die auch nicht mit einkompiliert bzw. gelinkt. Und dann kannst du dich auf den Kopf stellen, aber zu nicht in der Exe vorhandenen Daten bekommst du keinen Klassennamen. ;-) |
Dachte mir schon so etwas in der Art. Aber was müsste eine VCL-Komponente zur Designtime machen, um die Formulare zurückzugeben? Schließlich werden diese in Delphi ja auch dargestellt. Da gibts doch auch diese in einer VCL-Komponente integrierten Editoren und so weiter, mit denen man zur Designtime schon bestimmte Sachen machen kann. Komme gerade nicht auf den Namen derartiger Erweiterungen.
Michael
jaenicke - Mi 19.09.12 13:42
Zur Designzeit musst du die OpenTools-API nutzen. Damit kommst du an viele Sachen in der IDE heran, vorausgesetzt du nutzt eine einigermaßen aktuelle Delphiversion (früher war das relativ eingeschränkt).
Das hat allerdings nichts mit deinem eingangs geposteten Quelltext zu tun.
Ob es einen Zugang zu den im Projekt vorhandenen Formularen gibt, weiß ich nicht, aber das könntest du aus dem Projektquelltext herausparsen. Der stand bei älteren Delphiversionen in geschweiften Klammern hinter der Zeile mit der eingebundenen Unit, bei aktuellen findet man das wohl auch über die .dproj Datei besser.
ml-kuen - Mi 19.09.12 13:54
Moderiert von
Narses: Komplett-Zitat des letzten Beitrags entfernt.
Dann werde ich mal noch ein bischen forschen. Hab leider die schon etwas betagte Version 7 am Laufen. Aber Danke für den Tipp!
Michael
Moderiert von
Narses: Doppelpostings entfernt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!