AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi DFM-Datei in anderem Programm als Vorschau anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

DFM-Datei in anderem Programm als Vorschau anzeigen

Ein Thema von Harry Stahl · begonnen am 16. Jul 2015 · letzter Beitrag vom 28. Feb 2016
 
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.546 Beiträge
 
Delphi 12 Athens
 
#1

DFM-Datei in anderem Programm als Vorschau anzeigen

  Alt 16. Jul 2015, 20:39
Ich bin gerade dabei, meinem Dateimanager-Programm eine Vorschau-Ansicht für Delphi-Formulare zu spendieren (.DFM-Dateien). Man muss also nur auf eine DFM-Datei klicken und schon bekommt man die Form im Vorschaufenster angezeigt. Die .PAS-Datei wird nicht benötigt und auch kein Delphi auf dem Computer. Das ist eine Sache, die ich mir selber schon lange gewünscht habe, bei den vielen Formularen ist das z.B. im Rahmnen einer Suche ganz praktisch, die mal kurz optisch anzusehen, ohne die in eine Entwicklungsumgebung laden zu müssen.

Das funktioniert soweit schon ganz gut, es werden Forms und Frames angezeigt (siehe anliegenden Screenshot).

Drei Probleme bleiben, wo ich derzeit nicht so richtig weiterkomme, evtl. weiß jemand Rat:

1. Von den Frames kann ich derzeit nur die Basis-Frames anzeigen. Falls das Frame eine Ableitung von einem anderen Frame ist, kommt der Hinweis, dass das Vorfahr-Frame nicht gefunden wurde und der Vorgang wird abgerochen.

Um das Frame ( / Formular) einzulesen, verwende ich die TReader-Klasse:

Delphi-Quellcode:
 ...
 Reader := TReader.Create(S2, 4096); // S2 enthält den schon eingelesenen DFM-Stream
 FormDyna := Tform.Create(NIL);

 if TypeFrame then begin
    AFrame := TFrame.Create(FormDyna);
    Reader.ReadRootComponent(AFrame); // Hier knallt es, wenn ein Vorfahr-Frame vorhanden ist
    AFrame.Parent := FormDyna;
    AFrame.visible := True;
  end else begin
    Reader.ReadRootComponent(FormDyna);
  end;
  ...
Was könnte man hier machen, um das Vorfahr-Frame dem Reader zur Verfügung zu stellen?

2. Wenn der Reader eine unbekannte Klasse findet, dann steigt er aus und liefert kein verwendbares Ergebnis zurück. Das ist also etwas anders, als wenn Delphi eine Form-Datei lädt und fehlende bzw. unbekannte Komponenten beanstandet. Es fehlen dann evtl. einige Komponenten, aber das Form wird jedenfalls geladen. Gibt es irgendeine Option oder sonstige Möglichkeit, dem Reader zu sagen, dass er das Laden fortsetzen soll?

Bislang habe ich das so gelöst, dass ich die unbekannten Komponenten nach dem Einlesen an Ort und Stelle und in der ursprünglichen Position gegen ein TPanel austausche, mit dem Namen der Klasse versehen. Das würde ich auch weiterhin so machen, allerdings sind auch bekannte Standard-Komponenten von Delphi-Version zu Delphi-Version schon mal anders, so dass auch da immer noch eine Abbruchgefahr bleibt, insofern wäre es schön, wenn der Reader trotzdem weiterliest.

3. Das Programm kann natürlich nur die Komponenten anzeigen, die es kennt, sprich, die man mit RegisterClass registriert hat. Das kann ich natürlich für alle Standard-Delphi-Klassen machen und für das was ich hier sonst noch so an Drittkomponenten erworben habe.

Aber andere Anwender werden halt andere Komponenten und Klassen haben, die sie vielleicht auch ganz gerne in der Vorschau sehen würden (statt des Ersatzpanels). Kann man die Klassen der Drittkomponenten z.B. über eine DLL-Datei (die der Anwender selber erstellen und in das Programmverzeichnis kopieren müsste) meinem Programm bekannt machen oder ist eine andere Lösung denkbar?
Angehängte Grafiken
Dateityp: jpg FioForms.jpg (176,2 KB, 78x aufgerufen)

Geändert von Harry Stahl (16. Jul 2015 um 20:42 Uhr)
  Mit Zitat antworten Zitat
 


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 12:34 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