AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Automatische Generierung der Formulare bei Serviceanwendung verhindern
Thema durchsuchen
Ansicht
Themen-Optionen

Automatische Generierung der Formulare bei Serviceanwendung verhindern

Ein Thema von t2000 · begonnen am 18. Apr 2019 · letzter Beitrag vom 19. Apr 2019
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.783 Beiträge
 
Delphi 12 Athens
 
#1

AW: Automatische Generierung der Formulare bei Serviceanwendung verhindern

  Alt 19. Apr 2019, 17:14
Du kannst auch ein normales Datenmodul anlegen und automatisch erzeugen lassen, in dem du dann alles notwendige ausführst. Das würde die Besonderheiten aus der DPR fernhalten.

Ich verwende diese Technik gern, wenn in einem VCL-Projekt z.B. das MainForm von den Umgebungsbedingungen abhängt oder bestimmte Module und/oder Forms nur unter bestimmten Bedingungen erzeugt werden sollen. Dann lasse ich in der DPR nur ein Loader-Datenmodul erzeugen, in dem dann alles notwendige passiert. Die Basisklasse dafür sieht dann in etwa so aus (nur die wesentlichen Methoden):
Delphi-Quellcode:
  TdmBasicLoader = class(TDataModule)
  private type
    TComponentList = TList<TComponent>;
  private
    FLoader: TComponentList;
    procedure AccessInstance(Lock: Boolean);
    procedure FreeModules;
  protected
    procedure AddComponent(Component: TComponent);
    procedure CreateModule(InstanceClass: TComponentClass; var Reference);
    procedure InternalCreateDataModules; virtual;
    procedure InternalCreateForms; virtual;
    procedure InternalFinalize; virtual;
    procedure InternalInitialize; virtual;
    procedure InternalShutDown; virtual;
    procedure InternalStartUp; virtual;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure ShutDown;
    procedure StartUp;
  end;

procedure TdmBasicLoader.StartUp;
begin
  InternalStartUp;
  InternalCreateDataModules;
  InternalCreateForms;
  InternalInitialize;
end;

procedure TdmBasicLoader.ShutDown;
begin
  InternalFinalize;
  InternalShutDown;
  FreeModules;
  FLoader.Clear;
end;

procedure TdmBasicLoader.CreateModule(InstanceClass: TComponentClass; var Reference);
begin
  Application.CreateForm(InstanceClass, Reference);
  AddComponent(TComponent(Reference));
end;
In den jeweiligen Projekten leite ich dann dieses Loader-Modul ab und überschreibe die Internal-Methoden mit den entsprechenden Aufrufen. Der DPR-Code sieht dann ungefähr so aus:
Delphi-Quellcode:
  Application.Initialize;
  Application.MainFormOnTaskBar := true;
  Application.CreateForm(TdmLoader, dmLoader);
  dmLoader.StartUp;
  Application.Run;
  dmLoader.ShutDown;
Durch das explizite ShutDown nach dem Run, kann ich genau die Reihenfolge für das Freigeben der Forms und Datenmodule kontrollieren und bin nicht auf das DoneApplication im finalization Teil der Vcl.Forms Unit angewiesen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von t2000
t2000

Registriert seit: 15. Dez 2005
Ort: NRW
249 Beiträge
 
Delphi 12 Athens
 
#2

AW: Automatische Generierung der Formulare bei Serviceanwendung verhindern

  Alt 19. Apr 2019, 18:16
Vielen Dank für daas Beispiel.
Ich denke, ich werde das mal so oder ähnlich ausprobieren.
Thomas
(Wir suchen eine(n) Entwickler(in) mit Ambitionen später ggf. die Softwarefirma zu leiten)
Aktuell nicht mehr. Aber ab vielleicht 2024/2025 wird das wieder sehr interessant!
  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 03:19 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