AGB  ·  Datenschutz  ·  Impressum  







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

Anwendungsinitialisierung in Thread auslagern

Ein Thema von Codehunter · begonnen am 17. Aug 2011 · letzter Beitrag vom 17. Aug 2011
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#11

AW: Anwendungsinitialisierung in Thread auslagern

  Alt 17. Aug 2011, 14:02
Ah, so war das, ich hatte es nicht mehr genau in Erinnerung. Danke
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#12

AW: Anwendungsinitialisierung in Thread auslagern

  Alt 17. Aug 2011, 14:25
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?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#13

AW: Anwendungsinitialisierung in Thread auslagern

  Alt 17. Aug 2011, 14:28
In den Projektoptionen unter Formulare. Links sind die automatisch erstellten, rechts die verfügbaren.
Miniaturansicht angehängter Grafiken
formularverwaltung.jpg  
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.926 Beiträge
 
Delphi 12 Athens
 
#14

AW: Anwendungsinitialisierung in Thread auslagern

  Alt 17. Aug 2011, 15:23
class function wird Delphi 7 wohl nicht nehmen wollen
doch!
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#15

AW: Anwendungsinitialisierung in Thread auslagern

  Alt 17. Aug 2011, 15:30
Das haben wir doch bereits geklärt (#10 und #11).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Anwendungsinitialisierung in Thread auslagern

  Alt 17. Aug 2011, 16:26
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?
Delphi 7: Tools - Umgebungsoptionen - Designer - Autom. Formulare und Datenmodule
Delphi XE: Tools - Optionen - Umgebungsoptionen - VCL-Designer - Autom. Formulare und Datenmodule

Die anderen starte ich jetzt nicht extra.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#17

AW: Anwendungsinitialisierung in Thread auslagern

  Alt 17. Aug 2011, 16:29
Ach das war gemeint. Ich geh mich mal 'ne Runde schämen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.926 Beiträge
 
Delphi 12 Athens
 
#18

AW: Anwendungsinitialisierung in Thread auslagern

  Alt 17. Aug 2011, 16:30
Das haben wir doch bereits geklärt (#10 und #11).
Na und. Fürs klugscheißen gibt es kein "Das haben wir doch bereits geklärt" .

(habe es einfach erst hinterher gesehen )
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
neo4a

Registriert seit: 22. Jan 2007
Ort: Ingolstadt
362 Beiträge
 
Delphi XE2 Architect
 
#19

AW: Anwendungsinitialisierung in Thread auslagern

  Alt 17. Aug 2011, 19:35
Bernhard hat schon vollkommen recht: Die sauberste Lösung wäre die dynamische Erzeugung der Formulare bei Bedarf. Leider kann man gewachsene Projekte nur recht schwer auf soetwas umstellen. Bei neuen Projekten werde ich das aber in Zukunft so machen.
Auch bei der Umstellung existierender Projekte kann ich Dir einen Ansatz zur Prüfung empfehlen, den ich derzeit mittels Emballo bereits umsetze: Hier nimmt Dir das Framework das Instanziieren ab und Du greifst auf Deine Formulare und Service-Komponenten nur noch über Funktionen zu. Das passiert über Interfaces, so dass es keine Unit-Referenzen erfordert.

In der .dpr steht dann bspw.
Delphi-Quellcode:
  //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;
Lediglich der Aufruf Application.CreateForm "tut" tatsächlich etwas, der Rest wird nur registriert.

Die Deklaration von MainForm ist wie gewohnt, z.B.:
Delphi-Quellcode:
type
  TdcMainForm = class(TBaseForm, IdcMainForm)
Und in einer Interface-Unit deklariere ich:

Delphi-Quellcode:
type
  IdcMainForm = interface(IdcWinControl)
    ['{344DCBC9-1B4B-48C6-B7C4-E5CC329EA658}']
    function BaseForm : TWinControl;
    procedure ApplyStyle;
  end;
  function DI_MainForm : IdcMainForm;
Wobei die Funktion nur kapselt:
Delphi-Quellcode:
function DI_MainForm : IdcMainForm;
begin
  Result := DIService.Get<IdcMainForm>;
end;
Emballo kommt bei mir also nur an 2 Stellen in's Spiel: in der dpr mit RegisterFactory und in der Interface-Unit im Funktions-Aufruf mit 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:
  DI_BlendTransition.Start(DI_MainForm.BaseForm);
  try
    DI_Stages.ActiveStageViewIndex := aButton.StageViewIndex;
    DoOnActiveStageItemChanged;
  finally
    DI_BlendTransition.Stop;
  end;
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

Sorry für die etwas längere Antwort, aber ich wollte nicht nur eine Link posten.
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 15:31 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