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

Lazarus Pascal Discussion :

Modification (infime) d'un composant : coincé par manque de connaissances


Sujet :

Lazarus Pascal

  1. #1
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut Modification (infime) d'un composant : coincé par manque de connaissances
    Bonjour,

    Je voudrais juste pouvoir colorer le fond d'un TUpDown, propriété non prévue au départ, résultat, quand on modifie la couleur de la fiche et des composants qui sont dessus, le UpDown reste tout seul tout moche
    Tout ce que j'arrive à faire, entre deux AV, c'est de modifier la couleur des coins (je ne sais même pas à quoi ils correspondent), par contre, pour les boutons avec les flèches, je n'arrive à rien, ou à des AV...

    J'ai essayé de m'inspirer d'un article (qui a l'air clair, propre, bien écrit), mais je n'arrive à rien (genre quand j'arrive à compiler, c'est l'AV direct à l'exécution...), et les recherches avec des mots-clé aussi génériques ne remontent rien, ou que des choses à côté (comme trop souvent...)

    Un ch'tit coup de main serait le bienvenu et, non, je ne montre pas de code, il n'y a rien à voir (en fait, je ne sais même pas si ce que j'ai écrit est juste, pas moyen de trouver un tuto sans insultes à la compil et/ou AV's à l'exécution...)
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  2. #2
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Salut JP,

    Un TUpDown est un composant dérivé de TCustomControl (= un TWinControl + un Canvas). Il sert de "panel conteneur". Voir comctrls.pp
    Sur ce composant sont placés deux boutons de type TUpDownButton.
    TUpDownButton est un composant dérivé de TSpeedButton. Voir customupdown.inc qui contient toute l'implémentation.

    Donc faire : UpDown1.Color:= clblue --> ne va changer que la couleur du TCustomControl --> tu ne vois que la couleur sur les bords, le reste étant masqué par les 2 boutons.

    Pour modifier le dessin des boutons, il faut dans le customupdown.inc modifier la procedure TUpDownButton.Paint

    Dans cette procedure : le inherited Paint fait appel au dessin par défaut du fond et du contour (dépendant de l'OS).
    Le reste, c'est le dessin des flèches. Tu peux faire un test en modifiant Pen.Color
    Pour modifier le fond, il faut supprimer le "inherited Paint" et travailler (p.ex) avec un Canvas.FillRect.

    Pour ne pas "abimer" le composant par défaut, je ne vois comme solution que de créer un nouveau composant (p.ex. TUpDownEx) dans une unité spécifique. Unité qui utilisera son propre fichier inc modifié.
    Et alors ajouter des propriétés au composant : dessin du fond, couleur des flèches.

    Si tu veux, je veux bien me pencher sur le code, mais il faut que je trouve du temps.

    Cordialement
    Thierry

  3. #3
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Io, Thierry,
    Citation Envoyé par ThWilliam Voir le message
    Si tu veux, je veux bien me pencher sur le code, mais il faut que je trouve du temps.

    Cordialement
    Thierry
    Merci pour cette première piste, qui va me permettre d'avancer dans une meilleure direction que jusqu'à présent. Te prends pas la tête pour l'instant, je verrai ça en fin d'aprème.

    Maintenant, si quelqu'un a une autre piste, genre simplement rajouter un type en haut de l'unité du programme (comme j'ai déjà vu sous Delphi), parce que franchement, créer un nouveau compo juste pour recolorer deux boutons, c'est un peu l'enclume contre la mouche, je trouve

    Citation Envoyé par ThWilliam Voir le message
    Donc faire : UpDown1.Color:= clblue --> ne va changer que la couleur du TCustomControl --> tu ne vois que la couleur sur les bords, le reste étant masqué par les 2 boutons.
    Oui, j'avais remarqué aussi et je ne comprenais pas pourquoi : ton explication me va à ravir.

    Est-ce pour ça que les développeurs n'ont pas publié cette propriété ? Car si tu n'avais pas écrit UpDown1.Color, je n'aurais même pas eu l'idée de le taper (oui, j'aurais pu attendre la complétion et voir ce qui venait, mais je ne m'attendais pas à y trouver cette propriété puisque je ne la vois pas dans l'inspecteur d'objet...)
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Bon, c'est mal barré cette affaire, sans un tuto, car là, j'ai l'impression qu'il me faut faire une double dérivation, en cascade : dériver un UpDown et ensuite lui trafiquer ses SpeedButtons, nan ?

    Sauf qu'il suffit que je m'aventure sur ce terrain chatouilleux et sensible pour me faire une récolte d'AV que si c'était des billets de 100, fouhhh, je serais riche

    Un peu de code, pour voir si je suis dans la bonne direction ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    type
      TUpDownColoredButtons = class(TSpeedButton) // a besoin de uses Buttons
      private
        FCanvas: TCanvas;
      public
        property Canvas: TCanvas read FCanvas write FCanvas;
        constructor Create(TheOwner: TComponent; param: TColor);
        destructor Destroy; override;
        procedure Paint; override;
      end;
    Déjà, quand je mets ça et les procédures qui vont bien dans l'implémentation, le compilateur n'est pas content :
    Warning: An inherited method is hidden by "constructor TUpDownColoredButtons.Create(TComponent,TGraphicsColor);"
    et face à cette agression verbale je suis un peu comme une poule qui aurait trouvé un couteau.

    Et il y a ça, aussi :
    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
    constructor TUpDownColoredButtons.Create(TheOwner : TComponent; param: TColor);
    begin
      inherited Create(TheOwner);
    //  FCanvas.Pen.Color:= param;  // AV !
    end;
     
    procedure TUpDownColoredButtons.Paint;
    begin
      inherited Paint;
    //  Canvas.Pen.Color:= clGreen; // AV !
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      UpDownColoredButtons := TUpDownColoredButtons.Create(Self, clGreen);
      with UpDownColoredButtons do begin
        parent := Form1;
        Left := 112; Top := 130; Height := 25; Width :=  40;
    //    Canvas.Pen.Color:= clGreen; // AV !
        //Orientation := udHorizontal; //erreur si décommenté, ce qui montre bien qu'on n'est pas dans le monde des "UpDown"
      end;
      UpDown1.Color:=clRed; // pour voir un vrai UpDown
    end;
    Avec les 3 lignes d'AV commentées, j'arrive à faire afficher un bête bouton sur la fiche : on est loin du UpDown coloré que j'espère...
    D'autres idées, des tutos ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Maintenant, si quelqu'un a une autre piste, genre simplement rajouter un type en haut de l'unité du programme (comme j'ai déjà vu sous Delphi), parce que franchement, créer un nouveau compo juste pour recolorer deux boutons, c'est un peu l'enclume contre la mouche, je trouve
    Bonjour Jipété,

    Je crois que Thierry t'a indiqué la seule solution réaliste : partir de l'ancêtre immédiat pour redessiner le contrôle. Contrairement à ce que tu sembles croire, colorer deux boutons n'est pas insignifiant, car c'est le comportement final qui se joue ! De plus, créer un composant n'est pas si difficile que ça (voir ici - c'est de moi ).

    Il existe une autre méthode plus récente (mais moins orthodoxe par rapport à la POO et aux limites à bien maîtriser) qui permet de modifier une classe dont le code est inaccessible en partie : les helpers (assistants de classe). Voir ici. Ou ici pour Lazarus -en anglais. C'est pour ta culture personnelle .
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  6. #6
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Bonsoir, Gilles,

    et merci pour le retour.
    Citation Envoyé par gvasseur58 Voir le message
    Bonjour Jipété,

    Je crois que Thierry t'a indiqué la seule solution réaliste : partir de l'ancêtre immédiat pour redessiner le contrôle. Contrairement à ce que tu sembles croire, colorer deux boutons n'est pas insignifiant, car c'est le comportement final qui se joue ! De plus, créer un composant n'est pas si difficile que ça (voir ici - c'est de moi ).
    J'étudie ça attentivement et te (vous) tiens au courant, bien sûr.

    Cependant, on ne m'ôtera pas de l'idée que si on peut créer un composant en partant d'un autre et en mettant tout dans un autre fichier, on doit (devrait ?) pouvoir faire la même chose en dynamique, non ?
    Si tu veux, je n'ai pas envie d'installer un compo s'il y a moyen de faire autrement : j'ai le souvenir d'avoir créé, en D7 sous w2k un composant qui comportait icône, TEdit, TGauge et d'autres trucs, tout ça en dynamique ! Tu vas sans doute me dire que ça n'a rien à voir ? Je ne sais pas, au final...
    'fin bon, je vais lire ta doc avec attention
    Grand merci.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    J'ai eu une autre idée : comme je n'ai pas envie et pas le temps de passer deux semaines là-dessus, je me demande si je ne vais pas tout simplement prendre 1 TEdit et 2 TSpeedButtons TBitBtns, aligner tout ça dans un TPanel et ça le fera très bien.
    Car cette histoire de TUpDown colorisé, c'est juste pour une utilisation, alors je crois que ça ira bien comme ça.

    Ne vous prenez pas la tête, merci pour tout.

    Je ne clique pas sur car il ne faudrait pas que quelqu'un faisant des recherches un jour tombe sur cette discussion et la pense résolue, ce qui n'est pas le cas.

    EDIT : voilà, en 15 minutes :
    Nom : updown_gris.png
