2008-10-21 2 views
3

Comment puis-je créer un Delphi TSpeedButton ou SpeedButton en C# 2.0?Comment puis-je créer un Delphi TSpeedButton ou SpeedButton en C# 2.0?

+0

Quelles sont les caractéristiques que vous essayez exactement de répliquer? – JamesSugrue

+0

Je suis en train de dupliquer la fonctionnalité "pas de focus" quand quelqu'un clique sur le bouton. Raison: J'essaie de créer un clavier intégré dans une application Windows. Ce clavier doit pouvoir envoyer le coup de clé au contrôle qui a le focus avant d'appuyer sur le bouton du clavier. –

Répondre

0

Est-ce que this aide? On dirait que vous devez gérer l'événement OnPaint, et ne pas prendre ... se concentrer

0

Le bouton régulier .net 2.0 prend en charge une partie de ce qu'est un TSpeedButton Est-ce que:

  • glyphe: image
  • plat: FlatStyle

Il ne gère pas:

  • vers le bas
  • Groupe

Ces deux sont liés, vous pourriez hériter du bouton et OwnerDraw, en ajoutant des fonctionnalités vers le bas et du Groupe.

Codeproject has an example des boutons ownerdraw.

3

Je me demande si vous voulez créer un contrôle comme un TSpeedButton, ou vous avez juste besoin même genre de résultat final ...

programmation à partir de zéro est certainement possible, mais je ne tacle qui comme un exercice d'apprentissage.

En supposant que vous voulez obtenir un résultat final similaire ...

TSpeedButton de Delphi avait une différence de la norme TButton que les développeurs ont trouvé utile - il était plat, ne pas prendre le focus, et consommé moins de ressources que un bouton normal (car il n'avait pas de poignée Windows sous-jacente).

Lesquelles sont importantes pour vous?

Si vous voulez juste un bouton plat qui n'accepte pas le focus, utilisez un bouton normal avec FlatStyle = Flat (ou PopUp) et TabStop = false. Vous pouvez configurer un glyphe en définissant la propriété Image ou une combinaison de ImageList et ImageIndex/ImageKey. Une alternative à cela serait de rechercher un composant de bouton existant qui se rapproche de vos besoins - un endroit à regarder pourrait être le Krypton Toolkit (libre d'utiliser, voir http://www.componentfactory.com/toolkit_buttoncontrols.php).

Si vous souhaitez réduire le nombre de ressources consommées par votre application, vous obtiendrez probablement un meilleur rendement en regardant ailleurs.

À l'époque de Windows 3.1 (Delphi 1) et Windows 95 (Delphi 2), le nombre de descripteurs disponibles était strictement limité, avec un nombre maximum de systèmes disponibles. Aujourd'hui, avec Windows XP et Vista, le nombre de poignées disponibles est beaucoup plus élevé, et le nombre est par processus et non par système. À moins de créer des milliers et des milliers de boutons, il est très peu probable que vous en soyez à court de ressources.

2

L'utilisation d'un bouton et la définition de la propriété TabStop sur false ne fonctionnent que lorsque vous tapez sur le formulaire ...

Si vous avez besoin (comme je l'ai fait) d'un bouton qui n'est pas sélectionné lorsque vous cliquez dessus, il n'y a qu'une seule façon de le faire.

La façon dont je l'ai fait, était sous-classe de la classe Button et dans le constructeur appelant les SetStyles et mettant ainsi sélectionnable sur false, comme ceci:

public class ButtonNoFocus : Button 
{ 
    public ButtonNoFocus() 
     : base() 
    { 
     base.SetStyle(ControlStyles.Selectable, false); 
    } 
} 

Cela a fonctionné pour moi, et il est parfait si vous par exemple avoir un panneau de contrôle avec des boutons qui effectuent des actions à un objet sélectionné ...

Questions connexes