IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Contrôle Splash particulier [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre actif
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 288
    Points : 288
    Points
    288
    Par défaut Contrôle Splash particulier
    Bonjour,

    Je me casse la tête depuis un moment sur le contrôle d'une fenêtre Splash. Les exemples que j'ai vu sont basés sur un Timer dont le temps est prédéterminé.
    J'ai un certain nombre d'opérations qui doivent se dérouler avant le lancement de l'application. Ce sont des opérations de vérification et de maintenance ou l'utilisateur peut intervenir.
    Tant que l'utilisateur n'a pas validé le contrôle de ces opérations, la fenêtre principale de l'application ne doit pas se lancer ou apparaitre.
    J'ai choisi de mettre ces contrôles avant le lancement de l'application car une fois les paramètres et maintenances effectués, je peux détruire le Splash qui est volumineux en terme de mémoire et de code.

    J'ai modélisé mon problème ci-dessous:
    Nom : Aide9.jpg
Affichages : 125
Taille : 44,6 Ko

    Le TimerFictif n'existe pas dans mon application réelle car c'est le temps réel d'éxécution des tâches. A chacune des 3 étapes (plus d'une dizaine pour l'instant dans mon projet...), je mets un interval de temps différent...
    Le Timer Attente est un temps minimum de visualisation de l'étape de vérification et ne lance pas l'étape suivant tant que ce temps fixe n'est pas terminé, même si la vérification informatique est plus rapide, ce qui est le cas pour la pluspart...

    Je n'ai pas encore gérer tout le code car je n'arrive pas à faire apparaître la SplashForm avant la fenêtre principale qui elle s'affiche.
    Voici le code de départ:
    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
     
    program project1;
     
    {$mode objfpc}{$H+}
     
    uses
      {$IFDEF UNIX}
      cthreads,
      {$ENDIF}
      {$IFDEF HASAMIGA}
      athreads,
      {$ENDIF}
      Interfaces, // this includes the LCL widgetset
      Forms, unit1, unit2
      { you can add units after this };
     
    {$R *.res}
    begin
      RequireDerivedFormResource := True;
      Application.Scaled := True;
      Application.Initialize;
      FormSplash := TFormSplash.Create(Application);
      FormSplash.Show;
      FormSplash.Update;
      Application.CreateForm(TForm1, Form1);
      FormSplash.Close;
      Application.Run;
    end.
    Je ne comprends pas pourquoi la fiche splash n'apparait pas! j'ai essayé plusieurs choses sans succès. Voici le code de l'unité Splash:

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
     
    unit Unit2;
     
    {$mode ObjFPC}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls, StdCtrls,
      ExtCtrls;
     
    type
     
      { TFormSplash }
     
      TFormSplash = class(TForm)
        PB1 : TProgressBar;
        PB2 : TProgressBar;
        PB3 : TProgressBar;
        StaticText1 : TStaticText;
        StaticText2 : TStaticText;
        StaticText3 : TStaticText;
        TimerAttente : TTimer;
        TimerFictif : TTimer;
        procedure FormActivate(Sender : TObject);
        procedure FormCreate(Sender : TObject);
        procedure TimerFictifTimer(Sender : TObject);
      private
     
      public
        nEtape    : integer;
        FinEtap,
        FinSplash : boolean;
        procedure DoVerifEtape(nEtap : integer);
      end;
     
    var
      FormSplash : TFormSplash;
     
    implementation
     
    {$R *.lfm}
     
    { TFormSplash }
     
    procedure TFormSplash.FormCreate(Sender : TObject);
    begin
      nEtape       := 1;
      FinEtap      := false;
      FinSplash    := false;
      PB1.Position := 0;
      PB2.Position := 0;
      PB3.Position := 0;
      TimerFictif.Enabled  := False; // simule la durée d'éxécution d'une étape
      TimerFictif.Interval := 50;
    end;
     
    procedure TFormSplash.TimerFictifTimer(Sender : TObject);
    begin
      if not FinSplash then Case nEtape of
       1: begin {étape de vérification n°1}
            PB1.Position := PB1.Position + PB1.Step;
            if PB1.Position >= 100 then nEtape := 2;
          end;
       2: begin {étape de vérification n°2}
            PB2.Position := PB2.Position + PB2.Step;
            if PB2.Position >= 100 then nEtape := 3;
          end;
       3: begin {étape de vérification n°3}
            PB3.Position := PB3.Position + PB3.Step;
            if PB3.Position >= 100 then
            begin
              nEtape := 0;
              FinSplash := True;
            end;
          end;
      end;
     
    end;
     
    procedure TFormSplash.FormActivate(Sender : TObject);
    begin
      DoVerifEtape(nEtape);
    end;
     
    Procedure TFormSplash.DoVerifEtape(nEtap : integer);
    begin
      Case nEtap of
       1: begin {étape de vérification n°1}
            With TimerFictif do
            begin
              Interval := 50;
              Enabled  := True;
            end;
          end;
       2: begin {étape de vérification n°2}
            With TimerFictif do
            begin
              Interval := 30;
              Enabled  := True;
            end;
          end;
       3: begin {étape de vérification n°3}
            With TimerFictif do
            begin
              Interval := 100;
              Enabled  := True;
            end;
          end;
      end;
     
    end;
     
    end.
    La FormSplah existe et s'exécutemais ne s'affiche pas!

    Je vous met en project1.zip, le code de l'ensemble, ça sera sans doute plus simple de voir où je me suis planté...

    Merci pour votre aide
    Je programme en Lazarus 3.2.2 sous windows 10 pro

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 300
    Points
    11 300
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    La fiche principale est créée dans le dpr au lieu de l'être dans celle d'attente, une fois celle-ci terminée.
    Autre solution : que la fiche d'attente soit modale, se fermant au bout des vérifications, et le code du dpr reprenant avec la création de celle principale.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre actif
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 288
    Points : 288
    Points
    288
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Bonjour,
    La fiche principale est créée dans le dpr au lieu de l'être dans celle d'attente, une fois celle-ci terminée.
    Autre solution : que la fiche d'attente soit modale, se fermant au bout des vérifications, et le code du dpr reprenant avec la création de celle principale.
    Bonjour Toulourou, merci pour ta réponse.

    Euh, je ne suis pas sûr de comprendre! Tu veux dire que lorsque j'ai créé l'application, il aurait fallu que je déclare l'unité 1 (la première créée par l'appli) comme étant la FormSplash ?
    A+
    Je programme en Lazarus 3.2.2 sous windows 10 pro

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 300
    Points
    11 300
    Billets dans le blog
    6
    Par défaut
    FormSplash := TFormSplash.Create(Application); crée la splash comme une fiche standard, que tu rends visible ensuite par un Show, non bloquant, le code du dpr continuant de se dérouler.
    Application.CreateForm(TForm1, Form1); crée ensuite la fiche principale de ton application, qui va s'afficher puis fermer ta splash au FormSplash.Close; avant que les vérifications ne soient faites.
    Si tu :
    - fais un ShowModal de ta splash,
    - rafraichis ta fiche dans ses boucles de tests,
    - lui affecte un ModalResult à la fin des tests,
    le cours du dpr reprendra après, et elle aura joué son rôle.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 335
    Points : 4 158
    Points
    4 158
    Par défaut
    Bonjour,

    J'ai regardé le code. Celui du projet qui ne doit pratiquement pas être altéré n'est pas dans un état sain (voir les commentaires de tourlourou).

    La fiche splash doit être appelée par la fiche principale et pas dans son OnCreate car la fiche splash n'existe pas encore (plutôt dans le OnActivate).

    Comme tourlourou te l'a indiqué il faut faire un appel showmodal pour éviter que l'utilisateur puisse revenir sur la fiche principale avant que les initialisations soient terminées. Mais cela ne suffit pas. Il faut également éviter que l'utilisateur puisse fermer la splash avant la fin (OnCloseQuery).

    Remarque : la fiche principale peut être invisible pendant l'opération d'initialisation.

    Comme le programme était trop bancal et que Lazarus avait quelques peines à s'y retrouver (et moi aussi), j'ai créé un squelette sur lequel j'ai greffé le code original : SplashProject.zip.
    Il y a des éléments qui ne servaient à rien que j'ai sauvagement retirés. Par exemple, le code initialise des propriétés déjà initialisées dans le composant.

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  6. #6
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Guesset : dans ton projet, la fiche "SplashForm" est de type "fsNormal" Si tu la changes en "fsSplash", alors ça ne fonctionne plus.

    J'ai fait différents essais (Windows et Ubuntu) avec seulement une fenêtre de type "fsSplash" : je n'ai jamais réussi à la visualiser.

    A quoi sert le mode "fsSplash", qu'apporte-t-il ?

    Cordialement.

    Pierre.

  7. #7
    Membre actif
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 288
    Points : 288
    Points
    288
    Par défaut
    Merci à Toulourou et Guesset
    Je mets résolu
    ChPr, : J'ai fait différents essais (Windows et Ubuntu) avec seulement une fenêtre de type "fsSplash" : je n'ai jamais réussi à la visualiser.
    Mais c'est vrai que comme ChPr, je me demande bien à quoi sert le mode fenêtre de type "fsSplash"
    A+
    Je programme en Lazarus 3.2.2 sous windows 10 pro

  8. #8
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 421
    Points : 1 103
    Points
    1 103
    Par défaut
    Bonjour,

    Citation Envoyé par Jlmat Voir le message
    Mais c'est vrai que comme ChPr, je me demande bien à quoi sert le mode fenêtre de type "fsSplash"
    Si j'en crois l'aide de LAZARUS (juste en bas dans l'inspecteur d'objets) à faire une fenêtre sans bordures (et donc sans rien pour la fermer ou la réduire...)

    Cordialement

  9. #9
    Membre actif
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 288
    Points : 288
    Points
    288
    Par défaut
    Bonjour acaumes,

    Citation Envoyé par acaumes Voir le message
    Bonjour,

    Si j'en crois l'aide de LAZARUS (juste en bas dans l'inspecteur d'objets) à faire une fenêtre sans bordures (et donc sans rien pour la fermer ou la réduire...)

    Cordialement
    Ben oui, mais avec la propriété borderStyle de type bsNone, on n'a pas non plus de bordure et rien pour non plus pour fermer, donc !?! ... Je m'attendais à une facilité justement pour gérer la SplashForm, mais finalement c'est comme sur Dephi... Bah, on va pas s'en plaindre!

    j'intègre la solution de nos amis Tourlourou et Guesset, si j'ai un problème je reviens

    A+
    Je programme en Lazarus 3.2.2 sous windows 10 pro

  10. #10
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 335
    Points : 4 158
    Points
    4 158
    Par défaut
    Bonjour,

    Une vraie fenêtre Splash est seulement un étendard de bienvenue qui reprend souvent le contenu de la fenêtre A propos. Son potentiel d'interaction est quasi nul.

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  11. #11
    Membre actif
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 288
    Points : 288
    Points
    288
    Par défaut
    re Bonjour,

    Bon problème...
    J'ai essayé de transposer les solutions proposées par Tourlourou et Guesset, mais j'obtiens des messages d'Erreur...
    1. j'ai reproduit le DPR tel que vous le proposez et j'ai simplifié ma Fiche Principale d'application pour qu'elle ne fasse appel qu'à la form simplifié de Splash remodifié (SplashForm de uSplash) proposée par Guesset.
    2. Cependant l'Appel dans le Activate de la Fiche principal plante à la ligne : SplashForm.ShowModal;, j'obtiens les messages suivant:

    2.1 : message sur l'Appli d'origine Budget4 (image du haut)

    2.2 : message sur nouvelle nommée Budget5 , appli (juste la fiche principale à l'identique de l'exemple de Guesset) et la splashForm de l'exemple qui fonctionne dans le zip de Guesset.

    Nom : Aide10.jpg
