Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GlassFrame + PageControl: прозрачные заголовки. Как сделать текст непрозрачным 
V
    Опции темы
TheTipTop
  Дата 25.10.2011, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 25.10.2011

Репутация: нет
Всего: нет



Здравствуйте.

Делаю приложение, в котором вкладки PageControl должны располагаться на "стекле". Но есть одна небольшая, но очень неприятная проблема - сквозь текст просвечивает все, что находится под ним - эффекты стекла, нижние окна или рабочий стол. На скрине хорошо видно, как портит текст лежащая на рабочем столе папка.

С расположенными на стекле TLabel помогает установка GlowSize, но в данном случае использование функции DrawThemeTextEx с GlowSize не дает нормального результата. Прозрачность у текста присутствует всегда, независимо от его цвета. Кто-нибудь знает, в какую сторону копать?

Delphi 2010, Win7.

Присоединённый файл ( Кол-во скачиваний: 40 )
Присоединённый файл  glass.png 57,86 Kb
PM MAIL   Вверх
TheTipTop
  Дата 28.10.2011, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 25.10.2011

Репутация: нет
Всего: нет



Сам спросил - сам ответил smile 
Достаточно добавить промежуточное изображение BMP, отрисовать текст на нем и скопировать полученное изображение на вкладку.
Функция-прослойка для отображения текста выглядит так:

Код

procedure DrawGlassText(Canvas: TCanvas; GlowSize: Integer; var Rect: TRect;
  var Text: UnicodeString; Format: DWORD); overload;
var
  DTTOpts: TDTTOpts;
  Color: TColor;
  BMP: TBitMap;
  RectBMP: TRect;
begin
  if GetWinVersion < wvWinVista then
  begin
    DrawTextW(Canvas.Handle, PWideChar(Text), Length(Text), Rect, Format);
    Exit;
  end;
  ZeroMemory(@DTTOpts, SizeOf(DTTOpts));
  DTTOpts.dwSize := SizeOf(DTTOpts);
  DTTOpts.dwFlags := DTT_COMPOSITED or DTT_TEXTCOLOR;
  DTTOpts.iTextShadowType := TST_NONE;
  DTTOpts.iBorderSize := 0;
  DTTOpts.fApplyOverlay := True;
  if Format and DT_CALCRECT = DT_CALCRECT then
    DTTOpts.dwFlags := DTTOpts.dwFlags or DTT_CALCRECT;
  Color := ColorToRGB(Canvas.Font.Color);
  DTTOpts.crText := Color;
  if GlowSize > 0 then
  begin
    DTTOpts.dwFlags := DTTOpts.dwFlags or DTT_GLOWSIZE;
    DTTOpts.iGlowSize := GlowSize;
  end;
  BMP := TBitMap.Create;
  BMP.PixelFormat := pf32bit;
  BMP.Width := Rect.Right - Rect.Left;
  BMP.Height := Rect.Bottom - Rect.Top;
  RectBMP := Classes.Rect(0, 0, BMP.Width, BMP.Height);
  BMP.Canvas.Brush := Canvas.Brush;
  BMP.Canvas.FillRect(RectBMP);
  with ThemeServices.GetElementDetails(teEditTextNormal) do
    DrawThemeTextEx(ThemeServices.Theme[teEdit], BMP.Canvas.Handle, Part,
      State, PWideChar(Text), Length(Text), Format, @RectBMP, DTTOpts);
  RectBMP := Classes.Rect(0, BMP.Height, BMP.Width, 0);
  Canvas.CopyRect(Rect, BMP.Canvas, RectBMP);
  BMP.Free;
end;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0657 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.