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 :

Assignations multiples de façon plus simple


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 608
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 608
    Par défaut Assignations multiples de façon plus simple
    Bonjour à toutes et à tous,

    Voici ma question, est t'il possible de faire plus simple que ceci (en bleu),

    J'ai essayé ce qui est en rouge mais forcément un bug :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if not cd2.Execute then exit else begin
    
    {TextTrayIcon1.Color := cd2.Color;
    TextTrayIcon2.Color := cd2.Color;
    TextTrayIcon3.Color := cd2.Color;
    TextTrayIcon4.Color := cd2.Color; }
    
     TextTrayIcon1.Color and TextTrayIcon2.Color and TextTrayIcon3.Color and
     TextTrayIcon4.Color := cd2.Color;
    end;
    Merci d'avance,

    @+,

    Cincap

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par cincap Voir le message
    Bonjour à toutes et à tous,

    Voici ma question, est t'il possible de faire plus simple que ceci (en bleu),

    J'ai essayé ce qui est en rouge mais forcément un bug :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if not cd2.Execute then exit else begin
    
    {TextTrayIcon1.Color := cd2.Color;
    TextTrayIcon2.Color := cd2.Color;
    TextTrayIcon3.Color := cd2.Color;
    TextTrayIcon4.Color := cd2.Color; }
    
     TextTrayIcon1.Color and TextTrayIcon2.Color and TextTrayIcon3.Color and
     TextTrayIcon4.Color := cd2.Color;
    end;
    Merci d'avance,

    @+,

    Cincap
    Pour faire simple je dirais que non

    ensuite si tu as un besoin récurant de modifier ces 4 variables tu peux dans le OnCreate de ta fiche alimenter un array ou une liste avec ces 4 objets que tu pourras alors parcourir dans une boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      for i := 0 to Length(TextTrayIcons) - 1 do
       TextTrayIcons[i].Color := cd2.Color;
    PS: ta proposition en rouge est amusante mais n'a aucun sens en Pascal
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 608
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 608
    Par défaut
    @ Paul TOTH, merci de ta proposition, en fait "TextTrayIcon1" est un composant et j'avais fait ceci qui forcément fonctionne :

    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
     
    procedure TMainForm.Dufond1Click(Sender: TObject);
    begin
     
    cd2.Color := TextTrayIcon1.Color or TextTrayIcon2.Color or TextTrayIcon3.Color
    or TextTrayIcon4.Color ;
     
    if not cd2.Execute then exit else begin
     
    TextTrayIcon1.Color := cd2.Color;
    TextTrayIcon2.Color := cd2.Color;
    TextTrayIcon3.Color := cd2.Color;
    TextTrayIcon4.Color := cd2.Color;
     
    end;
    end;
    PS: ta proposition en rouge est amusante mais n'a aucun sens en Pascal
    C'est pourquoi je suis membre "débutant"

    @+,

    Cincap

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Une façon de faire mais qui nécessite de coder une procédure/fonction supplémentaire serait de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure PutColor( const couleur: TColor; TrayIcons: array of TTrayIcons );
    var
     Cpt: Integer;
    begin
      for Cpt := Low(TrayIcons) to High(TrayIcons) do
       TrayIcons[Cpt].Color:= couleur;
    end;
     
    procedure TMainForm.Dufond1Click(Sender: TObject);
    begin
      PutColor( cd2.Color, [TextTrayIcon1, TextTrayIcon2, TextTrayIcon3, TextTrayIcon4] );
    end;
    Note qu'avec cette solution tu peux passer autant de TrayIcons que tu veux, il suffit de les ajouter dans le tableau ouvert

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 608
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 608
    Par défaut Excellent !
    @ Aka Guymelef, excellent cette procedure !

    N. B. pour créer mon fichier ini, j'étais obligé en gros de faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Ini.WriteInteger('Paramètres','Couleur du fond 1',TextTrayIcon1.color);
    Ini.WriteInteger('Paramètres','Couleur du texte 1',TextTrayIcon1.font.color);
    Ini.WriteInteger('Paramètres','Couleur du fond 2',TextTrayIcon2.color);
    Ini.WriteInteger('Paramètres','Couleur du texte 2',TextTrayIcon2.font.color);
    Ini.WriteInteger('Paramètres','Couleur du fond 3',TextTrayIcon3.color);
    Ini.WriteInteger('Paramètres','Couleur du texte 3',TextTrayIcon3.font.color);
    Ini.WriteInteger('Paramètres','Couleur du fond 4',TextTrayIcon4.color);
    Ini.WriteInteger('Paramètres','Couleur du texte 4',TextTrayIcon4.font.color);
    Avec ta méthode, je pourrai peut être aussi simplifier ce code ?

    @+,

    Cincap

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Pareil :

    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
    procedure WriteIniTrayIcons( TrayIcons: array of TTrayIcons );
    var
     Cpt: Integer;
    begin
      for Cpt := Low(TrayIcons) to High(TrayIcons) do
      begin
        Ini.WriteInteger('Paramètres','Couleur du fond ' + IntToStr(Cpt),TrayIcons[Cpt].color);
        Ini.WriteInteger('Paramètres','Couleur du texte ' + IntToStr(Cpt),TrayIcons[Cpt].font.color);
      end;
    end;
     
    [...]
    begin
      WriteIniTrayIcons( [TextTrayIcon1, TextTrayIcon2, TextTrayIcon3, TextTrayIcon4] );
    end;
    Petit bémol ici, les font et couleur sont numérotés par rapport à leur instances respectives (1 pour TextTrayIcon1, etc...) or dans ma routine j'utilise le compteur ce qui signifie que les objets doivent être passés dans l'ordre croissant exclusivement pour ne pas avoir de problème de numérotation.

    Je t'invites à aller te renseigner sur la notion de "tableau ouvert" pour mieux comprendre ce qu'il se passe ici et ainsi mieux appréhender tes futurs développements avec cette technique

  7. #7
    Membre émérite Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Par défaut
    Salut,

    moi je me demande pourquoi il y a 4 trayicons dans l'appli...

  8. #8
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 937
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 937
    Par défaut
    @Aka

    Je dirais qu'il te manque un IntToStr(Cpt+1). Un tableau ouvert commence toujours à l'indice 0 .

    Petit exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure ShowLow(Arg :array of integer);
    begin
      ShowMessage(IntToStr(Low(Arg)));
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      x : array[100..110] of integer;
    begin
      ShowLow(x);
    end;

  9. #9
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    @Aka

    Je dirais qu'il te manque un IntToStr(Cpt+1). Un tableau ouvert commence toujours à l'indice 0 .
    Merci pour la rectification Andnotor

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 608
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 608
    Par défaut
    Ohé, cela fonctionne sauf la sauvegarde du fichier *.ini.

    De plus, je constate lors du choix de la couleur Clblack du Tcolordialog, le fond s'affiche clWhite, je pense que c'est propre à ce composant TColorDialog.

    A mon avis pour le fichier *.ini, ma boucle n'est pas correcte.

    @+,

    Cincap

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 608
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 608
    Par défaut Ok bien compris !
    @ Aka Guymelef, grand merci pour ton aide, c'est comme cela que l'on progresse, en faisant partager les idées.

    @ Kaféine, tout simplement parceque je fais afficher mon Ip dans 4 TrayIcon plutôt que dans 1.

    Merci encore @ AndNotOr,

    @+,

    Cincap

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

Discussions similaires

  1. Demande de requête multiple la plus simple possible
    Par Blancos dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/04/2013, 15h55
  2. Transformer de façon propre une URL (plus simple qu’un substring)
    Par geforce dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 10/03/2012, 12h00
  3. Réponses: 10
    Dernier message: 24/05/2005, 14h09
  4. Pipes => pas plus simple ?
    Par Jorus dans le forum MFC
    Réponses: 4
    Dernier message: 02/02/2005, 17h53
  5. Format date : y'a forcément plus simple...
    Par ZERS dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/12/2004, 15h28

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