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

 Delphi Discussion :

Réinitialisation du code d'une form


Sujet :

Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2012
    Messages : 238
    Points : 77
    Points
    77
    Par défaut Réinitialisation du code d'une form
    salam

    je bidouille une application (catalogue produit d'une entreprise) les produits ne sont pas tous similaire donc logiquement les détails des produits ne le sont pas aussi alors j'ai fais en sort que l'application active juste les dbedit qu'ils ont des valeurs comme suite (sur oncreat de la form):
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    procedure TFDetail.FormCreate(Sender: TObject);
      begin
     
     
      if (nb.text = ',0')or (nb.text = '#') or (nb.text = '')then
      nb.visible:=false   ;
     
      if (c.text = ',0')or (c.text = '#') or (c.text = '')then
      c.visible:=false ;
     
      if (d.text = ',0')or (d.text = '#') or (d.text = '')then
      d.visible:=false ;
     
     
      if (f.text = ',0')or (f.text = '#') or (f.text = '')then
      f.visible:=false;
     
      if (g.text ='0' )or (g.text = '#') or (g.text = '')then
      g.visible:=false ;
     
     
      if (i.text = ',0')or (i.text = '#') or (i.text = '')then
      i.visible:=false;
     
      if (j.text = '0')or (j.text = '#') or (j.text = '')then
      j.visible:=false;
     
      if (wi.text = '0')or (wi.text = '#') or (wi.text = '')then
      wi.visible:=false ;
     
      if (disque.text = '0')or (disque.text = '#') or (disque.text = '')then
      disque.visible:=false ;
     
      if (nAntiDrain.text = '0')or (nAntiDrain.text = '#') or (nAntiDrain.text = '')then
      nAntiDrain.visible:=false ;
     
      if (nAntiSyphon.text = '0')or (nAntiSyphon.text = '#') or (nAntiSyphon.text = '')then
      nAntiSyphon.visible:=false;
     
      if (nBypass.text = '0')or (nBypass.text = '#') or (nBypass.text = '')then
      nBypass.visible:=false ;
     
     
      if (nElement.text = '0')or (nElement.text = '#') or (nElement.text = '')then
      nElement.visible:=false;
     
     
      if (a2.text = '0')or (a2.text = '#') or (a2.text = '')then
      a2.visible:=false;
     
      if (b2.text = '0')or (b2.text = '#') or (b2.text = '')then
      b2.visible:=false ;
     
      if (h2.text = '0')or (h2.text = '#') or (h2.text = '')then
      h2.visible:=false ;
     
      if (e.text = ',0')or (e.text = '#') or (e.text = '')then
      e.visible:=false ;
     
    /* PageDetail.ActivePageIndex := 0;
     TabConcurrent.TabVisible := FileExists(ExePath + '§§§§§.REG');*/ça c'est pour autre chose
     
     
     
     end;
    jusque la tous va bien le problème c'est quand je fait précédent et je chercher un autre produit dé que je reviens sur la form des détail je trouve les dbedit active du premier produit donc je cherche la manière de réinitialisation du code quand je quitte la form des détails ... j'espere que c'est claire et je vous remercie d'avance pour votre aide et je précise que je suis hyper débutant .

  2. #2
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 138
    Points : 113
    Points
    113
    Par défaut
    Bonsoir
    Citation Envoyé par adelcrb Voir le message
    (sur oncreat de la form):
    Essayez ce Code sur OnActivate de la form sinon OnDataChange du datasource. Bon courage

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2012
    Messages : 238
    Points : 77
    Points
    77
    Par défaut
    merci pour t'a réponse mina j'ai essyé avec OnActivate ça n'a rien donnez et avec OnDataChange j'ai eu le droit a une erreur...je suis coincé la mais je vais continuer a cherchez tout de même.

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par mina24 Voir le message
    Bonsoir
    Essayez ce Code sur OnActivate de la form sinon OnDataChange du datasource. Bon courage
    Le OnActivate c'est pas terrible comme idée, si la form ne perd jamais le focus il ne s'active jamais.

    Citation Envoyé par adelcrb Voir le message
    merci pour t'a réponse mina j'ai essyé avec OnActivate ça n'a rien donnez et avec OnDataChange j'ai eu le droit a une erreur...je suis coincé la mais je vais continuer a cherchez tout de même.
    Et l'erreur est ?

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2012
    Messages : 238
    Points : 77
    Points
    77
    Par défaut
    voila les message d'erreur
    [Hint] Data.pas(183): Value assigned to 'IsPrevInstance' never used
    [Error] Data.pas(360): Undeclared identifier: 'nb'
    [Fatal Error] &&&&.dpr(11): Could not compile used unit 'Data.pas'
    problème de déclaration du dbedit j'ai essayé de le déclaré pareil comme sur la form ou il se trouve mais ça n'a pas fonctionner.

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Ton Datasource est bien sur la form ou bien est il dans un Datamodule ?

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2012
    Messages : 238
    Points : 77
    Points
    77
    Par défaut
    au faite mon Datasourceet d’ailleurs tous mes composants de base de données se trouvent dans un Datamodule désolé j'ai oublier de le motionner.

  8. #8
    Fxg
    Fxg est déconnecté
    Membre éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 511
    Points : 838
    Points
    838
    Par défaut
    nb est un TEDIT ou un TDBEDIT ?

    Tu as bien inclus ton Datamodule dans les Uses ?

  9. #9
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par adelcrb Voir le message
    au faite mon Datasourceet d’ailleurs tous mes composants de base de données se trouvent dans un Datamodule désolé j'ai oublier de le motionner.
    Alors en général, les Datasource c'est dans la form et les composant DB dans le Datamodule.

    Sinon pour régler le problème sans avoir à changer de place les datasource.

    - Dans la partie implementation du datamodule tu rajoutes un uses vers ta form
    - Dans le onDatachange du Datasource tu fais soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (Taform.nb.text = ',0')or (Taform.nb.text = '#') or (Taform.nb.text = '')then
      Taform.nb.visible:=false   ;
    // ... pareil sur le reste
    Ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    With TaForm do
    begin
      if (Taform.nb.text = ',0')or (Taform.nb.text = '#') or (Taform.nb.text = '')then
        Taform.nb.visible:=false   ;
      // ... pareil sur le reste
    End; // With

  10. #10
    SLE
    SLE est déconnecté
    Membre éclairé Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Points : 799
    Points
    799
    Par défaut
    ...plutôt comme ceci (sinon quel est l'intérêt du with)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    With TaForm do
    begin
      if (nb.text = ',0')or (nb.text = '#') or (nb.text = '')then
        nb.visible:=false   ;
      // ... pareil sur le reste
    End; // With

  11. #11
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par SLE Voir le message
    ...plutôt comme ceci (sinon quel est l'intérêt du with)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    With TaForm do
    begin
      if (nb.text = ',0')or (nb.text = '#') or (nb.text = '')then
        nb.visible:=false   ;
      // ... pareil sur le reste
    End; // With
    Oups un copier...merder

  12. #12
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2012
    Messages : 238
    Points : 77
    Points
    77
    Par défaut
    Citation Envoyé par Fxg Voir le message
    nb est un TEDIT ou un TDBEDIT ?

    Tu as bien inclus ton Datamodule dans les Uses ?
    c'est un
    trzdbetit
    donc dbedit et évidement j'ai belle est bien ajouter mon datamodule dans les uses. (merci comme même)

    Sinon pour régler le problème sans avoir à changer de place les datasource.

    - Dans la partie implementation du datamodule tu rajoutes un uses vers ta form
    - Dans le onDatachange du Datasource tu fais ...
    j'ai suivis tes conseil a la lettre ça a bien marcher puisque j'ai réussi a compilé sans la moindre erreur mais quant je choisi le produit (a l'ouverture de la form en question) l'application bug et j’obtiens un long message d'erreur :project &&&&.exe raised exception class EAaccessviolation with message'access violation at adresse 006431e9 in module '&&&&.exe'.read of adress 00000378'.process stoped.use step or run to continue.

    voila c'est évidant que ça a un rapport avec ma base de données access malgré qu'elle est bien connecté avec delphi ... et merci pour les réponses ça m'aide pour ce projet et j’apprends de plus en plus.

  13. #13
    SLE
    SLE est déconnecté
    Membre éclairé Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Points : 799
    Points
    799
    Par défaut
    Lance ton appli en pas à pas pour voir d'où vient le bug.
    A priori tu essaies d'appeler une methode ou une propriété sur un objet qui n'est pas instancié (valeur = nil)

  14. #14
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par adelcrb Voir le message
    j'ai suivis tes conseil a la lettre ça a bien marcher puisque j'ai réussi a compilé sans la moindre erreur mais quant je choisi le produit (a l'ouverture de la form en question) l'application bug et j’obtiens un long message d'erreur :project &&&&.exe raised exception class EAaccessviolation with message'access violation at adresse 006431e9 in module '&&&&.exe'.read of adress 00000378'.process stoped.use step or run to continue.

    voila c'est évidant que ça a un rapport avec ma base de données access malgré qu'elle est bien connecté avec delphi ... et merci pour les réponses ça m'aide pour ce projet et j’apprends de plus en plus.
    Attention, rien à voir avec Access le AccessViolation
    Ce message d'erreur indique que tu essaies de lire une information dans une zone de mémoire "non valide". Cela arrive souvent quand un composant est mal instancié/créé.

    Comment crées tu ta form, ton datamodule ?
    Si c'est dynamiquement vérifie qu'ils ne sont pas créés automatiquement par le programme (Projet/Options/fiche si elles sont dans Créer automatiquement, mets les dans l'autre liste)
    Si c'est automatique, vérifie que ta form soit créé avant ton Datamodule.

  15. #15
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2012
    Messages : 238
    Points : 77
    Points
    77
    Par défaut
    en effet j'avais une procédure sur ma form qui cherché des images comme suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TFDetail.nProductChange(Sender: TObject);
    begin
     with FData do
      begin
     
       if FileExists(ExePath + 'Images\' + QProductnShape.Text + '.JPEG') then
        ImgProduct.Picture.LoadFromFile(ExePath + 'Images\' + QProductnShape.Text + '.JPEG')
       else ImgProduct.Picture := nil;
      end;
    end;
    maintenant j'ai mis ça :
    else ImgProduct.visible := false;
    mais ça na rien changer quant ça bug j’obtiens une bande bleu sur la première ligne du code(peut être que sa va aider)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TFData.SProductDataChange(Sender: TObject; Field: TField);
    begin
    if (fdetail.nb.text = ',0')or (fdetail.nb.text = '#') or (fdetail.nb.text = '')then
      fdetail.nb.visible:=false   ;
    
      if (fdetail.c.text = ',0')or (fdetail.c.text = '#') or (fdetail.c.text = '')then
      fdetail.c.visible:=false ;
    
      if (fdetail.d.text = ',0')or (fdetail.d.text = '#') or (fdetail.d.text = '')then

  16. #16
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2012
    Messages : 238
    Points : 77
    Points
    77
    Par défaut
    Citation Envoyé par Rayek Voir le message
    Attention, rien à voir avec Access le AccessViolation
    Ce message d'erreur indique que tu essaies de lire une information dans une zone de mémoire "non valide". Cela arrive souvent quand un composant est mal instancié/créé.

    Comment crées tu ta form, ton datamodule ?
    Si c'est dynamiquement vérifie qu'ils ne sont pas créés automatiquement par le programme (Projet/Options/fiche si elles sont dans Créer automatiquement, mets les dans l'autre liste)
    Si c'est automatique, vérifie que ta form soit créé avant ton Datamodule.
    j'ai crée mon data module avant les form et sur autocreat form il ya mon data module en premier puis la main form et de l'autre coté les autre form si je bascule data modole vers avalaible form j'aurai le même message d'erreur mais sur une autre ligne de code et plus exactement sur le bouton de recherche.

  17. #17
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 103
    Points : 122
    Points
    122
    Par défaut Réinitialisation du code d'une form
    Salut Adelcrb,

    je ne suis pas sur, mais je crois tout ce qui vous manque
    c'est un ( ELSE ) apres chaque ( IF ).

    a+

  18. #18
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2012
    Messages : 238
    Points : 77
    Points
    77
    Par défaut
    Citation Envoyé par camatchou Voir le message
    Salut Adelcrb,

    je ne suis pas sur, mais je crois tout ce qui vous manque
    c'est un ( ELSE ) apres chaque ( IF ).

    a+
    si je fait des else le programme sort de la boucle dé qu'il trouve 0 ou # et c'est pas ce que je cherche ... le code ça va il marche mais mon problème c'est qu'il fonction une seul fois quant je change de produit et je reviens sur la form les dbedit active son les même que le premier produit consulter même s'il est différent .

  19. #19
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 138
    Points : 113
    Points
    113
    Par défaut
    Vérifie si ton dataset (product) est active ou pas (il faudrait qu'elle soit à False)
    si la propriété product.active= true c'est normal que ton programme plante, puisqu'il exécute le on datatchange avant la création de la form fdetail.

  20. #20
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 264
    Points : 41 665
    Points
    41 665
    Billets dans le blog
    64
    Par défaut
    Bonjour,

    Moi ce qui me chagrine énormément ce sont ces .text .
    Arrêtez moi si je me trompe mais si j'ai bien compris ces :
    nb, c, d, f, g etc.... sont des DBText ou DBLabels donc des composants liés à une table ou une query ?

    Il serait dans ce cas bien préférable de faire les tests directement sur les valeurs de champs !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    with FData.QProductn do
     begin
       if (FieldByName('nb').asString= ',0') or (FieldByName('nb').asString = '#') or (FieldByName('nb').isNull)  then
      nb.visible:=false   ;
    // remplacable par un truc un peu plus optimisé
      nb.visible:= not (FieldByName('nb').isNull OR (FieldByName('nb').asString= ',0') or (FieldByName('nb').asString = '#')); 
    .....
    end;
    ceci dit , je serais curieux de voir la structure de la table , j'ai l'impression que la structure pourrait être fortement optimisée

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 7
    Dernier message: 10/11/2012, 17h34
  2. Réponses: 4
    Dernier message: 26/05/2009, 12h41
  3. Submitter une form par coding.
    Par bertlef dans le forum JSF
    Réponses: 4
    Dernier message: 19/09/2006, 12h50
  4. Réponses: 6
    Dernier message: 07/08/2006, 12h26
  5. Comment recentrer une form à l'exécution du code?
    Par Mickey.jet dans le forum Delphi
    Réponses: 2
    Dernier message: 27/06/2006, 16h54

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