Affichages : 65
Taille : 36,7 Ko

    Je n'y comprends rien, j'ai tout revérifié, propriétés, unités utilisées... Serait-ce dans le paramétrage des options du projet?

    A+
    Je programme en Lazarus 3.2.2 sous windows 10 pro

  12. #12
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 335
    Points : 4 158
    Points
    4 158
    Par défaut
    Bonjour Jlmat,

    Citation Envoyé par Jlmat Voir le message
    J'ai essayé de transposer les solutions proposées par Tourlourou et Guesset, mais j'obtiens des messages d'Erreur...
    1. j'ai reproduit le DPR tel que vous le proposez et j'ai simplifié ma Fiche Principale d'application pour qu'elle ne fasse appel qu'à la form simplifié de Splash remodifié (SplashForm de uSplash) proposée par Guesset.
    2. Cependant l'Appel dans le Activate de la Fiche principal plante à la ligne : SplashForm.ShowModal;,
    ... Serait-ce dans le paramétrage des options du projet?
    Ne sachant ce que transposer veut dire...

    Les noms proposés ne servent qu'à se repérer plus rapidement. Avec 10 unités nommées unit1, unit2... cela devient ingérable.

    Quand on change les noms, il faut faire une sauvegarde pour que cela soit pris en compte et vérifier que les nouveaux noms figurent bien dans les unités qui utilisent les entités renommées (y compris dans le code du projet). Par acquis de conscience, vérifier également les noms dans le .lpi .

    Manifestement le code essaie d'activer une fenêtre Splash qui n'existe pas (ou pas encore). Il doit y avoir des scories dans le fichier projet. Le comparer avec celui du zip (généré automatiquement donc a priori bon ). Le principe est simple, considérer que ce qui est différent (y compris l'ordre des lignes) n'est pas correct.

    Les options du projet n'y sont a priori pour rien. Cependant faire un "Nettoyer et construire" pourrait améliorer un peu les choses (parfois des défauts persistent avec les compilations rapides). Mais je ne pense pas que cela soit en cause ici.

    Salut
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  13. #13
    Membre actif
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 288
    Points : 288
    Points
    288
    Par défaut
    @ Guesset,

    Par transposer, j'ai voulu dire transposer simplement le mécanisme que vous m'avez proposé dans mon application, c'est à dire que j'ai mis dans un premier temps entre ''{...}" tout le code de la procédure CreateForm de la fiche principale de mon application pour qu'aucune autre procedure ne se lance même par défaut, sauf la position de certains contrôles. Au lieu de ma fenêtre Splash d'origine qui est beaucoup trop lourde, j'ai importé la Fenêtre Splash que vous avez réctifié plus légère et je n'ai rien retoucher...

    Le code que vous m'avez donné dans un précédent post fonctionne chez moi, c'est pour ça qu'il y a quelque chose qui m'échappe encore.

    Mais le problème n'est pas dans le mécanisme que vous m'avez rappelé avec Tourlourou puisque pris dans votre Zip, ça marche.
    J'ai donc recréé de zéro une nouvelle appli par le menu de Lazarus que j'ai mis dans un autre dossier.
    d'où la 2ème erreur indiquée... => il y a anguille sous roche, quelque chose dans la création de l'appli qui m'échappe.

    Je donne le zip, l'essai qui a produit l'erreur... splash2.zip

    Il serait intéressant de voir si ça marche chez vous!

    Merci beaucoup pour votre aide.
    Fichiers attachés Fichiers attachés
    Je programme en Lazarus 3.2.2 sous windows 10 pro

  14. #14
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 300
    Points
    11 300
    Billets dans le blog
    6
    Par défaut
    Bonjour, l'erreur semble provenir de l'ordre de création des fiches : la splash doit l'être avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    begin
      RequireDerivedFormResource := True;
      Application.Scaled := True;
      Application.Initialize;
        Application.CreateForm(TForm5, Form5); // dans son OnActivate, va appeler SplashForm pas encore instanciée
        Application.CreateForm(TSplashForm,SplashForm);
      Application.Run;
    end.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  15. #15
    Membre actif
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 288
    Points : 288
    Points
    288
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Bonjour, l'erreur semble provenir de l'ordre de création des fiches : la splash doit l'être avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    begin
      RequireDerivedFormResource := True;
      Application.Scaled := True;
      Application.Initialize;
        Application.CreateForm(TForm5, Form5); // dans son OnActivate, va appeler SplashForm pas encore instanciée
        Application.CreateForm(TSplashForm,SplashForm);
      Application.Run;
    end.
    @Tourlourou,

    Non, je sais que c'est ce qui se pratique par certains exemples sous Delphi, mais ça ne marche pas ici, avant ou après, sous Lazarus....

    Je remarque aussi que les deux auteurs de livres sur Lazarus ne donnent aucun exemple sur la splash Form, il y a peut-être un Bug non résolu sur le code de la FPC, mais ça n'explique pas pourquoi le code de Guesset marche...

    Je viens de faire un essai en ignorant l'erreur et là ça marche, ce qui voudrait dire que c'est dans les paramètres de l'Appli... Pff je cherche où pour retirer cet affichage d'erreur? Dans débogages? :

    Nom : Aide11.jpg
Affichages : 57
Taille : 103,2 Ko
    Je programme en Lazarus 3.2.2 sous windows 10 pro

  16. #16
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 421
    Points : 1 103
    Points
    1 103
    Par défaut
    Citation Envoyé par Jlmat Voir le message
    @Tourlourou,

    Non, je sais que c'est ce qui se pratique par certains exemples sous Delphi, mais ça ne marche pas ici, avant ou après, sous Lazarus....
    En fait je crois qu'il faut ceci (avec commentaires)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      Application.Scaled := True;
      RequireDerivedFormResource := True;
      Application.Initialize;
      SplashScreen := TSplashScreen.Create(Application); { Création la fenêtre de Splash               }
      SplashScreen.Show;                                 { Affichage de cette fenêtre                  }
      SplashScreen.Update;                               { forçage de l'affichage de la fenêtre        }
                                                         { sinon elle n'apparaît que partiellement     }
      SplashScr := SplashScreen.Handle;
      Application.CreateForm (TMotPlusLong, MotPlusLong );
      SplashScreen.Close;                                { Fermeture de la fenêtre de Splash           }
                                                         { elle n'est plus utile quand la forme        }
                                                         { principale est en place                     }
      SplashScreen.Release;                              { Autorisation de détruire la fenêtre         }
      Application.Run;
    En fait J'ai piqué ceci sur un site LAZARUS et ça fonctionne bien sous LAZARUS/Windows (Je ne sais pas pour les autres)

  17. #17
    Membre actif
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 288
    Points : 288
    Points
    288
    Par défaut
    @ Acaumes,

    Oui, ça ressemble au zip de mon premier post #1.
    En appliquant le code que vous proposez, j'ai toujours un message d'erreur bien qu'en arrière plan, ça fonctionne et lorsque je fais OK sur le message, ça continue sans problème...
    Sauf que le message indique qu'il y a risque de corruption... Grr

    Voici l'erreur obtenu avec votre code:
    Nom : Aide12.jpg
Affichages : 56
Taille : 34,1 Ko

    Je pense qu'il y a un paramétrage de l'appli qui doit être différente de chez vous. J'aimerai bien éclaircir ce point. Je pense que c'est dans le Menu Outils/Options mais où exactement???


    Je vous mets le zip de mon dernier test: SplashTest3.zip

    Bonne soirée
    Fichiers attachés Fichiers attachés
    Je programme en Lazarus 3.2.2 sous windows 10 pro

  18. #18
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 421
    Points : 1 103
    Points
    1 103
    Par défaut
    Comme le dit le message d'erreur la propriété Visible de ma forme est à faux

  19. #19
    Membre actif
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 288
    Points : 288
    Points
    288
    Par défaut
    Citation Envoyé par acaumes Voir le message
    Comme le dit le message d'erreur la propriété Visible de ma forme est à faux
    Désolé acaumes, j'ai oublié de préciser dans mon message précédent que ce message est incompréhensible, car justement, j'ai changé les propriétés visibles de la fiche et rien ne change.
    ça ne change rien.

    Essayez mon programme Test et dites moi ce qu'il en est! Il faut qu'on parte des mêmes codes dans nos remarques, sinon on finit par se perdre...

    J'ai passé beaucoup de temps avant de poser cette discussion. J'aime bien comprendre ce que je fais... Sinon, si ça n'avance pas, je vais tout mettre comme au début dans une fiche superposée à ma Fiche principale...
    C'est pas très optimal mais bon...

    Il manque beaucoup de codes d'exemples dans Lazarus malgré le bon livre de Alcatiz et Gilles Vasseur


    A+
    Je programme en Lazarus 3.2.2 sous windows 10 pro

  20. #20
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 335
    Points : 4 158
    Points
    4 158
    Par défaut
    Bonjour,

    J'ai regardé le code.
    • Le .lpi comportait des trucs bizarres (référence à mainform par exemple). Je l'ai supprimé et ai collé ensemble unités et projet puis ai demandé de reconstruire le lpi.
    • J'ai mis un beep dans le create du splash. Il bipe trop tard mais il bipe.
    • Le projet n'avait pas de référence .lrs. Je l'ai ajouté.

    Mais problème toujours vivant.

    J'ai crée un test : if SplashForm <> nil then SplashForm.ShowModal; Bien sûr, je n'avais plus le splash mais je voulais savoir s'il y avait d'autres problèmes. Et il y en avait. Il n'aime pas du tout être crée à l'état visible. Donc visible := false dans les propriétés.

    Fatigué j'ai crée une petite procédure qui se suicide si elle arrive à appeler le splash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm5.AppIdle(Sender: TObject; var Done: Boolean);
    begin
       if SplashForm <> nil then begin
          Application.OnIdle := nil;
          SplashForm.ShowModal;
          end;
    end;
    La procédure est affectée dans le TForm5.FormCreate : Application.OnIdle := @AppIdle;.

    Pas élégant mais ça marche .

    En écrivant ces lignes, je me demande s'il ne faudrait pas créer la splash avant la fiche principale mais en prenant soin de la déclarer invisible. Peut-être que la création de fiches par le programme considère que la première fiche visible est la principale. Auquel cas, la splash resterait secondaire mais déjà disponible pour la fiche principale quand celle-ci s'éveillera. A tester. Fait : ça marche mais le Splash devient d'office la fiche principale et sa fin entraîne celle de l'application

    Il reste une interrogation : pourquoi je n'ai pas eu ce problème ? Je crois qu'il y a une information de construction cachée. Trop bien cachée pour moi.

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comment faire un splash screen pour son application?
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/04/2007, 14h28
  2. Réponses: 2
    Dernier message: 05/01/2004, 11h23
  3. affichage de controles sur un splash screen
    Par shrek dans le forum C++Builder
    Réponses: 3
    Dernier message: 20/11/2003, 19h59
  4. Select particulier .
    Par hamed dans le forum Langage SQL
    Réponses: 9
    Dernier message: 17/11/2003, 15h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo