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 :

appel sur commande d'une procédure


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 71
    Points : 59
    Points
    59
    Par défaut appel sur commande d'une procédure
    J'aimerais faire appel une procédure (test) sur commande (en cliquant sur un button par exemple) mais le code est déja une procédure et ca ne fonctionne pas.
    Je ne suis pas un pro , de qu'elle facon procèder ???

    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
    66
    67
    68
    69
    70
    71
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ComCtrls, CheckLst;
     
    type
      TForm1 = class(TForm)
        ListBox1: TListBox;
        Button1: TButton;
        procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
          Rect: TRect; State: TOwnerDrawState);
        procedure Button1Click(Sender: TObject);
     
      private
     
        { Déclarations privées }
      public
     
     
     
        { Déclarations publiques }
      end;
     procedure test;
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.DFM}
     
    procedure test;
    begin
     
    ////  JE NE SAIS PAS QUOI METTRE ........
     
     
    end;
     
     
     
     procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    begin
      with(Control as TListBox).Canvas do  //Le dessin se fait sur le canevas du contrôle, pas dans la fiche
        begin
        //on choisit les couleurs en fonction de l'index
        if Index=7 then
        begin
           //fond
           Brush.Color:=clRed;
           //police
           Font.Color:=clYellow;
        end;
        FillRect(Rect);//efface le rectangle
        //dessin du texte
        TextOut(Rect.Left,Rect.Top,(Control as TListBox).Items[Index]);//affiche le texte
     
        end;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    test;
     
     
    end;
     
    end.

    Merci de votre précieuse aide

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Que dois faire la méthode test ? Car j'ai pas trop compris ce qu'elle devait faire.
    Tu veux qu'elle appelle ListBox1DrawItem ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 71
    Points : 59
    Points
    59
    Par défaut
    OUI, ou si il y aurais une facon plus simple pour
    afficher de la couleur sur un item spécifique d'un listbox .

    auriez vous un exemple de programme ??

    merci

  4. #4
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Juste une question.
    Tu as bien mis la propriété Styles à lbOwnerDrawFixed ?
    Car si c'est pour mettre certains items en couleurs, tu n'as rien à faire d'autres que l'événement OnDrawItem. Dans ce cas, la méthode test, n'est pas nécessaire(si j'ai bien compris tes attentes).

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 71
    Points : 59
    Points
    59
    Par défaut
    Oui ca été fait, mais si je veux par exemple que se soit l'index 3 6 et 7 qui affiche en couleur en cliquant sur un bouton, comment faire ???

  6. #6
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    un exemple complet avec bonus : un concept primaire de ramasse miette : voir Zip en PJ.
    Fichiers attachés Fichiers attachés
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 71
    Points : 59
    Points
    59
    Par défaut
    Merci pour l'exemple mais il me dit toujour

    [erreur fatale] listitemcolor.pas(6) fichier non trouve Variants.dcu

    pourquoi?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 71
    Points : 59
    Points
    59
    Par défaut
    J'ai Delphi 5

  9. #9
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    Citation Envoyé par cre3000 Voir le message
    J'ai Delphi 5
    espece de cromagnon!

    c'est balot ... essaye en virant Variants de la clause Uses de l'interface... ça devrait aller ... je crois.
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 71
    Points : 59
    Points
    59
    Par défaut
    Ca déja été fait et sa ne fonctionne toujours pas.

    Savez sur qu'elle site je pourrais acheté un composant listbox modifier(même payant) qui pourrais seulement colorer un item spécifique sur la listbox en cliquant sur un boutton.


  11. #11
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Salut

    Tu ne vas pas acheter un composant pour ca ! Ce n'est pas très compliqué, inspire toi des exemples !

    Regarde, tu as déja fait le plus gros du travail : tu as écrit (ou copié ) la procedure ListBox1DrawItem. Cette procedure se charge de colorier l'index n°7 c'est bien ca ? Et bien tu changes le test Index=7 par ce que tu veux, et il te coloriera les indexs que tu veux. Ensuite, il te suffit d'appeler ta procedure ListBox1DrawItem en lui donnant les bons parametres ...

    Pour ton probleme de Variant, je ne vois pas trop d'ou ca peux venir ...

    Bonne chance, si je suis a coté de la plaque, dis le moi !

  12. #12
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    c'est clair, je ne comprend pas non plus le probleme de l'unité Variant...

    à vrai dire, Delphi 5 est tellement vieux que ça m'etonne pas de toute façon.
    c'est comme ceux qui utilise encore TP7 sous XP/Vista/Seven ... et veulent faire des programmes complexe ...

    bon, faudrait peut être envisager de passer au nouvelle version, c'est quand même mieux d'avoir un IDE recent.

    travailler sur du vieux machin, c'est risquer de ne plus pouvoir avoir d'aide correcte et d'avoir en permanence ce genre de surprise.
    on est de moins en moins à travailler sur des Delphi plus vieux que D7.

    http://delphi.developpez.com/telecharger/gratuit/

    soit D7 soit D2005. avec D2005 tu sera peut être un peu dépaysé au début, mais on s'y fait vite.

    si tu regarde ici :
    http://deefaze.ftp-developpez.com/de...ifications.pdf

    tu verra que D5/D6 date de 2001, D7 de 2002 et D2005/Turbo Explorer date de 2004 et D2006/Turbo Explorer 2006 date de 2006.

    travailler sur un IDE qui as moins de 5 ans c'est mieux quand même.

    les editions PLE sont gratuite, D6/D7 PLE ne permettent pas de faire du developpement commercial, par contre la licence de D2005/D2006 PLE permettent d'en faire.

    à toi de choisir ce qui est le mieux pour toi.
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 71
    Points : 59
    Points
    59
    Par défaut
    C'est la le problème je ne sais pas comment mettre les bon paramètres pour
    appelé la procédure en changeant la variable b par 8 avec un boutton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     
    ListBox1DrawItem(??????????);
     
    end;
    Je comprend que delphi5 est vieux mais je ne suis pas prêt pour changer
    car je suis plutôt conservateur.


    En espérant que quelqu'un pourra m'aider , merci d'avance

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 743
    Points : 13 299
    Points
    13 299
    Par défaut
    Commençons par le commencement .

    Pour demander au ListBox de se redessiner, il suffit d'invoquer Invalidate ou Repaint. C'est ensuite la ListBox qui se chargera d'appeller le gestionnaire OnDrawItem en fonction de ces besoins (les lignes visibles).

    Ensuite OnDrawItem survient pour chaque ligne visible de la ListeBox. (Index représente une ligne). Il faut par conséquent tester dans cet événement si la ligne correspond ou non aux critères et le cas échéant reseter les couleurs. On ne défini pas uniquement les données d'une variable temporaire (propre à la fonction), mais bien les données du Canvas de l'objet.

    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
    var
      MonIndex :integer;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      MonIndex := 8;
      ListBox1.Invalidate;
    end;
     
    procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    begin
      with TListBox(Control).Canvas do
      begin
        if Index = MonIndex then
        begin
           Brush.Color := clRed;
           Font.Color  := clYellow;
        end
        else
        begin
           Brush.Color := clWindow;
           Font.Color  := clWindowText;
        end;
     
        FillRect(Rect);
        InflateRect(Rect, -2, -2);  //Marges de 2 pixels
        TextOut(Rect.Left, Rect.Top, Items[Index]);
      end;
    end;
    C'est l'idée, mais il faudrait encore ajouter des tests en fonction de State.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 71
    Points : 59
    Points
    59
    Par défaut
    Un gros merci ca fonctionne.

    est ce vraiment nécessaire d'inclure // Brush.Color := clWindow;
    // Font.Color := clWindowText;
    car j'ai enlevé c'est deux code et sa fonctionne quand même bien

    j'ai rajouter TextOut(Rect.Left,Rect.Top,(Control as TListBox).Items[Index]); sinon il y avait une erreur de compilation.



    code finale
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        ListBox1: TListBox;
        procedure Button1Click(Sender: TObject);
        procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
          Rect: TRect; State: TOwnerDrawState);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.DFM}
     
     
    var
      MonIndex,index2 :integer;
     
     
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      MonIndex := 3;
      index2:=5;
      ListBox1.Invalidate;
    end;
     
     
    procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    begin
    with TListBox(Control).Canvas do
     
     
      begin
        if Index = MonIndex then
        begin
           Brush.Color := clRed;
           Font.Color  := clYellow;
        end;
     
        if Index = index2 then
        begin
           Brush.Color := clblue;
           Font.Color  := clYellow;
        end;
     
        //else
       // begin
          // Brush.Color := clWindow;
          // Font.Color  := clWindowText;
       // end;
     
        FillRect(Rect);
        InflateRect(Rect, -2, -2);  //Marges de 2 pixels
        TextOut(Rect.Left,Rect.Top,(Control as TListBox).Items[Index]);
      //end;
       // TextOut(Rect.Left, Rect.Top, Items[Index]);
      end;
    end;
     
    end.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 743
    Points : 13 299
    Points
    13 299
    Par défaut
    1. Etonnant. Mais si ça fonctionne sans définir systématiquement les couleurs, tant mieux Tu verras à l'usage !

    2. Oui, bien sûr ! Item est une propriété du TListBox et non du Canvas. Tu aurais aussi pu modifier la ligne with comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with TListBox(Control), Canvas do

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 71
    Points : 59
    Points
    59
    Par défaut
    le p'tit québecois vous dit merci a tous pour votre aide



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

Discussions similaires

  1. Mauvais bouton appelé sur commande "Enter"
    Par Dos dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 15/12/2011, 17h48
  2. Appel de commande dans une variable
    Par Fanny28 dans le forum Shell et commandes GNU
    Réponses: 11
    Dernier message: 18/05/2011, 09h40
  3. Erreur sur execution d'une procédure stockée
    Par Loubna.B dans le forum C#
    Réponses: 6
    Dernier message: 16/07/2009, 14h24
  4. Appel de fonction dans une procédure stockée
    Par Nuloprog dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/12/2008, 16h00
  5. Appeler un WebService depuis une procédure stockée
    Par kheironn dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 18/11/2007, 12h10

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