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



Comment réaliser un splashscreen ?
auteur : hachesse
Un SplashScreen est un écran qui apparaît pendant le chargement d'une application.
Pour réaliser un tel écran, il suffit de faire apparaître la fenêtre voulue dès l'initialisation de l'application et ce jusqu'à l'affichage de la fenêtre principal, c'est a dire la fin jusqu'au chargement complet de l'application.

         begin
                 Application.Initialize;
                 SplashScreen := TSplashScreen.Create(Application); // On crée la fenetre de Splash
                 SplashScreen.Show; // On affichage de cette fenetre
                 SplashScreen.Update; // On force l'affichage de la fenetre (sinon elle n'aparait que partiellement)
                 Application.CreateForm(TForm1, Form1); // On crée les autres fiches de l'application
                 SplashScreen.Close; // On ferme la fenetre de Splash
                 SplashScreen.Release; // On détruit la fenêtre et on libère la mémoire
                 Application.Run;
         end.
        
lien : Comment mettre une image en fond de fiche ?
téléchargement : splashscreen [11,4 ko]

Comment mettre une image en fond de fiche ?
auteur : Al-Yazdi
On va créer une bitmap et dire à notre fiche de l'afficher dans le coin en haut à gauche. Si notre image est trop grande, elle sera tronquée, et si elle est petite, le reste de la fiche sera rempli par la couleur de fond.

         var
                 Bitmap: TBitmap;
        
         procedure TMyForm.FormPaint(Sender: TObject);
         begin
                 Canvas.Draw(0, 0, Bitmap);
         end;
        
         procedure TMyForm.FormCreate(Sender: TObject);
                 Bitmap := TBitmap.Create;
                 Bitmap.LoadFromFile('MyBitmap.bmp');
         end;
        
         procedure TMyForm.FormDestroy(Sender: TObject);
         begin
                 Bitmap.Free;
         end;
        
lien :  Comment mettre une image dans le fond d'une application MDI en Delphi ?

Comment récupérer le numéro de version de mon application ?
auteur : Gysmo
Voici une fonction qui récupère cette information :

         function ApplicationVersion: String
         var
                 VerInfoSize, VerValueSize, Dummy: DWord;
                 VerInfo: Pointer;
                 VerValue: PVSFixedFileInfo;
         begin
                 VerInfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), Dummy);
                 //Deux solutions :
                 if VerInfoSize <> 0 then
                 //- Les info de version sont inclues
                         begin
                                 //On alloue de la mémoire pour un pointeur sur les info de version :
                                 GetMem(VerInfo, VerInfoSize);
                                 //On récupére ces informations :
                                 GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo);
                                 VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize);
                                 //On traite les informations ainsi récupérées :
                                 with VerValue^ do
                                         begin
                                                 Result := IntTostr(dwFileVersionMS shr 16);
                                                 Result := Result + '.' + IntTostr(dwFileVersionMS and $FFFF);
                                                 Result := Result + '.' + IntTostr(dwFileVersionLS shr 16);
                                                 Result := Result + '.' + IntTostr(dwFileVersionLS and $FFFF);
                                         end;
                                        
                                 //On libère la place précedement allouée :
                                 FreeMem(VerInfo, VerInfoSize);
                         end
                        
                 else
                         //- Les infos de version ne sont pas inclues
                         //On déclenche une exception dans le programme :
                         raise EAccessViolation.Create('Les informations de version de sont pas inclues');
                
         end;
Il faut pour que cela fonctionne que vous spécifiez l'option Inclure les informations de version dans le projet dans menu Projet|Option|Information de version, ainsi la fonction retournera '1.0.0.0' par exemple, sinon la fonction déclenchera une erreur EAccessViolation.

