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
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: DFM-Datei in anderem Programm als Vorschau anzeigen

  Alt 22. Jul 2015, 21:23
Weil TFont in der DLL ein anderer Typ ist als TFont in der Anwendung.

Du erinnerst dich an das Thema mit den Klassen und DLL?
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 Harry Stahl
Harry Stahl

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

AW: DFM-Datei in anderem Programm als Vorschau anzeigen

  Alt 22. Jul 2015, 21:32
Weil TFont in der DLL ein anderer Typ ist als TFont in der Anwendung.

Du erinnerst dich an das Thema mit den Klassen und DLL?
Ja, Klassen kann man nicht exportieren, aber die erzeugten Klassen-Objekte. Und nichts anderes mache ich in der DLL. Hier sind sogar DLL und Programm von der gleichen Compiler-Version erzeugt, da müsste doch das TFont aus der DLL mit dem TFont aus dem Programm identisch sein, oder?
  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
 
#3

AW: DFM-Datei in anderem Programm als Vorschau anzeigen

  Alt 22. Jul 2015, 21:46
Es ist nun mal so wie es ist.

Und bei der Zuweisung des Fonts passiert ein TFont.Assign . Und dort wird überprüft, ob die Instanz vom Typ TFont ist. Ist sie aber nicht (sieht man, wenn man sich den Referenzzeiger von TObject.ClassType anschaut.

Sehen gleich aus, heissen gleich, haben aber eine andere Referenz => ungleich und kein Assign möglich.
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 Harry Stahl
Harry Stahl

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

AW: DFM-Datei in anderem Programm als Vorschau anzeigen

  Alt 22. Jul 2015, 21:56
So ein Mist...

Aber danke für die Erklärung.
  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
 
#5

AW: DFM-Datei in anderem Programm als Vorschau anzeigen

  Alt 22. Jul 2015, 22:05
Eine Möglichkeit wäre noch, dass du dem Control in der DLL ein Panel zur Verfügung stellst und dann der DLL das Handle von dem Panel übergibst, dann kann das Control dort hingezeichnet werden.
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 Harry Stahl
Harry Stahl

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

AW: DFM-Datei in anderem Programm als Vorschau anzeigen

  Alt 22. Jul 2015, 22:31
Vielen Dank für den Tipp. Werde ich morgen Abend auf jeden Fall mal ausprobieren, dass könnte zumindest eine Notlösung sein, wenn die anderen Ansätze, die ich mir überlegt habe, auch nicht funktionieren sollten...
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

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

AW: DFM-Datei in anderem Programm als Vorschau anzeigen

  Alt 23. Jul 2015, 20:02
Erfreulicherweise habe ich doch noch eine Möglichkeit gefunden, das Objekt in mein Formular zu übernehmen, mit CreateParented geht es:

Delphi-Quellcode:
function GetWinControlFromClass (ClassName: ShortString; InStream: TMemoryStream; AnOwner: TControl): TControl; stdcall;
var
  CRef: TPersistentClass;
  AControl: TControl;
  pn: TPanel;
begin
  Result := NIL;

  pn := Tpanel.CreateParented(TWinControl(AnOwner).handle); // That Rocks !!

  CRef := GetClass(String (ClassName));
  if CRef<>nil then
  begin
    AControl := TControl(TControlClass(CRef).Create(AnOwner));
    try

      AControl.Parent := pn;
      ReadComponent (AControl, Instream);
      //AControl.Parent := pn;

      pn.BevelOuter := bvNone;

      pn.Left := TWinControl (AControl).Left;
      pn.Top := TWinControl (AControl).Top;

      AControl.Left := 0;
      AControl.Top := 0;

      if ObjectHasProp (AControl, 'Width', tkInteger) then begin
        pn.AutoSize := True;
      end else begin
        pn.Width := 32;
        pn.Height := 32;
      end;

      pn.Visible := True;

      AControl.Visible := True;
      Result := TControl (pn);
    except
    end;
  end;
end;
Auf der Aufrufseite darf und braucht keine Parentzuweisung mehr erfolgen, daher kommt es auch nicht mehr zum Asign (TFont) usw. und alles funktioniert wie gewünscht (kleine Einschränkung, für das Objekt funktioniert kein Align). Kann das zurückgegebene Panel dann in die Form oder z.B. in ein anderes Panel einfügen.

Einzige Sache, die mich gerade etwas irritiert: Es funktioniert mit TEdit, TButton, TListBox, usw., aber nicht mit TSpeedButton.

Das TSpeedbutton-Objekt wird ordnungsgemäß erzeugt, aber nicht angezeigt. Warum nur (TSpeedButton ist natürlich als Klasse in der DLL registiert)?

Geändert von Harry Stahl (23. Jul 2015 um 20:08 Uhr)
  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 12:17 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