Form [Résolu]

ced55957
Messages postés
110
Date d'inscription
dimanche 2 mars 2003
Dernière intervention
19 juin 2012
- 6 mai 2007 à 12:19 - Dernière réponse : florenth
Messages postés
1105
Date d'inscription
dimanche 1 août 2004
Dernière intervention
17 août 2008
- 7 mai 2007 à 12:39
bonjour bon vote a tous!

je voulais savoir si il est possible que la form1 de mon programme ne demarre qu'une seul fois a la premiere utilisation et que pa la suite le programme demarre directement su la form2??

merci pour vos reponse
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
cptpingu
Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Dernière intervention
5 novembre 2018
- 6 mai 2007 à 12:35
3
Merci
Tu dois tout simplement noter quelquepart, si l'application à déjà été démarré.
Tu peux le faire avec un simple fichier texte, un fichier ini ou écrire dans la base des registres.
Au démarrage de ton programme il te suffira de regarder si un tel marqueur est déjà présent.

Merci cptpingu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cptpingu
Meilleure réponse
florenth
Messages postés
1105
Date d'inscription
dimanche 1 août 2004
Dernière intervention
17 août 2008
- 7 mai 2007 à 12:39
3
Merci
Ahhh berk ! Le bon vieux registre windows !
Quoi de plus crade et poussiéreux ?

Sérieusement, faut passer à mieux....

Mais c'est pas pour dénigrer ton code f0xi, simplement un rappel...

++

Merci florenth 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de florenth
cs_Loda
Messages postés
900
Date d'inscription
vendredi 3 novembre 2000
Dernière intervention
30 juillet 2009
- 6 mai 2007 à 15:08
0
Merci
salut,

Par exemple tu peux  distribuer ton applic avec un fichier "FirstRun" dans le dossier de l'exe. et tu l'efface au first run.
En bonus, tu peux mettre le texte d'acceuil dans le fichier :-)

A+

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
Commenter la réponse de cs_Loda
florenth
Messages postés
1105
Date d'inscription
dimanche 1 août 2004
Dernière intervention
17 août 2008
- 6 mai 2007 à 15:21
0
Merci
Ou alors, pour faire plus propre, tu essaye de créer un sémaphore au lancement de ton appli.
Si la création réussit, c'est que tu peux créer ta fichier principale, sinon, c'est l'autre !

Et c'est bien plus propre car aucun accès disque...

++
Commenter la réponse de florenth
cs_Loda
Messages postés
900
Date d'inscription
vendredi 3 novembre 2000
Dernière intervention
30 juillet 2009
- 6 mai 2007 à 15:54
0
Merci
@Florent:
si j'ai bien compris, il veut différencier le premier lancement (depuis l'install). pas la premère instance (depuis la session).

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
Commenter la réponse de cs_Loda
florenth
Messages postés
1105
Date d'inscription
dimanche 1 août 2004
Dernière intervention
17 août 2008
- 6 mai 2007 à 15:58
0
Merci
Ahhh autant pour moi ^^ j'avais pas compris ça comme ça....
Commenter la réponse de florenth
f0xi
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
- 7 mai 2007 à 11:02
0
Merci
Fichiers > nouveau > Application
Fichiers > nouveau > Fiche

la tu doit avoir Form1 et Form2

Nome correctement Form1 et Form2 exemple :

Form1 = FrmFirstRun (TFrmFirstRun)
Form2 = FrmMain (TFrmMain)

Sauvegarde ton projet dans le repertoire final :

c:\projet delphi\MonAppli

Ici on doit maintenant avoir ces fichiers :

FrmFirstRun.dpr
FrmFirstRun.dfm
uFirstRun.pas
FrmMain.dpr
FrmMain.dfm
uMain.pas

maintenant :

projet > voir le source

tu doit avoir ceci :

program MonAppli;

uses
  Forms,
  uFirstRun in 'uFirstRun.pas' {FrmFirstRun},
  uMain in 'uMain.pas' {FrmMain};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TFrmFirstRun, FrmFirstRun);
  Application.CreateForm(TFrmMain, FrmMain);
  Application.Run;
end.

bien, modifions comme cela :

program MonAppli;

uses
  Forms,
  uFirstRun in 'uFirstRun.pas' {FrmFirstRun},
  uMain in 'uMain.pas' {FrmMain};

{$R *.res}

var FirstRun : boolean;

begin
  Application.Initialize;

  with TRegistry.Create do
  try
    RootKey := cardinal($80000001);

    if OpenKey('Software\MonAppli',true) then
    begin
      FirstRun := not ValueExists('FirstRun');
      if FirstRun then
      begin
        WriteInteger('FirstRun',1);
      end;
    end;
    CloseKey;
  finally
    Free;
  end;

  case FirstRun of
    true : Application.CreateForm(TFrmFirstRun, FrmFirstRun);
  else
      Application.CreateForm(TFrmMain, FrmMain);
  end;

  Application.Run;
end.

dans uMain préparer cette procedure :

unit uMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TFrmMain = class(TForm)
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
    procedure ResetFirstRun(const ByDeleteKey : boolean = false);
  end;

var
  FrmMain: TFrmMain;

implementation

{$R *.dfm}

uses Registry;

{ TFrmMain }

procedure TFrmMain.ResetFirstRun(const ByDeleteKey : boolean = false);
begin
  with TRegistry.Create do
  try
    RootKey := HKEY_CURRENT_USER;
    if ByDeleteKey then
       DeleteKey('Software\MonAppli)
    else
    if OpenKey('Software\MonAppli',false) then
    begin
      DeleteValue('FirstRun');
      CloseKey;
    end;
  finally
    Free;
  end;
end;

end.

et voila, au premier lancement on aurat bien la Fiche FrmFirstRun et au prochain lancement la fiche FrmMain :)

on appel la procedure :

ResetFirstRun;  pour supprimer la valeur FirstRun mais pas la clef MonAppli
ResetFirstRun(true); pour supprimer la clef MonAppli

Attention, si on ajoute des fiches au projet aprés modifications on vas se retrouver avec cela dans le source du projet :

begin
  Application.Initialize;

  with TRegistry.Create do
  try
    RootKey := cardinal($80000001);

    if OpenKey('Software\MonAppli',true) then
    begin
      FirstRun := not ValueExists('FirstRun');
      if FirstRun then
      begin
        WriteInteger('FirstRun',1);
      end;
    end;
    CloseKey;
  finally
    Free;
  end;

  case FirstRun of
    true : Application.CreateForm(TFrmFirstRun, FrmFirstRun);
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  else
      Application.CreateForm(TFrmMain, FrmMain);
  end;

  Application.Run;
end.

il faudrat alors réediter le source comme suis :

  case FirstRun of

    true : Application.CreateForm(TFrmFirstRun, FrmFirstRun);
  else

      Application.CreateForm(TFrmMain, FrmMain);

  end;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);

<hr size="2" width="100%" />Croc (click me)
Commenter la réponse de f0xi
f0xi
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
- 7 mai 2007 à 11:05
0
Merci
petit oublis :

a la modification tu doit ajouter Registry dans les Uses :

uses
  Forms,
  Registry,
  uFirstRun in 'uFirstRun.pas' {FrmFirstRun},
  uMain in 'uMain.pas' {FrmMain};

<hr size="2" width="100%" />Croc (click me)
Commenter la réponse de f0xi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.