AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

RuntimePackage laden/verwenden

Ein Thema von oki · begonnen am 12. Mär 2009 · letzter Beitrag vom 19. Mär 2009
 
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#4

Re: RuntimePackage laden/verwenden

  Alt 12. Mär 2009, 19:31
Hi schmia,

der Weg der Vererbung der Formulare ist erst mal der, den ich eingeschlagen habe. In der Regel liegen kaum weitere Komponenten auf den Basisformularen. Sie dienen eigentlich als spezialisierte Vorlagen, um das Erstellen von Anwendungen einfacher zu gestalten und ein durchgängiges Grunddesign sicher zu stellen. Natürlich neben weiteren Grundfunktionalitäten.

Für andere Techniken bin ich immer offen. Ich fand halt keine passenden für die gewünschten Anforderungen. Für den Bereich der Vererbung von Formularen gebe ich dir vollkommen recht. Damit muss ich leben.

Das aktuelle Problem kommt eigentlich aus einer anderen Ecke. Ich will für den internen Gebrauch ein Tool erstellen, in das man die spezialisierten Packages laden kann. Das Basispackage soll eigentlich nicht mehr verändert werden. Damit ich das Tool nicht jedesmal neu kompilieren muss wenn ein neues Package vorliegt will ich diese nachladen können. Dabei muss ich aber über die Klasseninformationen gehen.

Beispiel. Ein neues Formular liegt im neuen Spezialpackage vor, das ein Nachfahre vom BaseForm in Basepackage ist. Wenn ich dieses in meinem Tool creieren und anzeigen will mache ich folgendes:

Delphi-Quellcode:
procedure TSettingsMainForm.TATBPLFormsLoad;
var
  AFormClass: TPersistentClass; // hier könnte man auch TFormClass nehmen, spaart man weiter unten das Casten
  AForm : TForm;
  FormList: TStringList;
  Counter: Integer;
begin
  if FBPLModule <> 0 then
    TATBPLFormsUnload;
  if not FileExists(FSettingsProject.TATBPLName) then
    Exit;
  FBPLModule := LoadPackage(FSettingsProject.TATBPLName);
  if FBPLModule <> 0 then begin
    @GetBPLFormClasses := GetProcAddress(FBPLModule, 'GetBPLFormClasses');
    if @GetBPLFormClasses = nil then
      Exit;
    try
      FormList := TStringList.Create;
      GetBPLFormClasses(FormList); // Liste aller Formularklassen aus dem Package holen
      for Counter := 0 to FormList.Count - 1 do begin
        AFormClass := GetClass(FormList.Strings[Counter]);
        if Assigned(AFormClass) then begin
          Application.CreateForm(TComponentClass(AFormClass), AForm);
          AForm.Show;
        end;
      end;
    finally
      FreeAndNil(FormList);
    end;
  end;
end;
Entladen wird das Package an anderer Stelle.

Also, wenn du andere Ideen hast, gerne her damit. Sollte mein Anwendungsfall nicht verständlich genug sein, liefer ich mehr.

Da das mit dem den Laufzeitpackages jetzt aber wohl klar ist und die Sache prinzipiell klappen müßte, würde ich das auf diesem Weg schon gerne hin bekommen.

Gruß oki
42
  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 19:25 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