Comment imposer une pause au programme ?
auteur : Al-Yazdi
Il existe deux manières pour faire cela :
1. La méthode Sleep
Il suffit de mettre Application.Sleep(duree_voulue) où duree_voulue est exprimée en millisecondes. Cette méthode présente le désavantage de ne pas traiter les messages.
2. La méthode GetTickCount
La procédure GetTickCount nous informe sur le nombre de millisecondes écoulées depuis l'allumage du PC. Le problème est que cette quantitée est stockée sur un DWord et que forcément un jour (49,7 jours après l'allumage du PC), elle va revenir à zéro. Pour corriger ce problème, nous allons donc utiliser des cardinaux.

         var
                 Tc: Cardinal;
         begin
                 Tc := GetTickCount;
                 repeat
                         Application.ProcessMessages;
                 until Cardinal(GetTickCount - Tc) > {Temps d'attente en ms};
         end;
        
Cette méthode est à préférer, car elle ne bloque pas la distribution des messages exterieurs.

Comment récupérer les paramètres passés au programme ?
auteur : Al-Yazdi
Delphi possède dans ce but deux fonctions : ParamCount: Integer et ParamStr(Index: Integer): String
La première nous indique combien de paramètres on été passés au programme, et la seconde nous indique quels sont-ils. Ainsi ParamStr(0) nous renseigne sur le nom du programme et son chemin, ParamStr(1) nous donne le premier paramètre reçu et ainsi de suite.
Exemple : On a lancé notre application en faisant glisser des fichiers sur l'icône. On va remplir une ListBox des chemins de tous les fichiers.

         var
                 i: Integer;
         begin
                 for i := 1 to ParamCount do
                         MyListBox.Items.Append(ParamStr(i));
                
         end;

Comment n'instancier qu'une seule fois un programme ?
auteur : hachesse
Il existe de nombreuses méthodes pour n'autoriser qu'une seule instance d'un même programme. La plus élégante étant sans aucun doute l'utilisation des Mutex.
Les Mutex sont en fait des variables globales qui génèrent un message d'erreur lorsque l'on tente de les instancier alors que cela a déjà été fait. Pour interdire de lancer 2 fois une même application, il suffit donc de tester si une erreur est produite lors de la création d'un Mutex pour notre application. Cela se fait dès le lancement de l'application, c'est à dire dans le code de base du projet accessible par le menu Projet|Voir la source.
Le code source d'un nouveau projet étant :

         program Project1;
        
         uses
                 Forms,
                 Unit1 in 'Unit {Form1};
        
         {$R *.RES}
        
         begin
                 Application.Initialize;
                 Application.CreateForm(TForm1, Form1);
                 Application.Run;
         end.
        
Toutes les fonctions relatives aux Mutex se trouvant dans l'unité Windows, il est donc nécessaire de l'ajouter dans la clause uses.
Afin d'être totalement sûr qu'une autre erreur ne vienne perturber le lancement de notre programme, il est préférable d'effacer toute trace de la dernière erreur survenue dans le système. On utilise pour cela la commande SetLastError(NO_ERROR). Il est à présent temps de créer le Mutex pour l'application. On utilise pour se faire la commande CreateMutex(lpMutexAttributes: PSecurityAttributes, bInitialOwner: LongBool, lpName: PChar): Cardinal où les paramètres correspondent respectivement aux attributs de sécurité du Mutex, au thread qui en est le propriétaire et au nom du Mutex. Si le Mutex existe déjà, l'erreur ERROR_ALREADY_EXISTS sera alors déclenchée. Il faut donc tester la dernière erreur intervenue dans le système et lancer ou non une instance de l'application.
Le code de base du projet étant donc :

         program Project1;
        
         uses
                 Windows, Forms,
                 Unit1 in 'Unit {Form1};
        
         {$R *.RES}
        
         begin
                 SetLastError(NO_ERROR);
                 CreateMutex (nil, False, 'Nom de l application');
                 if GetLastError = ERROR_ALREADY_EXISTS then
                         Exit;
                 Application.Initialize;
                 Application.CreateForm(TForm1, Form1);
                 Application.Run;
         end.
        
lien :  MSDN - CreateMutex
lien : Comment passer au premier plan une application instanciée une seconde fois ?
téléchargement : 1instance [2,77 ko]

Comment passer au premier plan une application instanciée une seconde fois ?
auteur : hachesse
La première chose à faire est de tester si l'application est déjà instanciée. Pour ce faire, on utilise les Mutex comme décrits précédement.
Ce test amène donc à 2 cas de figures :
L'application n'est pas lancée
Si l'application n'est pas instanciée, il faut le faire, pour cela, le déroulement classique du lancement d'une programme suffit. Il faudra tout de même récupérer certaines informations sur l'application. Ces information servirons à faire repasser l'application au premier plan dans le cas d'un second lancement du programme. Pour cela, nous avons besoins de 2 handles : celui du programme lui même et celui de la form principale.
Ces 2 valeurs qui devront être accessibles en dehors du programme seront stockées dans la base de registres de Windows sous la clé HKEY_CLASSES_ROOT\software\nom_de_la_clé et sous les noms FirstApplicationHandle et FirstFormHandle.

         Application.Initialize;
         Application.CreateForm(TForm1, Form1);
        
         Registre := TRegistry.Create;
         try
                 Registre.RootKey := HKEY_CLASSES_ROOT;
                 Registre.OpenKey('\Software\nom_de_la_clé', True);
                 Registre.WriteInteger('FirstApplicationHandle', Application.Handle);
                 Registre.WriteInteger('FirstFormHandle', Form1.Handle);
                 Registre.CloseKey;
                 Registre.Free;
         except
                 MessageDlg('Une erreur est survenue lors de l''écriture dans la base de registre.',
                         mtError, [mbOk], 0);
                 Registre.Free;
                
         end;
        
         Application.Run;
L'application est déjà lancée
Si l'application est déjà lancée, rien ne sert de la faire une seconde fois, c'est-à-dire que le chargement de l'application sera tout simplement stoppé. Mais avant de quitter le lancement de l'application, il faut redonner le focus à la première instance du programme. C'est là que les données qu'il aura déposées dans la base de registres seront utiles pour l'identifier.
La première chose à faire est donc d'aller chercher les 2 handles voulus dans la base de registre. Une fois que le programme aura le handle de l'application et celui de la fenêtre principale il pourra donner le focus à cette dernière. Cela se fait grace à 2 fonctions de l'API Windows ShowWindow(hWnd: HWND; nCmdShow: Integer): BOOL et SetForegroundWindow(hWnd: HWND): BOOL.

         Registre := TRegistry.Create;
         try
                 Registre.RootKey := HKEY_CLASSES_ROOT;
                 Registre.OpenKey('\Software\nom_de_la_clé', True);
                 FirstApplicationHandle := Registre.ReadInteger('FirstApplicationHandle');
                 FirstFormHandle := Registre.ReadInteger('FirstFormHandle');
                 ShowWindow(FirstApplicationHandle, SW_NORMAL);
                 SetForegroundWindow(FirstFormHandle);
                 Registre.CloseKey;
                 Registre.Free;
         except
                 MessageDlg('Une erreur est survenue lors de la lecture dans la base de registre.',
                         mtError, [mbOk], 0);
                 Registre.Free;
                
         end;
PS: il est préférable de nettoyer la base de registres à la fin de l'exécution du programme.
lien : Comment n'instancier qu'une seule fois un programme ?
téléchargement : 1instance [2,77 ko]


Ce document issu de www.developpez.com est soumis à la licence GNU FDL traduit en français ici
Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement.