Bonjour,

Défi du dimanche, utiliser un splashscreen pour mon application bureau. Après avoir lu ce billet http://www.uweraabe.de/Blog/2016/01/...in-firemonkey/ il semble donc qu'il ne faille pas faire comme avec VCL c'est-à-dire directement dans le source du projet tel qu'indiué dans la FAQ pour VCL
Qu'à cela ne tienne puisque le billet est fort détaillé (et les sources téléchargeables) il ne faut pas longtemps pour réaliser le "défi".

Maintenant, la question comment intégrer mon datamodule dans tout ça, puisque c'est ce dernier qui ralenti mon démarrage.

J'ai tenté de le créer avant la forme principale mais ça plante; première hypothèse l'endroit où est déclaré l'utilisation de mon DataModule Interface ou Implémentation.
Jusqu'à présent la déclaration se trouvait dans la partie implémentation

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
implementation 
 
uses UnitDatas;
 
procedure TMain.FormCreate(Sender: TObject);
var i : integer;
begin
 Liste:=TDictionary<String,TForm>.Create;
 if ParamCount>0 then
   begin
     for i:=1 to ParamCount do
       btnEditFr3.Visible:=SameText(ParamStr(i),'-f');
   end;
// je vais insérer ici la création du datamodule
 if not Datas.ConnexionsOk then  btnparametresClick(Sender);
end;
Comme l'unité était créée avant la forme principale cela fonctionnait.
En insérant la création du TDataModule Datas:=TDatas.Create(Application); cela fonctionne aussi

Comment procéder si je voulais créer le datamodule non pas à partir de la forme affichée mais à partir de mon unité SplashScreen ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
var
  FormSplash: TFormSplash;

implementation

uses
  System.Devices, UnitDatas, MainUnit;

{$R *.fmx}

resourcestring
  SNotSuitableForDevice = 'L''application n''est pas prévue pour de type d''appareil!';

procedure TFormSplash.FormCreate(Sender: TObject);
begin
  StartupTimer.Enabled := false;
  StartupTimer.Interval := 500; // modifiable
end;

procedure TFormSplash.LoadMainForm;
type
  TFormClass = class of TForm;
var
  form: TForm;
  formClass: TFormClass;
begin
  formClass := nil;
  case TDeviceInfo.ThisDevice.DeviceClass of
    TDeviceInfo.TDeviceClass.Desktop: formClass := TMain;
// autres appareils
  end;
/// Où créer le DataModule ?
  if formClass <> nil then begin
    form := formClass.Create(Application);
    form.Show;
    Application.MainForm := form;
  end
  else begin
    ShowMessage(SNotSuitableForDevice);
  end;
  Close;
end;