Existe-t-il un contrôle d’étiquette sélectionnable?

Je voudrais un contrôle d’étiquette sélectionnable, comme celui de la capture d’écran. Cela pourrait être fait avec un TEdit sans bordure, mais je me demandais s’il y avait une autre façon de travailler avec un fond dégradé?

exemple http://img.zgserver.com/windows/SelectableLabel.png.jpg

Pour clarifier, j’utilise un simple PageControl, qui depuis Win XP a un dessin en dégradé, un TEdit sans bordure placé sur une page ne se fond pas parfaitement:

Modifier sur un PageControl http://img.zgserver.com/windows/Gradient.png.jpg

Mettre à jour:

J’ai réussi à y arriver à mi-chemin en ajoutant

procedure CNCtlColorStatic(var AMsg: TWMCtlColorStatic); message CN_CTLCOLORSTATIC; procedure TTransparentEdit.CNCtlColorStatic(var AMsg: TWMCtlColorStatic); begin with ThemeServices do if ThemesEnabled then begin SetBkMode(AMsg.ChildDC, Windows.TRANSPARENT); DrawParentBackground(Handle, AMsg.ChildDC, nil, False); AMsg.Result := GetStockObject(NULL_BRUSH); end else inherited; end; 

Il est maintenant transparent, mais il faut faire autre chose, car peindre quand le texte est sélectionné ne fonctionne pas correctement. Le comportement est difficile à expliquer, je vais étudier plus avant et mettre à jour ici …

Les étiquettes ne sont pas modifiables. TLabel ne peut même pas recevoir le focus, car il n’hérite pas de TWinControl.

J’utiliserais un TEdit pour imiter votre capture d’écran:

 object Edit1: TEdit BorderStyle = bsNone ParentColor = True ReadOnly = True Text = 'Editable label' end 

(vous pouvez copier et coller le code ci-dessus dans votre formulaire)

La manière normale est d’utiliser un BorderStyle := bsNone sans BorderStyle := bsNone ( BorderStyle := bsNone ) et en lecture seule ( ReadOnly := true ), éventuellement associé à Color := clBtnFace , comme vous le dites. Cependant, les arrière-plans dégradés ne sont pas courants, et il n’existe pas de prise en charge prête à l’emploi pour ces derniers. Cependant, ce n’est pas trop difficile de le faire vous-même. Je vais essayer de trouver une solution simple en quelques minutes.

Mettre à jour

Dessiner dans des boîtes d’édition Windows n’est pas sortingvial. Êtes-vous sûr d’avoir besoin d’un fond dégradé? Vous pourriez bien sûr écrire votre propre contrôle – écrire un contrôle de type TEdit n’est pas si difficile. Je l’ai fait à quelques resockets. ( Preuve )

Mise à jour 2

Je ne l’ai pas essayé moi-même, et cela pourrait ne pas fonctionner avec des thèmes visuels, mais vous pourriez essayer de créer un contrôle `TEdit` transparent: http://www.delphi3000.com/articles/article_935.asp?SK=

Maintenant, je l’ai essayé, et cela ne fonctionne pas du tout sous Windows 7 avec Aero.