Affichages : 114
Taille : 5,6 Ko Nom : updown2.png
Affichages : 114
Taille : 5,4 Ko

    C'est beau, non ?
    Encore un petit quart d'heure pour gérer les clics des boutons et hop !
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Cependant, on ne m'ôtera pas de l'idée que si on peut créer un composant en partant d'un autre et en mettant tout dans un autre fichier, on doit (devrait ?) pouvoir faire la même chose en dynamique, non ?
    Si tu veux, je n'ai pas envie d'installer un compo s'il y a moyen de faire autrement : j'ai le souvenir d'avoir créé, en D7 sous w2k un composant qui comportait icône, TEdit, TGauge et d'autres trucs, tout ça en dynamique !
    Bonjour,

    Tu as raison : il est (toujours) possible de créer un composant dynamiquement, donc sans installation. La solution de Thierry n'exige pas d'installation, même si cette dernière facilite bien des choses (dont l'affectation des événements, par exemple).
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/07/2007, 18h37
  2. [sqlServer2005]coincé par une requéte.
    Par zitoun dans le forum Langage SQL
    Réponses: 3
    Dernier message: 15/05/2007, 16h20
  3. Réponses: 3
    Dernier message: 30/09/2006, 20h09
  4. BDD coincée par le fichier .ldb
    Par Gaubs dans le forum Access
    Réponses: 3
    Dernier message: 18/04/2006, 18h44
  5. [MySQL] Modification des données d'une base par les membres
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 22/03/2006, 18h25

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