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

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 446
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 446
    Points : 1 333
    Points
    1 333
    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 sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    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

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 446
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 446
    Points : 1 333
    Points
    1 333
    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 chevronné

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    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 expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 446
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 446
    Points : 1 333
    Points
    1 333
    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 chevronné

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    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 éclairé 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
    Points : 736
    Points
    736
    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 753
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 753
    Points : 13 338
    Points
    13 338
    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 expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 446
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 446
    Points : 1 333
    Points
    1 333
    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

  10. #10
    Membre chevronné

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    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

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 446
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 446
    Points : 1 333
    Points
    1 333
    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

+ 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