Можно ли выбрать элемент управления ярлыком? - PullRequest
5 голосов
/ 27 июля 2010

Я хотел бы выбрать элемент управления ярлыком, как на скриншоте. Это можно сделать с помощью TEdit без полей, но мне было интересно, есть ли другой способ работы с градиентным фоном?

пример http://usera.ImageCave.com/brk303/SelectableLabel.png.jpg

Чтобы уточнить, я использую простой PageControl, который, поскольку Win XP имеет градиентное рисование, TEdit без полей, размещенный на странице, не идеально сочетается:

Редактировать на PageControl http://usera.ImageCave.com/brk303/Gradient.png.jpg

Обновление:

Мне удалось пройти половину пути, добавив

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;

Теперь это прозрачно, но нужно что-то еще сделать, поскольку рисование при выделении текста не работает должным образом. Поведение трудно объяснить, я буду исследовать дальше и обновлять здесь ...

Ответы [ 2 ]

8 голосов
/ 27 июля 2010

Метки не редактируются. TLabel даже не может получить фокус, потому что он не наследуется от TWinControl.

Я бы использовал TEdit для имитации вашего скриншота:

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

(вы можете скопировать и вставить вышеуказанный код в форму)

3 голосов
/ 27 июля 2010

Обычный способ - использовать без полей (BorderStyle := bsNone) и только для чтения (ReadOnly := true) TEdit, возможно, в сочетании с Color := clBtnFace, как вы говорите.Тем не менее, градиентные фоны не распространены, и нет никакой встроенной поддержки для таких.Однако это не так уж сложно сделать самостоятельно.Я постараюсь найти простое решение в течение нескольких минут.

Обновление

Рисование в полях редактирования Windows не является тривиальным.Вы уверены, что вам нужен градиентный фон?Конечно, вы можете написать свой собственный элемент управления - на самом деле написать элемент управления, похожий на TEdit, не так уж и сложно.Я сделал это несколько раз.( Proof )

Обновление 2

Я сам не пробовал, и он может не работать с визуальными темами, но вы можете попробовать создать прозрачный `TEdit`control: http://www.delphi3000.com/articles/article_935.asp?SK=

Теперь я попробовал, и он не работает вообще под Windows 7 с Aero.

...