![]() |
AW: DFM-Datei in anderem Programm als Vorschau anzeigen
Zitat:
Wenn ich Zeit habe, ich wollte das Ding eh OpenSource stellen. |
AW: DFM-Datei in anderem Programm als Vorschau anzeigen
Zitat:
|
AW: DFM-Datei in anderem Programm als Vorschau anzeigen
Zitat:
|
AW: DFM-Datei in anderem Programm als Vorschau anzeigen
Zitat:
Die Funktionalität kann für mehrere Situationen von Bedeutung sein: - Ich will alle meine Dialoge DPI-Aware machen. Mit dieser Funktion kann ich schnell mal mir die Dialoge ansehen, ich weiß inzwischen ja, für welche Komponenten Handlungsbedarf bestehen und verschaffe mir da schnell mal eine Übersicht. - Ich arbeite an einer Dokumentation für die Entwicklung oder ein Handbuch und will mir als Grundlage der Beschreibung mal kurz den Dialog ansehen. Könnte man doch auch direkt über das Programm machen, wird vielleicht einer Fragen? Ja, aber manche Dialoge werden eben erst angezeigt, wenn bestimmte Programm- oder Datenkonstellationen vorliegen. Die immer erst herbeizuführen, kann ziemlich zeitaufwändig sein. Diese Zeit will ich mir ersparen. Diese Dokumentations-Arbeit kann u.U. auch unterwegs mal auf einem Notebook gemacht werden, wo eben kein Delphi drauf ist, daher sollte dies nicht eine Voraussetzung für die Funktionalität sein. |
AW: DFM-Datei in anderem Programm als Vorschau anzeigen
Zitat:
Ich frage mich gerade, ob es denn ein Weg sein könnte, dass ich das Objekt dann in der DLL, welches die Klasse registriert hat, erzeuge und selber an die Stelle im Formular einhänge, wo es hinsoll. Ich könnte ja das ParentControl mit an die DLL übergeben geben (im übertragenen Sinne also "NewClassControlFromDLL.Parent := TControl (ParentControl)). Oder gibt es da einen grundsätzlichen Denkfehler? |
AW: DFM-Datei in anderem Programm als Vorschau anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
Das mit den Frames konnte ich bislang nur so lösen, dass ich die Vorfahrelemente aus dem Nachfolger-Formular durch ein TPanel ersetze, dann wird das Formular ohne Fehler geladen, es fehlen aber die Vorfahren.
Kann man eigentlich eine Klasse auch irgendwie registrieren, indem man die Vorfahren im laufenden Programm "einliest", also aus den .pas und dfm-Dateien? Wenn ja, wie müsste man da vorgehen? Mal abgesehen, dass immer noch das eine oder andere zu klären ist, funktioniert die Sache schon ganz gut, der anliegende Screenshot zeigt ein DFM-Formular im "Design-Time" Modus, mit direkten Zugriff auf die Events der angezeigten Komponenten. Habe auch schon mal ein kleines Vorab-Video gepostet (dass ich aber noch mal neu machen werde, wenn die Endfassung draußen ist), man kann sich aber schon halbwegs ein Bild machen, worauf ich hinaus will. ![]() |
AW: DFM-Datei in anderem Programm als Vorschau anzeigen
Zitat:
Habe keinen Hilfsreichen Beitrag für dich aber.. :thumb::thumb: gruss |
AW: DFM-Datei in anderem Programm als Vorschau anzeigen
Zitat:
Ich habe mir überlegt, um die unbekannten Klassen der User-Komponenten einbinden zu können, ein Plugin-System zu entwickeln. Dabei müsste eine PlugIn-DLL lediglich die Klassen registrieren, die sie zur Verfügung stellt und eine Export-Funktion "GetWinControlFromClass", die so aussieht:
Delphi-Quellcode:
Mein Dateimanager-Programm übergibt der Funktion den Klassennamen des zu erzeugenden Controls und den Textstream der Komponente aus der DFM-Datei.procedure ReadComponent (MyComponent: TComponent; InStream: TMemoryStream); var outstream: TMemoryStream; begin Instream.Position := 0; OutStream := TMemoryStream.Create; try ObjectTextToBinary(InStream, outstream); OutStream.Position := 0; OutStream.ReadComponent(MyComponent); finally OutStream.Free; end; end; function GetWinControlFromClass (ClassName: ShortString; InStream: TMemoryStream; AnOwner: TControl): TControl; stdcall; var CRef : TPersistentClass; begin CRef := GetClass(String (ClassName)); if CRef<>nil then begin Result := TControl(TControlClass(CRef).Create(AnOwner)); ReadComponent (Result, Instream); end; end; exports GetWinControlFromClass; begin RegisterClass (TSpeedButton); {slClasses.Add('TSpeedButton');} end. Die Funktion liefert dann das Control zurück und ich kann die fehlende Klasse in Form des erhaltenen Controls in das Formular einbauen, verkürzt hier mal so dargestellt:
Delphi-Quellcode:
Leider liefert die Zuweisung zum Parent immer den Fehler "TFont kann nicht zu TFont zugewiesen werden".
if DLLhandle <> 0 then begin
co := DFMPlugIn.GetWinControlFromClass ('TSpeedButton', ms, self); if co <> NIL then begin showmessage (co.Name); //OK, geht, Name stimmt auch co.Parent := self; // Fehler:--> TFont kann nicht zu TFont zugewiesen werden co.Left := 100; co.Top := 100; co.Visible := True; end; end; Jemand eine Idee, warum das hier nicht geht, bzw. was man ändern muss, so dass es geht? |
AW: DFM-Datei in anderem Programm als Vorschau anzeigen
Weil
Delphi-Quellcode:
in der DLL ein anderer Typ ist als
TFont
Delphi-Quellcode:
in der Anwendung.
TFont
Du erinnerst dich an das Thema mit den Klassen und DLL? ;) |
AW: DFM-Datei in anderem Programm als Vorschau anzeigen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:16 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 by Thomas Breitkreuz