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

Langage Delphi Discussion :

Un splash screen "Universel"?


Sujet :

Langage Delphi

  1. #1
    Membre régulier Avatar de newbie57
    Inscrit en
    Juin 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juin 2005
    Messages : 124
    Points : 92
    Points
    92
    Par défaut Un splash screen "Universel"?
    Bonjour à tous,

    Voilà je suis confronté à un petit soucis. J'ai créé un "splashscreen" pour mon application qui permet d'ouvrir une base de données, d'autentifier la personne, de voir ses autorisations, etc etc... et s'il se passe quelque chose d'anormal, j'arrete ces tests et je laisse la possibilité à l'utilisateur de créer un rapport qu'il imprime pour la hotline et il quitte l'application.

    Tout celà fonctionne bien, très bien même. Mais... (voilà il fallait qu'il y ait un "mais" ) mon boss a trouvé cette idée super (surtout pour la hotline) qu'il souhaite que ce "splashscreen" soit universel pour toutes leurs applications.

    Le problème dans tout ça c'est que leurs applications sont plus ou moins différentes entre elles, que mes tests utilisent plusieurs requêtes, que ma base de données est differente en fonction de l'application et que les formes principales qui sont appelés après ces tests ont des noms differents.

    Je bloque donc sur le fait de ne pas savoir ou stocker ces différentes requêtes, ces noms de connections (avec mdp) et ces pages principales qui sont appelées juste après.

    Quelqu'un aurait-il une petite idée en tête à tout hazard? Moi j'avais pensé à créer un composant (en fait un pour chaque appli) que je mettrai dans le "splashscreen" et qui regrouperait chacun les requêtes sql etc etc.. mais novice en la matière, je ne sais pas si c'est une bonne idée ou pas.

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 534
    Points : 25 082
    Points
    25 082
    Par défaut
    Le Splash Screen n'est juste qu'une fenêtre de Patience, ça pourrait être une fenêtre générique (pas besoin de composant, tu peux aussi faire un ensemble d'unité commun contenant quelques classes ...)

    dans le Program (DPR)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    begin
      Application.Initialize();
      if TApplicationStarter.Start() then
        Application.Run()
      else
        Error();
    end;
    ensuite, tu défini une classe TApplicationStarterClass, en fait c'est juste un modèle de classe, qui utilise un 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
    type
      TApplicationStarter = class(...)
      private
        Splash: TSplashScreen; 
      protected
        function InternalStart(): Boolean; virtual; 
      public
        class function Start(): Boolean;  
      end;
     
      TApplicationStarterClass = class of TApplicationStarter;
     
    var
      ApplicationStarterClass: TApplicationStarterClass  = TApplicationStarter; 
     
    implementation
     
    class function TApplicationStarter.Start(): Boolean; 
    begin
      with ApplicationStarterClass.Create() do
      try
        Splash := TSplashScreen.Create();
        try
          Result := InternalStart();
        finally
          Splash.Free();
        end;
      finally
        Free();
      end;
    end;
     
    function TApplicationStarter.InternalStart(): Boolean; 
    begin
      Result := True;
    end;
    Ensuite, dans chaque projet, tu surcharge TApplicationStarter

    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
    type
      TMonAppliStarter = class(TApplicationStarter )
      ...
      protected
        function InternalStart(): Boolean; override;
      end;
     
    implementation 
     ...
     
    function TMonAppliStarter.InternalStart(): Boolean; 
    begin
      Show(2);  
      Progress('Création Fenêtre Principale');
      Application.CreateForm(TForm1, Form1);  
      Progress('Création Fenêtre Secondaire');
      Application.CreateForm(TForm2, Form2);  
     
      // C'est Ici que tu fais le spécifique pour chaque application
     
      Result := True;
    end;
     
    initialization
        ApplicationStarterClass := TMonAppliStarter; // Très important, cela remplace TApplicationStarter par TMonAppliStarter spécifique au projet sans se poser trop de question pour la "gueule du DPR"
     
    end.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    type
      TSplashScreen = class(...)
      ...
      public
        procedure Show(MaxStep: Integer); // une progressBar, tu défini le Max (nonrmalement tu connais à l'avance ce que tu vas charger)
        procedure Progress(const AMessage: string); // un message, tu l'affiche dans un label et tu incrémente la progressBar
      end;
    Pour l'Image, tu peux mettre un fichier BMP (ou JPEG) en ressource de l'Exe (ou DLL) ou un simple fichier séparé de l'Exe
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre régulier Avatar de newbie57
    Inscrit en
    Juin 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juin 2005
    Messages : 124
    Points : 92
    Points
    92
    Par défaut
    Salut ShaiLeTroll,

    Effectivement tu as raison pour le splashscreen c'est d'ailleurs pour cela que je l'ai mis entre guillemets.

    Je viens encore de m'expliquer avec mon boss et ce qu'il voudrait plus precisement c'est en fait comme une unit avec tous les composants dessus (style comme un data module) mais avec une fenetre d'attente visuelle (comme un splashscreen) et qui se charge au demarrage. Elle fera une connection sur la base, fera quelques tests (Ip, autentification base, Nom d'utilisateur windows...) et en fonction de ces tests il chargera la page principale ou arretera l'application.

    J'aurai mis une simple unit qui fasse cela mais ils veulent (et oui ils sont plusieurs maintenant) que cette unit soit vierge de parametres en dur. Cette Unit doit comporter la connection à la base de données (dont tous les parametres de connections ne sont pas marqué en dur), avec aussi tous les querys (datasets) dont chaque requête ne doit pas aussi être marqué en dur et des datasources.

    Cette Unit doit être unique et peut être appelé par n'importe qu'elle application lors de la compilation donc elle ne doit avoir aucune trace d'une application précédente.

    A vrai dire je ne sais pas si je me fait bien comprendre car moi même je ne sais pas trop ce qu'ils veulent et eux même ne savent comment il faut faire sachant qu'ils sont persuadé que c'est dans le domaine du possible.

    Est-ce que c'est déjà possible? Est-ce aussi une bonne idée de leur part? Est-ce que je pars dans une mauvaise direction? Et surtout.. est-ce qu'il fera beau demain?

    Merci pour ta réponse et desolé si je ne te répond que maintenant j'étais déjà sorti du boulot hier lorsque tu avais posté ton message.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 534
    Points : 25 082
    Points
    25 082
    Par défaut
    Il veulent, une sorte de DataModule avec tous les objets de base, où il ne reste plus qu'à mettre les paramètres spécifiques à chaque appli

    Il existe la possibilité de faire de l'héritage de fenêtre, tu devrais cherche autour de ça !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre régulier Avatar de newbie57
    Inscrit en
    Juin 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juin 2005
    Messages : 124
    Points : 92
    Points
    92
    Par défaut
    Oui oui c'est très exactement ce qu'ils cherchent: un heritage de fenetre, mais pour celà c'est bien au dessus de mes compétances

    Bon et bien avant de crier à l'aide et de me demander de faire mon boulot Je vais déjà un peu fouiller ce forum et me documenter là dessus.

    Merci ShaiLeTroll, avec toi j'ai déjà une piste et je sais mettre un nom à leur idée.

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. [DX9] Splash Screen
    Par delire8 dans le forum DirectX
    Réponses: 6
    Dernier message: 03/06/2004, 10h30
  3. affichage de controles sur un splash screen
    Par shrek dans le forum C++Builder
    Réponses: 3
    Dernier message: 20/11/2003, 19h59

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