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

Composants VCL Delphi Discussion :

Variable sur un composant


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 30
    Par défaut Variable sur un composant
    Bonjour

    Je voudrais savoir si il est possible d'assigner une variable sur un composant tel que l'exemple qui suit

    J'ai 4 boutons

    en cliquant sur le bouton1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    button3.enabled := true;
    en cliquant sur le bouton2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    button4.enabled := true;
    Puis-je raccourcir ceci de maniere que selon le bouton sur lequel j'appuie j'assigne une variable telle que :

    si bouton1 pressé
    alors i=3
    si bouton2 pressé
    alors i=4
    begin
    button[i].enabled := true;
    end

    J'espere m'etre fait comprendre ^^

    Merci

  2. #2
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Oui tout a fait.

    Voici un exemple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Var AButton : TButton;
    Procedure Form1.Button1Click(Sender : TObject);
    Begin
    AButton := Self.Button1;
    End;
     
    Procedure TForm1.UneMEthode;
    begin
    AButton.enable := True;
    End;
    DE maniere generale je manipule souvent une liste d'objets dont l'interface graphique de l'application permet d'en selectionner un et d'afficher ses données.
    J'utilise donc une variable globale "SelectedObject" qui recupere comme dans l'exemple ci dessus une isntance d'un des objets de ma liste.
    Apres mes methodes d'edition et de modification des proprietees agissent sur ma variable "SelectedObject" sans avoir a se soucier de qui est selectionné.

    Note : Les objets sont des pointeurs donc affecter a une 2e variable le contenu de la premiere n'effectue pas une copie complete des données mais juste le lien vers l'objet en memoire. Donc les 2 variables manipulent le meme objet et les memes données. LEs changements occasionnés par l'une affecte egalement la 2e variable ....

    Dans ton cas, je ne saisi pas trop l'interet d'une telle methode car pourquoi ne pas ecrire directement le code "Button3.Enable := True" dans le code du "OnClick" de ton bouton1 ?

  3. #3
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 30
    Par défaut
    merci pour ta reponse.

    En fait j'ai grandement simplifié. Pour résumer, je suis en train de faire un logiciel qui fait office de compteur pour une salle de billard.
    J'ai donc autant de compteurs que de billards (pour le moment 16)
    Or, j'ai tout un tas de fonctions qui se repetent avec pour seul changement les differents composants associés a chaque compteur ainsi que leurs timers respectifs etc...
    Du coup je suis obligé de copier-coller dans tous les sens en changeant a chaque fois le numero des updown et autres Tedit des que je rajoute une fonctionnalité sur un des compteurs.

    Je voudrais donc réunir les commandes dans une fonction principale avec des variables pour chaque composant, variables que je modifie selon le compteur que j'actionne.

    Un exemple de mon code :

    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
    //******************************************************************
    // Billard n°1 *****************************************************
    procedure TForm1.start1Click(Sender: TObject);
    begin
      if start1.Caption = 'Start' then
        if updown40.position > 0 then
          begin
          timer17.enabled := true;
          start1.Enabled := false;
          pause1.Enabled := true;
          start1.caption := 'Stop';
        end else
          begin
          start1.Enabled := false;
          pause1.Enabled := true;
          start1.caption := 'Stop';
          depart := now;
          temps1 := 0;
          timer1.enabled := true;
          totboi1 := 0;
          updown1.Position := 0;
          updown2.Position := 0;
          updown3.Position := 0;
          label1.Caption := 'Cafés';
          label2.Caption := 'Jus';
          label3.Caption := 'Bières';
        end else
          begin
          updown40.position := 0;
          label40.Caption := 'Heures';
          panel1.Color := clskyblue;
          poscafe := updown1.position;
          posjus := updown2.position;
          posbiere := updown3.position;
          totboi1 := poscafe + posjus + posbiere;
          prix := total1.Text;
          panel := panel1.Caption;
          billard := 'Billard n°1';
          DateTimeToString(jour, 'dd-mm-yyyy', date) ;
          assignfile(fboi,'C:\comptabilité\' + jour + ' - boissons.txt');
            if  FileExists('C:\comptabilité\' + jour +' - boissons.txt')
            then reecrireboi else ecrireboi;
          assignfile(fbi,'C:\comptabilité\' + jour + ' - billards.txt');
            if  FileExists('C:\comptabilité\' + jour +' - billards.txt')
            then reecrirebi else ecrirebi;
          pause1.caption := 'Pause';
          start1.Caption := 'Start';
          pause1.Enabled := false;
          timer1.Enabled := false;
          total1.Text := floattostr(totboi1 + strtofloat(prix));
          end;
    end;
    Donc je suis obligé de repeter 15 autre fois ce code en changeant a chaque fois pause1 par pause2 etc... au lieu de faire une seule fonction x=1 a 16 et pausex

  4. #4
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Oulala .... moi je sens deja l'usine a gaz

    Je te conseille plutot de partir sur une classe qui defini un billard.
    Avec en interne un TTimer qui gere le compteur, des mesthodes Start/Pause/Stop pour "piloter" le timer du billard, des methodes/Property pour recuperer le temps ecoulé, et les divers informations que tu formate un peu plus bas dans ton test.

    Ensuite, question graphique, j'opterais pour 3 uniques boutons : Start/Pause/Stop qui pilote le billard selectionné dans une liste affichée.

    Sinon tu peux aussi partir sur un TFrame, avec un compteur a afficher, les boutons, pause/Stop/Start, et tout le code associé a un seul billard.

    Ensuite tu ajoute 15 exeplaires de tes TFrames sur ta fiche.

    J'opterais pour une derivation d'un TPanel plutot que pour l'usage d'un TFrame, qui serait plus propre,mais demande de gerer dynamiquement la creation des composants au sein de ta classe.

    Sinon, une derniere solution serait de creer N tableaux de 15 elements : 1 pour les timers, 1 pour chaques bouttons, etc ...
    Une boucle for de 1 a 15 irait creer et affecter a chaques TabXXX[i] un composant (timer, bouton, etc ...) et le parametre.
    Ou bien affecter manuelement les composants deja cree en mode design aux differentes cases du tableaux.

    Apres, on peux acceder aux composants par l'index du tableaux, correspondant au numero de la table de billard

    Voila, a toi de chosir ce qui te convient le mieux en fonction de tes competences

  5. #5
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 30
    Par défaut
    Non non, c'est pas du tout une usine a gaz ^^

    J'ai créé des fonctionnalités adaptées a mes besoins reels. Mais ce programme ne se contente pas de declencher un compteur. Il calcule le prix en temps reel, et en fonction des consommations et du tarif horaire. Il tient une comptabilité automatiquement et permet de lancer un rebours. Et le top c'est que tout fonctionne

    Ceci dit je suis relativement noob en delphi et je ne saurais meme pas creer une classe et je ne connais pas le fonctionnement des tframes, par contre j'ai adapté le premier code que tu m'as donné et ca fonctionne a merveille.
    Je pense que je vais donc me contenter de ca, ce qui me facilitera deja grandement le travail ^^

  6. #6
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Citation Envoyé par quarkz Voir le message
    Non non, c'est pas du tout une usine a gaz ^^
    Vu le codage ca va pas tarder a venir :p

    Citation Envoyé par quarkz Voir le message
    Ceci dit je suis relativement noob en delphi et je ne saurais meme pas creer une classe et je ne connais pas le fonctionnement des tframes
    Je m'en suis douté un peu .. d'ou les differentes propositions
    Je ne peut pas me resoudre a proposer des solutions "bidouilles" alors j'en profite toujours pour donner des pistes "propres" au cas ou

    Citation Envoyé par quarkz Voir le message
    par contre j'ai adapté le premier code que tu m'as donné et ca fonctionne a merveille.
    Je pense que je vais donc me contenter de ca, ce qui me facilitera deja grandement le travail ^^
    Oui c'est deja une bonne piste.
    Essaye de voir le codage avec les tableaux, ca peut etre une bonne piste pour coller encore mieux au code que tu proposais : Buttons[i].enable

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

Discussions similaires

  1. petite question sur le composant IBX ...
    Par vbcasimir dans le forum Bases de données
    Réponses: 4
    Dernier message: 05/01/2005, 10h33
  2. aide sur les composants de la RxLib 2.75
    Par mariustrezor dans le forum Bases de données
    Réponses: 4
    Dernier message: 12/10/2004, 14h35
  3. problème sur le composant aspSmartUpload
    Par PrinceMaster77 dans le forum ASP
    Réponses: 8
    Dernier message: 23/09/2004, 10h17
  4. [C#] OnPaint(PaintEventArgs e) sur création Composant
    Par pc152 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 26/08/2004, 16h13
  5. Utilisation d'une variable sur plusieurs unités
    Par Yamaneko dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2003, 11h23

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