Autor Beitrag
ml-kuen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

Win 95, Win 98, Win 2000, Win XP, Win 7
Delphi 7 personal
BeitragVerfasst: Mi 19.09.12 02:37 
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.

ausblenden volle Höhe 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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

VAR
  Form1: TForm1;
  aClass: TPersistentClass;
  Fenster: TForm;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
//  RegisterClasses([TForm2]);
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mi 19.09.12 08:00 
ausblenden Delphi-Quelltext
1:
  Showmessage(GetClass('TForm2').ClassName);					

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

Win 95, Win 98, Win 2000, Win XP, Win 7
Delphi 7 personal
BeitragVerfasst: Mi 19.09.12 13:15 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

Win 95, Win 98, Win 2000, Win XP, Win 7
Delphi 7 personal
BeitragVerfasst: Mi 19.09.12 13:54 
Moderiert von user profile iconNarses: 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 user profile iconNarses: Doppelpostings entfernt.