![]() |
AW: Anwendungsinitialisierung in Thread auslagern
Ah, so war das, ich hatte es nicht mehr genau in Erinnerung. Danke :thumb:
|
AW: Anwendungsinitialisierung in Thread auslagern
btw.:
Ich glaube ich habe mal irgendwo aufgeschnappt, dass man dieses automatische Erstellen der Formulare deaktivieren kann, finde die Option aber nirgends. Gibt es so eine Option doch nicht, oder bin ich nur blind? :( |
AW: Anwendungsinitialisierung in Thread auslagern
Liste der Anhänge anzeigen (Anzahl: 1)
In den Projektoptionen unter Formulare. Links sind die automatisch erstellten, rechts die verfügbaren.
|
AW: Anwendungsinitialisierung in Thread auslagern
Zitat:
|
AW: Anwendungsinitialisierung in Thread auslagern
Das haben wir doch bereits geklärt (#10 und #11).
|
AW: Anwendungsinitialisierung in Thread auslagern
Zitat:
Delphi XE: Tools - Optionen - Umgebungsoptionen - VCL-Designer - Autom. Formulare und Datenmodule Die anderen starte ich jetzt nicht extra. |
AW: Anwendungsinitialisierung in Thread auslagern
:oops: Ach das war gemeint. Ich geh mich mal 'ne Runde schämen.
|
AW: Anwendungsinitialisierung in Thread auslagern
Zitat:
(habe es einfach erst hinterher gesehen ;) ) |
AW: Anwendungsinitialisierung in Thread auslagern
Zitat:
![]() In der .dpr steht dann bspw.
Delphi-Quellcode:
Lediglich der Aufruf
//Services
RegisterFactory(IdcXMLStore, TdcXMLStore).Singleton.Done; RegisterFactory(IdcSettings, TdcSettings).Singleton.Done; RegisterFactory(IdcLanguage, TdcLanguages).Singleton.Done; RegisterFactory(IdcObservers, TdcObservers).Singleton.Done; RegisterFactory(IdcTimer, TdcTimer).Done; // Komponenten RegisterFactory(IdcMainMenuPanel, TdcMainMenuPanel).Singleton.Done; RegisterFactory(IdcTileHeader, TdcTileHeader).Done; RegisterFactory(IdcTileView, TdcTileView).Singleton.Done; RegisterFactory(IdcListMenu, TdcListMenu).Done; RegisterFactory(IdcEasyItem, TdcEasyItem).Done; RegisterFactory(IdcTreeview, TdcTreeView).Done; Application.CreateForm(TdcMainForm, dcMainForm); // Forms & Frames RegisterFactory(IdcMainForm, dcMainForm).Singleton.Done; RegisterFactory(IdcFrameMenuStudio, TdcFrameMenuStudio).Done; RegisterFactory(IdcFrameMenuSettings, TdcFrameMenuSettings).Singleton.Done; Application.Run;
Delphi-Quellcode:
"tut" tatsächlich etwas, der Rest wird nur registriert.
Application.CreateForm
Die Deklaration von MainForm ist wie gewohnt, z.B.:
Delphi-Quellcode:
Und in einer Interface-Unit deklariere ich:
type
TdcMainForm = class(TBaseForm, IdcMainForm)
Delphi-Quellcode:
Wobei die Funktion nur kapselt:
type
IdcMainForm = interface(IdcWinControl) ['{344DCBC9-1B4B-48C6-B7C4-E5CC329EA658}'] function BaseForm : TWinControl; procedure ApplyStyle; end; function DI_MainForm : IdcMainForm;
Delphi-Quellcode:
Emballo kommt bei mir also nur an 2 Stellen in's Spiel: in der dpr mit
function DI_MainForm : IdcMainForm;
begin Result := DIService.Get<IdcMainForm>; end;
Delphi-Quellcode:
und in der Interface-Unit im Funktions-Aufruf mit
RegisterFactory
Delphi-Quellcode:
.
DIService.Get<IdcMainForm>
Lohn der Mühe ist nun, das ich überall, wo ich die Interface-Unit einbinde, ich mittels Funktionsaufruf auf die Forms usw. zugreifen kann, ohne deren Units einzubinden und mich um die Instanziierung und/oder Freigabe kümmern zu müssen. Das gibt übersichtlicheren Code und keine Cross-Referenzen. In diesem Beispiel nutze ich mehrere Service-Interfaces (DI_XXX) für das Einblenden eines Frames in das Hauptformular:
Delphi-Quellcode:
Dabei muss keine Unit für das MainForm (oder die Transition) eingebunden werden, den die "kennen" sich über die Interface-Deklarationen und Emballo liefert mir den Rest und kümmert sich auch (mit Delphi) um die Freigabe ;)
DI_BlendTransition.Start(DI_MainForm.BaseForm);
try DI_Stages.ActiveStageViewIndex := aButton.StageViewIndex; DoOnActiveStageItemChanged; finally DI_BlendTransition.Stop; end; Sorry für die etwas längere Antwort, aber ich wollte nicht nur eine Link posten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 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