[Gelöst] Kommunikation von Singleton zu Splashscreen

Rund um die LCL und andere Komponenten

[Gelöst] Kommunikation von Singleton zu Splashscreen

Beitragvon charlytango » 17. Feb 2019, 11:15 [Gelöst] Kommunikation von Singleton zu Splashscreen

Hi!

Die Hürde zu den Singleton-Objekten hab ich scheinbar gemeistert. Nun stellt sich die Frage wie man Meldungen der in der Applikation nötigen Singleton-Objekte (z.B. Datenbankanbindung, Laden diverser Einstellungen etc) auf einer Splashscreen anzeigen kann.

Irgendwie bekomme ich die Infos schon angezeigt, aber ich möchte die SingletonObjekte auch in anderen Applikationen verwenden, die keine SplashScreen haben. Und daher suche ich nach einer Lösung möglichst ohne die Units mittels uses-Klausel zu "verheiraten".

Damit es nicht zu einfach wird, habe ich eine Unit uGlobalInit erstellt, in der die Singleton-Objekte zu einem bestimmten Zeitpunkt in bestimmter Reihenfolge erstellt und zerstört werden sollen. Ich möchte das nicht dem Compiler und meiner Schlampigkeit bei der uses-Reihenfolge überlassen.
Code: Alles auswählen
unit uGlobalInit;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, uSingleton;
 
procedure MyGlobalInit;
procedure MyGlobalDeInit;
 
implementation
 
procedure MyGlobalInit;
begin
  Settings;  //Erzeugt das Singleton Objekt für Einstellungswerte
  //Hier würde ich gerne Informationen von den Singleton-Objekten an die Splashscreen schicken
end;
 
procedure MyGlobalDeInit;
begin
  Settings.Free;
end;
 
end.


Irgendwie spukt mir da das Schlagwort Interface im Kopf rum (ohne zu wissen ob es der richtige Weg ist), aber trotz Recherche bekomme ich das nicht elegant auf die Reihe. Bitte um Hilfe oder leichte Schläge auf den Denkapparat ;)

project1.zip
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von charlytango am 22. Feb 2019, 10:11, insgesamt 1-mal geändert.
charlytango
 
Beiträge: 164
Registriert: 12. Sep 2015, 11:10
Wohnort: Wien
OS, Lazarus, FPC: Laz 2.0.3 FPC 3.2 | 
CPU-Target: Win 32Bit, 64bit
Nach oben

Beitragvon fliegermichl » 17. Feb 2019, 12:44 Re: Kommunikation von Singleton zu Splashscreen

Nimm doch einfach Events.

Dein Splashscreen besetzt fOnInitChange mit einer entsprechenden Procezedur.


Code: Alles auswählen
 
type
 TInitChangeEvent = procedure(Sender : TObject; State : integer) of object;
 
var
 fOnInitChange : TInitChangeEvent;
 
procedure TMyClass.GlobalInit;
var Done : integer;
begin
 Done := 0;
 if Assigned(fOnInitChange) then fOnInitChange(self, Done);
 ...
 if Assigned(fOnInitChange) then fOnInitChange(self, Done);
 ...
 if Assigned(fOnInitChange) then fOnInitChange(self, Done);
end;
 
fliegermichl
 
Beiträge: 312
Registriert: 9. Jun 2011, 08:42

Beitragvon charlytango » 22. Feb 2019, 10:10 Re: Kommunikation von Singleton zu Splashscreen

[quote="fliegermichl"]Nimm doch einfach Events.
Dein Splashscreen besetzt fOnInitChange mit einer entsprechenden Procezedur.
[code=laz] 

Danke f den Hinweis, so "einfach" wars dann f mich doch nicht, ich konnte allerdings eine flexible und zufriedenstellende Lösung erreichen.

ich wollte das .lpr file nicht zumüllen und die nötigen Singletons in einer Prozedur kontrolliert starten. Trotzdem sollten die Singleton-Objekte bei Vorghandensein einer Splashscreen ihre Messages auf der Splashscreen anzeigen oder auch ohne Splashscreen funktionieren. Das Empfohlene Event ist daher in die Singleton-Objekte gewandert.

Wen es Interessiert und wer es brauchen kann findet meine Lösung ohne Gewähr in der beigefügten .ZIP Datei
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
charlytango
 
Beiträge: 164
Registriert: 12. Sep 2015, 11:10
Wohnort: Wien
OS, Lazarus, FPC: Laz 2.0.3 FPC 3.2 | 
CPU-Target: Win 32Bit, 64bit
Nach oben

• Themenende •

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

cron
porpoises-institution
accuracy-worried