AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Frame aus Package laden (ohne Runtime-Packages)
Thema durchsuchen
Ansicht
Themen-Optionen

Frame aus Package laden (ohne Runtime-Packages)

Ein Thema von hoika · begonnen am 10. Feb 2011 · letzter Beitrag vom 9. Feb 2017
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#1

Frame aus Package laden (ohne Runtime-Packages)

  Alt 10. Feb 2011, 16:49
Hallo #,

ich habe ein paar BPL's, diese können Frames erzeugen
und zurückgeben.
In einer Exe mit Runtime Packages klappt das auch alles.

Bei einer bestimmten Exe habe ich aber mit den Runtime Packages keine Change
(cds.bpl findet er nicht).
Bisher habe ich dort ein Form per DLL gestartet.
Jetzt sollen es auch dort die vermaledeiten BPL-Frames sein ;(

Geht das überhaupt ?
Ich bekomme wahlweise "Frame ohne Owner erzeugt" (oder so)
oder ein "TFont kann nicht TFont zugeweisen werden" (bei Frame aus DLL)

Danke


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Frame aus Package laden (ohne Runtime-Packages)

  Alt 10. Feb 2011, 16:53
Wird nicht gehen das DLL.TObject != Exe.TObject.

Wir haben uns geholfen das wir hier auf WinAPI zurückgegangen sind und Fensterhandle (HWND) "eingeschnappt" haben.
Die Fleißaufgabe ist nun auch sowas wie Tabs korrekt zu unterstützen sowie alle andern VCL-Schönheiten zu "mappen".
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Headbucket

Registriert seit: 12. Dez 2013
Ort: Dresden
172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Frame aus Package laden (ohne Runtime-Packages)

  Alt 22. Dez 2016, 12:29
Hallo,

auch, wenn der Thread schon etwas älter ist: Geht das wirklich nicht? Ich möchte Packages (BPL) dynamisch von meiner Hauptanwendung laden. Es soll damit möglich sein auch später noch neue Packages zu entwickeln, ohne die Hauptanwendung nochmal zu übersetzen. Die Packages sollen dabei Frames bereitstellen, welche in der Hauptanwendung angezeigt werden.

1. Ansatz

Quellen:
http://www.delphipraxis.net/171762-h...-packages.html
http://www.delphipraxis.net/63743-fo...sch-laden.html
http://stackoverflow.com/questions/3...to-application
http://edn.embarcadero.com/article/27178

Folgendes im Package:
Delphi-Quellcode:
initialization
  RegisterClass(TMyFrame);
finalization
  UnRegisterClass(TMyFrame);
Funktioniert leider nicht, da die Packages hier leider bereits beim Compilieren der Hauptanwendung bekannt sein müssen. Ansonsten erhalte ich, wie in vielen Threads angemerkt, "nil", wenn ich mit GetClass/FindClass nach der Klasse suche.

2. Ansatz

Erstellen von Funktionen im Package, welche per export bereitgestellt werden.

Leider erhalte ich dann, wie hier im ersten Post geschrieben, den Fehler "TFont kann nicht TFont zugeweisen werden".

Mein bisheriger Versuch:

Package:
Code:
exports
  CreateFrame;

function CreateFrame(AOwner: TComponent; AParent: TWinControl; AHandle: HWnd): TFrame;
begin
  Application.Handle := AHandle;
  Result := TFrameBPL.Create(AOwner);
  Result.Parent := AParent;
  Result.Align := alClient;
end;
Hauptanwendung:
Delphi-Quellcode:
procedure TMain.LoadBPL(AFileName: string);
type
  TCreateFrame = function(AOwner: TComponent; AParent: TWinControl; AHandle: HWnd): TFrame;
var
  CreateFrame: TCreateFrame;
  BPLFrame: TFrame;
begin
  FPackageModule := LoadPackage(AFileName);
  if FPackageModule <> 0 then
  begin
    @CreateFrame := GetProcAddress(FPackageModule, 'CreateFrame');
    if Assigned(CreateFrame) then
      BPLFrame := CreateFrame(sb, sb, Application.Handle); //sb ist eine TScrollBox
  end;
end;
Was mache ich falsch, bzw. wie sollte man es richtig machen?

Grüße
Headbucket

Geändert von Headbucket (22. Dez 2016 um 12:37 Uhr) Grund: Kommentar hinzugefügt
  Mit Zitat antworten Zitat
Headbucket

Registriert seit: 12. Dez 2013
Ort: Dresden
172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Frame aus Package laden (ohne Runtime-Packages)

  Alt 7. Feb 2017, 14:08
(Push)

Ich habe inzwischen mal versucht das ganze über HTML und die TWebBrowser-Komponente umzusetzen. Funktioniert im Prinzip zu 90 %...aber ich habe das Gefühl, dass mir die TWebBrowser-Komponente in Zukunft viel Ärger bringen wird. Das gefällt mir inzwischen nun doch nicht mehr.

Gibt es inzwischen wirklich keine "einfache" Möglichkeit ein Frame aus einer DLL zu laden? Ich bin schon fast soweit, dass ich mir ein XML-Konstrukt ausdenke und daraus die Frames bastel... .

Grüße
Headbucket
  Mit Zitat antworten Zitat
hanvas

Registriert seit: 28. Okt 2010
157 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Frame aus Package laden (ohne Runtime-Packages)

  Alt 7. Feb 2017, 14:55
(Push)
Gibt es inzwischen wirklich keine "einfache" Möglichkeit ein Frame aus einer DLL zu laden? Ich bin schon fast soweit, dass ich mir ein XML-Konstrukt ausdenke und daraus die Frames bastel... .
Da wäre es doch einfacher den GExperts Experten ComponentsToCode zu verwenden (http://www.gexperts.org/tour/components_to_code.html) oder das leider seit 2014 nicht mehr gepflegte Project https://sourceforge.net/projects/dfmtopas/.

cu Ha-Jö
  Mit Zitat antworten Zitat
Headbucket

Registriert seit: 12. Dez 2013
Ort: Dresden
172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Frame aus Package laden (ohne Runtime-Packages)

  Alt 9. Feb 2017, 09:35
Hallo hanvas,
(Push)
Gibt es inzwischen wirklich keine "einfache" Möglichkeit ein Frame aus einer DLL zu laden? Ich bin schon fast soweit, dass ich mir ein XML-Konstrukt ausdenke und daraus die Frames bastel... .
Da wäre es doch einfacher den GExperts Experten ComponentsToCode zu verwenden (http://www.gexperts.org/tour/components_to_code.html) oder das leider seit 2014 nicht mehr gepflegte Project https://sourceforge.net/projects/dfmtopas/.

cu Ha-Jö
Hier müsste ich mich ja trotzdem noch um die komplette Erstellung des Frames aus dem erstellte Code kümmern. Aber trotzdem gut zu wissen, dass es so etwas gibt.

Ich habe noch ein weiteres mal Google bemüht und bin dabei auf einen alten Thread von 2001 gestoßen: http://www.delphipages.com/forum/showthread.php?t=32939
Hier wurden keine Frames sondern Forms verwendet. Mit Forms geht das ganze natürlich deutlich einfacher - das hatte ich als erstes versucht. Ich bin aber nicht auf die Idee gekommen BorderStyle auf bsNone zu setzen und das Form an der entsprechenden Stelle einzufügen. Das ganze funktioniert bestens und ist dabei deutlich einfacher und übersichtlicher als die Umsetzung mit HTML. Von einem Frame ist es nun auch nicht mehr zu unterscheiden.

Grüße
Headbucket
  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 13:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz