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 :

Erreur violation avec evenements émanant d'une form non visible


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Points : 50
    Points
    50
    Par défaut Erreur violation avec evenements émanant d'une form non visible
    Bonjour à tous

    Je suis sous Delphi7 perso et j'ai un soucis d'erreur violation avec un des événements que j'indique dans le OnCreate d'une 1er form et que je récupère sur 2 checkbox qui sont sur une 2ème form).

    Je résume mon programme (j'ai une fiche Form2 qui permet de s'identifier au démarrage et si mot de passe ok la 2ème fiche s'ouvre (form1)
    dans la form 2 j'ai 2 check box (la 1ere que je coche pour indiquer que le programme à un mot de passe et la 2ème pour indiquer qu'il n'est pas protéger avec un mot de passe).
    les valeurs des checkbox et du mot de passe sont stockés dans un fichier ini (tout cela fonctionne parfaitement)

    Ce que je souhaite donc, c'est qu'en fonction du checkbox qui est coché, le programme démarre directement ou pas sur la form1 (fiche principale).

    Pour conclure: il faudrait que :
    si case cochée avec mot de passe (checkpass) alors on reste sur la form2
    ou
    si case cochée sans mot de passe (cheknopass) alors on zappe la form2 et on ouvre directement la form1

    J'ai eu beau tourner le problème dans tous les sens et tester des quantités de code, je ne comprends pas pourquoi ça plante ...
    Merci d'avance pour votre aide
    Cordialement
    Beauserge


    Voici la partie de mon code (qui provoque l'erreur violation), mais si vous voulez le code entier de mon programme merci de me faire savoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // a la création de la fiche
    procedure TForm2.FormCreate(Sender: TObject);
    begin
    if Form1.checkpass.checked then   // si case cochée avec mot de passe
    begin
    Editpass.setfocus // on reste sur l'edit saisie du mot de passe de la form2
    end
      else
         begin
      if Form1.checknopass.checked then   // si case cochée sans mot de passe
      form1.visible:=true;
      form1.Show;
         end;
    end;

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777
    Par défaut
    La fiche Form1 n'est probablement pas créée au moment où tu essayes d'y accéder depuis Form2.
    Vérifie l'ordre de création si tu es en mode création automatique, Form1 doit être créée et accessible avant Form2.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    Bonsoir GoustiFruit

    Effectivement je suis en mode de création automatique et Form2 était créee avant Form1.
    J'ai inversé l'ordre comme tu me l'as indiqué mais j'ai également une erreur de violation

    Si tu as une autre idée de la cause, n'hésites pas...

    Cordialement

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777
    Par défaut
    Euh, oui je voudrais bien le reste du code, j'ai du mal à comprendre ce que tu cherches à faire !

    En passant, si les checkbox sont exclusives (on peut avoir l'une ou l'autre cochée, mais pas les deux), alors il vaudrait peut-être mieux utiliser des radiobutton ?

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    GoustiFruit

    Voici tous les fichiers pour compiler le programme

    Concernant les checkbox, j'ai écrit du code dans l’évènement "Click"" de chacun pour qu'ils ne puissent jamais être coché en même temps, c'est soit un ou l'autre .

    IdentifiantsRef.rar
    précision -mot de passe dans programme "dell"

    A te lire pour la suite
    Cordialement
    Beauserge

  6. #6
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Bonjour,

    normalement je dirais de changer de méthode pour ce type d'affichage, une gestion manuelle de la fiche Form2 (création libération) le tout dans le dpr et bien-sûr avant la création de la fiche principale Form1 (en lisant les données directement dans le fichier ini).
    L'autre avantage et non des moindres, c'est que la fiche principale, donc l'application, reste réellement hors de portée puisque non créée.

    sinon j'ai une autre solution:
    Form1 et Form2 sont créées automatiquement (application normale)
    Form1 contient une checkbox "CheckPass"
    Form2 contient 1 edit pour le mot de passe et 2 boutons 1 pour valider l'autre pour abandonner et quitter.
    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
    type
      TForm2 = class(TForm)
        btnOk: TBitBtn;
        btnAbort: TBitBtn;
        edtPass: TEdit;
        procedure FormCreate(Sender: TObject);
        procedure btnOkClick(Sender: TObject);
        procedure btnAbortClick(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form2: TForm2;
     
    implementation
     
    {$R *.dfm}
    uses UMainForm;  // *******************                frmMain == Form1       ******************
    procedure TForm2.btnOkClick(Sender: TObject);
    begin
      if edtPass.Text = 'ok' then begin
        Hide;
        frmMain.Show;
      end;
    end;
     
    procedure TForm2.btnAbortClick(Sender: TObject);
    begin
      Close;
    end;
     
    procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      //pour quitter l'application qui est cachée
      frmMain.Close;
    end;
     
    procedure TForm2.FormCreate(Sender: TObject);
    begin
      if frmMain.CheckPass.Checked then begin
        Application.ShowMainForm := False;
        Visible := True;
        edtPass.SetFocus;
      end;
    end;
     
    end.
    ce code fait ce que tu demandes mais je pense que l'autre approche est plus appropriée ... enfin c'est que mon avis
    il faut voir ce que les autres en pense


    EDIT:
    je viens de regarder ton code je me sens obligé de dire que ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if edtPass.Text = 'ok' then begin
    n'est a utiliser qu'en démo mais à proscrire dans un code !!!
    de même que sauvegarder le mot de passe en clair dans un fichier nommé Password.ini
    il faudrait au minimum le crypter ... pour le coté protection du Password
    Coté protection de l'application c'est déjà plus compliqué, le fait d'utiliser un simple "if" pour valider ou non le MP et ainsi lancer l'application facilite le travail du futur hacker ou pirate
    Cordialement,
    @+

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    Bonjour et Merci beaucoup Cirec pour tes explications et ton code

    J'ai opté pour ta solution ou la Form1 et Form2 sont créées automatiquement (application normale) même si ce n'est pas la plus appropriée
    En tout cas, ça fonctionne parfaitement et c'est exactement le résultat que je recherchais !!

    Pour ce qui est du mot de passe, rassure toi j'avais saisi que "Ok" n'était là que pour l'exemple... et je sais qu'enregistrer celui-ci dans un .ini n'est pas idéal.

    Je vais sans doute essayer d'améliorer cela (voir du coté du registre) - qu'en dis tu ?
    et comme tu le soulignes aussi de le crypter pour plus de sécurité (à ce sujet, quelle méthode me préconiserait tu pour cela et comment l'intégrer à mon code existant ?)

    A te lire
    Beauserge

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/09/2006, 14h07
  2. Interaction avec la bordure d'une forme
    Par SkYsO dans le forum Langage
    Réponses: 2
    Dernier message: 01/05/2006, 18h28
  3. Réponses: 3
    Dernier message: 22/11/2005, 20h42
  4. [C#] Travailler efficacement avec les panels dans une forme
    Par WwiloO dans le forum Windows Forms
    Réponses: 8
    Dernier message: 27/06/2005, 15h33
  5. Capture d'une form non visible
    Par Linkin dans le forum Composants VCL
    Réponses: 3
    Dernier message: 14/04/2004, 14h58

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