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 :

Modifier les propriétés d'un champ


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Consultant informatique
    Inscrit en
    Octobre 2006
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 240
    Points : 103
    Points
    103
    Par défaut Modifier les propriétés d'un champ
    Salut les delphistes,
    Sur un TForm, je dispose de 150 champs (DBEdit) contenant des numéros d'identification de client.
    Par un edit, je cherche un de ces numéros dans la table et je souhaiterais lorsqu'il est trouvé dans la table modifier les propriétés du champ (DBEdit) concerné (par exemple le mettre en rouge) sur le TForm afin qu'il soit visible par l'utilisateur et lui permettre de cliquer dessus pour ouvrir la fiche correspondante.
    Comment puis-je donc m'y prendre en delphi 4 ?
    Merci
    Disposer du "Savoir" c'est bien, le partager c'est encore mieux. !

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 549
    Points : 25 119
    Points
    25 119
    Par défaut
    150 DBEdit sur le même Ecran ? Donc 150 champs dans la table ?

    Tu peux utiliser une TStringList pour faire un mapping FieldName et DBEdit, ou alors faire une boucle sur Components\ComponentCount de le Form, chercher les TDBEdit (opérateur is et as), et comparer lequel contient dans DataField pour le champ concerné, ensuite tu n'as qu'a modifier Font et Color
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Citation Envoyé par LuckyLuke56 Voir le message
    Salut les delphistes,
    Sur un TForm, je dispose de 150 champs (DBEdit) contenant des numéros d'identification de client.
    Par un edit, je cherche un de ces numéros dans la table et je souhaiterais lorsqu'il est trouvé dans la table modifier les propriétés du champ (DBEdit) concerné (par exemple le mettre en rouge) sur le TForm afin qu'il soit visible par l'utilisateur et lui permettre de cliquer dessus pour ouvrir la fiche correspondante.
    Comment puis-je donc m'y prendre en delphi 4 ?
    Merci
    Salut,

    Voici une boucle qui correspond à ce que te cherches:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.Button1Click(Sender: TObject);
    var rech:integer;
    begin
    rech:=Strtoint(Edit1.Text);//on recherche le n° introduit dans le "Edit1"
    Table1.First;
    while not Table1.Eof do begin
    if Table1.FieldValues['CustNo']=rech then begin
    DBEdit1.Color:=ClRed; // si on trouve l''enregistrement, on le met en rouge
    DBEdit1.SetFocus; // on se focalise sur le champ recherché
    break;//la recherche s''arrete
    end else
    Table1.Next;
    end;
    end;
    Bonne chance

    NABIL74

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 549
    Points : 25 119
    Points
    25 119
    Par défaut
    Euh, NABIL74, ça serait pas plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if Table1.Locate('CustNo', VarArrayOf([StrToInt(Edit1.Text)]), []) then
      begin
        DBEdit1.Color:=ClRed; 
        DBEdit1.SetFocus;
      end;
    end;
    et je pense que la demande de LuckyLuke56 n'est pas aussi basique, d'ailleurs si tu avais déjà du code pour la recherche dans la table (un code concis)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre régulier
    Consultant informatique
    Inscrit en
    Octobre 2006
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 240
    Points : 103
    Points
    103
    Par défaut
    Je vous remercie pour vos propositions mais d'où vient le dbedit1? Rien ne dit qu'il est bien le champ correspondant à la recherche. Preuve à l'appui! Cela pointe sur mon dbedit1 de la form qui non seulement contient sur des panels les 150 numéros mais aussi d'autres champs de ma base de données.
    Il faudrait en fait que sur le form la boucle sélectionne chaque dbedit contenant les numéros et s'arrête là où il le trouve afin de modifier l'apparence. Votre procédure trouve le bon numéro dans la table mais après va modifier le dbedit1 même si c'est dbedit120 qui est le bon champ!
    A trois on devrait y arriver à mon avis, merci!
    Disposer du "Savoir" c'est bien, le partager c'est encore mieux. !

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 549
    Points : 25 119
    Points
    25 119
    Par défaut
    DBEdit1 est une erreur de la part de NABIL74, comme je l'ai dit, il n'a pas compris ta problèmatique moi, je n'ai fait que simplifier son code !

    Je pense t'avoir donné tous les éléments avec Components\ComponentCount ..., lit bien ma 1ere réponse, as-tu cherché un peu plus ?
    Tu n'as pas répondu à mes questions, 150 DBEdit = 150 Colonnes ? (Si oui, cela tient en dix lignes)
    Tu n'as pas fourni de code sur ce que tu as déjà réussi à faire, cela aiderait pour que l'on t'oriente au mieux ... et qu'au final on te donne un code tout prémaché
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Alors il suffit de combiner les 2 :
    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
      //Recherche dans la base de donnée
      if Table1.Locate('CustNo', VarArrayOf([StrToInt(Edit1.Text)]), []) then
      begin
        //Recherche du DbEdit contenant
        for i := 0 to ComponentCount -1 do
        begin
           if ((Components[i] is TDBEdit) and (((Components[i] as TDBEdit).Text) = Edit1.Text)) then
           begin
             (Components[i] as TDBEdit).Color := clRed;
             if (Components[i] as TDBEdit).CanFocus then
                (Components[i] as TDBEdit).SetFocus;
           end;
        end;
    
    Voilà.
    On progresse .....

  8. #8
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    bonjour,

    au début, je n'ai pas compris son problème.je croyais qu'il voulait une recherche basique.

    je cherche un de ces numéros dans la table et je souhaiterais lorsqu'il est trouvé dans la table modifier les propriétés du champ (DBEdit) concerné (par exemple le mettre en rouge)
    ShaiLeTroll le "DBEdit1" est liée au champ du numéro de la table qu'il veut rechercher.dans mon exemple, c'est "CustNo".quand on fait une recherche et qu'on trouve le numéro correspondant au critère de recherche,on se focalise sur le "DBEDit1" et on le met en rouge.
    je crois que l'exemple de Andry fera l'affaire.

    cordialement.

    NABIL74

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 549
    Points : 25 119
    Points
    25 119
    Par défaut
    En fait, le code d'Andry ne fera pas ce que veux LuckyLuke56, mais il y a tout ce qu'il faut pour y arriver ... il ne manque plus qu'une petite boucle sur FieldDefs ...

    @NABIL74, non j'avais bien compris pour DBEdit1, ce n'est pas à moi qu'il faut l'expliquer, sauf que LuckyLuke56 prend tout ce qui est écrit au 1er degré, il n'a aucune abstraction ... tu aurais du l'appeler "dbeCustNo", cela aurait été plus propre !

    @Andry, fallait le laisser trouver lui-même, sinon ça ferait longtemps que je lui aurait maché le travail
    J'ai écrit ce type de code mais avec des TButton changeant de couleur en fonction d'une colonne de statut dans une Table tout en étant associé à une colonne de valeur et de date dans une autre table
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  10. #10
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    En fait, le code d'Andry ne fera pas ce que veux LuckyLuke56, mais il y a tout ce qu'il faut pour y arriver ... il ne manque plus qu'une petite boucle sur FieldDefs ...

    @Andry, fallait le laisser trouver lui-même, sinon ça ferait longtemps que je lui aurait maché le travail
    J'ai écrit ce type de code mais avec des TButton changeant de couleur en fonction d'une colonne de statut dans une Table tout en étant associé à une colonne de valeur et de date dans une autre table
    Bien sur. Mais je pense qu'il y a quand même un problème niveau conception IHM.
    On progresse .....

  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 549
    Points : 25 119
    Points
    25 119
    Par défaut
    Citation Envoyé par Andry Voir le message
    Bien sur. Mais je pense qu'il y a quand même un problème niveau conception IHM.
    Je le pense aussi, la seule fois où j'ai eu besoin de faire un écran aussi lourd c'était affiché sur un écran tacticle de 19" (le truc ultra cher pour l'époque) avec bien 50 boutons (écran de diagnostice d'une machine), avec des couleurs (en fait comme un écran de diode ...), tout toujours vert, sauf quand problème ...

    Sinon, j'ai vu des écrans similaires avec "DBF Viewer Pro" par exemple, où tu as tous les champs affichés comme avec l'expert Fiche DB de Delphi, quand tu as 10 colonnes, c'est mignon, quand tu en as 300, vive la ScrollBox et de bons yeux !

    Mais le problème n'est pas là, laissons LuckyLuke56 nous proposer un extrait du code et lui résoudre son problème, on a déjà ce type de problématique sur le forum, je n'ai retrouvé le sujet ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  12. #12
    Membre régulier
    Consultant informatique
    Inscrit en
    Octobre 2006
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 240
    Points : 103
    Points
    103
    Par défaut
    Voilà bien de l'animation sur le forum...
    J'espère ne pas vous avoir fait perdre du temps!
    Pour répondre à ShayLeTroll, en bas d'écran, j'ai placé 20 numéros sur 15 panels. Peut-être y avait-il une meilleure méthode mais elle répond au souhait de l'équipe qui se sert du progiciel.
    Pour ce qui est de la méthode de recherche, c'est Andry qui a la bonne solution 10/10 bravo!. J'ai du adapter car mon numéro (je ne l'avais pas dit) n'est pas un nombre pur mais un string car la structure du numéro correspond un peu à un numéro bancaire avec modulo de contrôle.
    La voici :
    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
    begin
      if edit6.text ='' then begin
    showmessage('Aucun numéro  n''a été introduit!')// évite de mettre tous les dbedit en couleur!!!
       end else begin
        //Recherche du DbEdit contenant la valeur de edit6.text
        for i := 0 to ComponentCount -1 do
        begin
           if ((Components[i] is TDBEdit) and (((Components[i] as TDBEdit).Text) = Edit6.Text)) then
           begin
             (Components[i] as TDBEdit).Color := clRed;
             if (Components[i] as TDBEdit).CanFocus then
                (Components[i] as TDBEdit).SetFocus;
           end;
        end;
       end;
      end;
    Encore mille mercis pour votre aide et explications. A une prochaine.
    Le 'Savoir' est bien mais le partager c'est mieux.
    Disposer du "Savoir" c'est bien, le partager c'est encore mieux. !

  13. #13
    Membre chevronné Avatar de chaplin
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 215
    Points : 1 819
    Points
    1 819
    Par défaut
    Une DBGrid n'aurait pas été mieux pour ce type de problème ?

  14. #14
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 549
    Points : 25 119
    Points
    25 119
    Par défaut
    un petit ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  15. #15
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Serais ce possible de voir une capture d'écran.
    On progresse .....

  16. #16
    Membre régulier
    Consultant informatique
    Inscrit en
    Octobre 2006
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 240
    Points : 103
    Points
    103
    Par défaut
    La table comporte 267 champs. Certains modifiés régulièrement sont affichés en haut d'écran, suit un dbgrid reprenant l'affichage des clients avec certains de leurs renseignements. Vient ensuite les panels reprenant les numéros d'autorisation. Certains n'en ont qu'un, d'autre en ont jusque 100 actuellement mais cela ne cesse d'augmenter. Malheureusement cette table est liée à un autre logiciel donc on ne peut pas modifier n'importe quoi dans la structure et les champs.

    Merci et "résolu" is checked.
    Disposer du "Savoir" c'est bien, le partager c'est encore mieux. !

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

Discussions similaires

  1. Modifier les propriétés d'un champ d'une table
    Par papyxy dans le forum VBScript
    Réponses: 5
    Dernier message: 17/03/2014, 14h54
  2. Réponses: 16
    Dernier message: 05/04/2006, 17h28
  3. Réponses: 3
    Dernier message: 11/01/2006, 12h01
  4. Modifier les propriétés d'un fichier
    Par manu1407 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 09/11/2005, 10h39
  5. connaitre les propriétés d'un champ à partir de son nom
    Par toome dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 24/10/2005, 11h16

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