Question

J'essaie d'hériter de TButton afin de fournir des fonctionnalités tenant compte de la taille, dans lesquelles les boutons peuvent se redimensionner et / ou la taille de la police (dans certaines contraintes) pour permettre des modifications de texte

par exemple

| petit |

ou

| & nbsp; & nbsp; c'est vraiment & nbsp; & nbsp; |
| phrase sur un bouton |

pourrait heureusement être le même bouton sur le même formulaire, tout ce que j'ai fait est de réinitialiser le texte et le bouton s'adapte au changement de taille.

J'ai implémenté toutes les fonctions de mesure de texte et la fonctionnalité fonctionne jusqu'à un point .

Ce que j’ai fait est de créer de nouvelles propriétés maxHeight, minHeight, defaultHeight et ainsi de suite pour Width et Font.

Lorsque l'utilisateur modifie la hauteur par défaut, mon composant de temps de conception change et reflète cette nouvelle hauteur par défaut.

Lorsque l'utilisateur utilise le paramètre normal Hauteur & amp; Les propriétés de largeur cependant (ou traîne le coin) je ne sais pas comment les lier à la hauteur et à la largeur par défaut.

J'ai intercepté OnCanResize, créé un gestionnaire d'événements et tenté de confirmer que la nouvelle taille se situe dans les limites de max. Si ce n'est pas le cas, définissez les valeurs min ou max requises, mais mettez-les à jour si elles sont dans les limites. Je suis capable d'intercepter les événements de redimensionnement à l'exécution, mais pas le temps de conception.

S'il est possible d'intercepter les redimensionnements au moment de la conception, est-ce que quelqu'un sait comment?

désolé si c'est un peu long, espérons que cela a du sens!

Était-ce utile?

La solution

Remplacez la méthode virtuelle SetBounds (). À partir de là, vous pouvez ajuster les dimensions demandées par l'utilisateur selon vos besoins avant de les transmettre à la méthode ancêtre SetBounds (). Par exemple:

class TMyButton : public TButton
{
    typedef TButton inherited;

public:
    ...
    virtual void __fastcall SetBounds(int ALeft, int ATop, int AWidth, int AHeight);

__published:
    __property int MaxHeight = ...;
    __property int MinHeight = ...;
    ...
};

virtual void __fastcall SetBounds(int ALeft, int ATop, int AWidth, int AHeight)
{
    if (AHeight > MaxHeight) AHeight = MaxHeight;
    if (AHeight < MinHeight) AHeight = MinHeight;
    ...
    inherited::SetBounds(ALeft, ATop, AWidth, AHeight);
}

Autres conseils

N'oubliez pas qu'un bouton est toujours une fenêtre et qu'il peut (va) répondre à WM_GETMINAXINFO . Je pense que la plupart des outils de conception respectent les codes ptMinTrackSize et ptMaxTrackSize (les noms sont au moins similaires à ceux-là).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top