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 :

[D7] TrackBar personnalisée


Sujet :

Langage Delphi

  1. #1
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 405
    Points : 3 171
    Points
    3 171
    Par défaut [D7] TrackBar personnalisée
    Bonjour à tous,

    j'ai créé une TrackBar personnalisée qui s'affiche bien :

    Track1.zip

    Je voudrais y ajouter une procédure OnChange afin de pouvoir réagir à un changement de valeur dans la Form appelante. Mais je ne sais pas faire

    Quelqu'un peut il m'aider ?

    Merci
    A+
    Charly

  2. #2
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 614
    Points
    3 614
    Par défaut
    Si tu veux l'enregistrer comme composant le mieux est de remettre une partie de ce que tu as en Public dans une clause Published (même portée, mais prise en compte par l'IDE et à priori qu'avec des "property").

    Pour le onChange, ajoute juste un
    property onChange:TNotifyEvent;
    (Maj+Ctrl+C pour le laisser ajouter le reader et le writer)

    Dans ton code, lorsque la valeur change, tu fais juste

    if assigned(onChange) then onChange(Self);

  3. #3
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 614
    Points
    3 614
    Par défaut
    Au passage, pourquoi as-tu redéclaré les propriétés onMouseMove, Up et Down ? Tu veux t'en servir de l'extérieur du composant ou c'était pour en changer la portée venant de l'ancêtre?

  4. #4
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 405
    Points : 3 171
    Points
    3 171
    Par défaut
    Merci Patrick,

    je ne veux pas faire de composant, je préfère garder la classe dans une unité. Avec les compo, quand on change de version il faut tout réinstaller. Tu me diras avec D7 ... mais avec D10.4 CE c'est le cas. Alors, je préfère ajouter des unités à mes projets.

    Sinon j'ai codé : property onChange:TNotifyEvent et Ctrl+Maj+C m'a créé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      Private
        property onChange:TNotifyEvent read FonChange write SetonChange;
        ...
        procedure SetonChange(const Value: TNotifyEvent);
      Public
        ...
        property onChange:TNotifyEvent read FonChange write SetonChange;
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    { ====================================================================== }
    procedure TMyTracker.SetonChange(const Value: TNotifyEvent);
    begin
      FonChange := Value;
    end;
    { ====================================================================== }
    Mais comment appeler OnChange dans la Form (F_Princ) qui utilise TMyTracker ?

    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
    { ====================================================================== }
    procedure TF_Princ.FormCreate(Sender: TObject);
    begin
      Cir := TJaugeCir.Create(TabSheet2);   //  Cir est un compteur à aiguille
      Cir.Parent := TabSheet2 ;
      Cir.Left := 50 ;
      Cir.Top := 30 ;
      Cir.Width := 400 ;
      cir.Valeur := 30 ;
     
      ...
      Trk2 := TMyTracker.Create(TabSheet2);   //  là c'est mon Tracker
      Trk2.Parent := TabSheet2 ;
      Trk2.Left := 200 ;
      Trk2.Top := 504 ;
      Trk2.Largeur := 300 ;
      Trk2.PosLabel   := 1 ;
      Trk2.Maxi := Round(Cir.Maxi) ;
      Trk2.Mini := Round(Cir.Mini) ;
      Trk2.Position := Round(cir.Valeur) ;
      Trk2.Largeur := StrToIntDef(E_Largeur.Text, 300)  ;
      Trk2.Epaisseur := StrToIntDef(E_Epaisseur.Text, 6)  ;
      Trk2.Curseur := gdTrait ;
    Je voudrais que quand Trk2.Position change, Cir2.Position = Trk2.Position

    A+
    Charly

  5. #5
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 614
    Points
    3 614
    Par défaut
    Ca devient un événement, donc dans la forme tu crées une méthode (en copiant collant un BoutonClick par exemple) et tu fais juste un

    trk2.onChange :=TaMethode;

    (c'est l'identifiant, pas l'appel avec les paramètres, donc le pointeur vers le code associé à l'instance de ta fiche)

    Par contre, dans ce que le Maj+Ctrl+C t'as créé, il y a vraiment le doublon du property ou c'est une erreur de copier/coller ? (si la réponse est oui, vire la version privée et garde la publique)

  6. #6
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 614
    Points
    3 614
    Par défaut
    tu peux regarder cet exemple de projet, des fois j'utilise le composant en tant que tel, des fois je l'ajoute pas code comme toi (exemple bouton2click) :

    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
    procedure TForm2.Button2Click(Sender: TObject);
    begin
      with TOlfAboutDialog.Create(self) do
      begin
        Titre := 'TITRE DU LOGICIEL';
        VersionNumero := '8964';
        versiondate := '12/03/2022';
        url := 'https://developpeur-pascal.fr';
        description.text := 'description du logiciel';
        licence.Clear;
        for var i := 1 to 10 do
          licence.Add('licence du logiciel ligne ' + i.ToString);
        image := Image1;
        onURLClick := OlfAboutDialog1URLClick;
        Execute;
      end;
    end;

  7. #7
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 405
    Points : 3 171
    Points
    3 171
    Par défaut
    Bonjour Patrick,

    J'ai créé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    { ====================================================================== }
    Procedure TF_Princ.MaMethode ;
    Begin
      ShowMessage('Valeur Changée') ;
    End ;
    { ====================================================================== }
    et dans le Create de F_Princ j'ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      trk2.onChange := MaMethode ;
    Mais je n'ai pas les bons paramètres :

    [Erreur] Princ.pas(200): Types incompatibles : 'Les listes de paramètres diffèrent'
    [Erreur fatale] Princ.pas(7): Impossible de compiler l'unité utilisée 'Princ'
    Il faut un Sender ou un TNotifyEvent ?

    A+
    Charly

  8. #8
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 614
    Points
    3 614
    Par défaut
    TNotifyEvent c'est le type à utiliser pour être compatible avec un événement classique, mais si tu n'as pas besoin de paramètre, crée juste un type à toi et utilise le sur la déclaration de onChange

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Type
    TMyEventSansParam : procedure of object;

  9. #9
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 614
    Points
    3 614
    Par défaut
    Si tu es dispo une après-midi, passe me voir sur Twitch, j'peux interrompre mon sujet du jour pour faire des rappels/explications ponctuel(le)s rapides.

  10. #10
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 405
    Points : 3 171
    Points
    3 171
    Par défaut
    PS : le doublon c'est une erreur de copié collé !

  11. #11
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 405
    Points : 3 171
    Points
    3 171
    Par défaut
    Ok Merci

    A+
    Charly

  12. #12
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 405
    Points : 3 171
    Points
    3 171
    Par défaut
    Bonsoir Patrick,

    merci pour ce que tu fais sur Twitch. Mais mon niveau ne me permet souvent pas d'en profiter. Il me faudrait "la programmation Delphi pour les nuls" ou "La POO pour les nuls"

    Sinon j'ai suivi tes conseils et ça marche au poil.

    Voici le projet de test complet pour D7 (j'ai aussi la même chose en D10.4). Il y a la trackbar seule dans l'onglet 1, une jauge à cadran dans l'onglet 2 avec la connexion avec une trackbar, la même sous GdiPlus dans l'onglet 3, un compteur digital dans l'onglet 4. En plus il y a 2 sélecteurs de couleur (XColor2 et TabColor) :

    TrackBar.zip

    Voilà, merci pour tout (mon code est surement à améliorer, s'y quelqu'un veux s'y pencher ...)

    A+
    Charly

  13. #13
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 614
    Points
    3 614
    Par défaut
    Citation Envoyé par Charly910 Voir le message
    merci pour ce que tu fais sur Twitch. Mais mon niveau ne me permet souvent pas d'en profiter.
    Faut pas hésiter à me le dire même en direct. Surtout que je ne m'en rends pas forcément compte.

    En ce moment je suis repassé sur des GUI, donc beaucoup moins de code "bas niveau".

    Citation Envoyé par Charly910 Voir le message
    Il me faudrait "la programmation Delphi pour les nuls" ou "La POO pour les nuls"
    On y travaille

    Tu as jeté un oeil au dernier livre dispo ici ?

    Citation Envoyé par Charly910 Voir le message
    Sinon j'ai suivi tes conseils et ça marche au poil.
    tant mieux, c'est l'essentiel

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

Discussions similaires

  1. [langage] personnaliser le tri
    Par schnecke dans le forum Langage
    Réponses: 3
    Dernier message: 24/03/2004, 15h14
  2. Personnaliser un rapport d'erreur sous Windows XP
    Par Neilos dans le forum Windows
    Réponses: 5
    Dernier message: 21/11/2003, 18h13
  3. [FLASH MX2004] Personnaliser les scrollbars
    Par stephane eyskens dans le forum Flash
    Réponses: 10
    Dernier message: 09/10/2003, 12h53
  4. Comment effacer un Tick sur une TrackBar ?
    Par ZeImp dans le forum Composants VCL
    Réponses: 2
    Dernier message: 19/08/2003, 21h39
  5. [VB6] [UserControl] Évènements personnalisés
    Par Frankywinky dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 27/05/2003, 17h56

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