Form

Résolu
ced55957 Messages postés 108 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 19 juin 2012 - 6 mai 2007 à 12:19
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre 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

8 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
6 mai 2007 à 12:35
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.
3
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
7 mai 2007 à 12:39
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...

++
3
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
6 mai 2007 à 15:08
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.
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
6 mai 2007 à 15:21
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...

++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
6 mai 2007 à 15:54
@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.
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
6 mai 2007 à 15:58
Ahhh autant pour moi ^^ j'avais pas compris ça comme ça....
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
7 mai 2007 à 11:02
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)
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
7 mai 2007 à 11:05
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)
0
Rejoignez-nous