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.
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 )
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.