Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 051

/ вопрос открыт /

Здравствуйте, эксперты!
У меня такая проблема.
На форме имеется несколько компонентов ListBox и нужно поверх них поставить Label с текстом. Но так как label имеет родительский клас -TGraphicControl а ListBox - TWinControl то соответственно ListBoxы перекрывают текст.
Пробовал ставить вместо label StaticText (родительский клас-TWinControl) но у него прозрачности нету, а это важно!
Как с этим бороться!
Заранее благодарен!

Marshall Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Marshall (статус: Посетитель)
Вопрос отправлен: 5 ноября 2008, 11:22
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Feniks

Здравствуйте, Marshall!
Вадим прав! Зачем искать приключения и изобретать велосипед, когда все решение под носом ? ;-)
Используйте функцию TextOut, а что бы ваш выводимый текст был без фона и прозрачным, как TLabel, используйте сначала SetBkMode:

begin
   SetBkMode(Canvas.Handle, transparent); 
   TextOut(Canvas.Handle,x,y,PChar(txt), Length(txt));
end;

А вот так можно вывести текст под углом:
procedure TextOutAngle(x,y,aAngle,aSize: integer; txt: string); 
var hFont, Fontold: integer; 
   DC: hdc; 
   Fontname: string; 
begin 
if length(txt)= 0 then 
   EXIT; 
DC:= Screen.ActiveForm.Canvas.handle; 
SetBkMode(DC, transparent); 
Fontname:= Screen.ActiveForm.Canvas.Font.Name; 
hFont:= CreateFont(-aSize,0, aAngle*10,0, fw_normal,0, 0, 
                    0,1,4,$10,2,4,PChar(Fontname)); 
Fontold:= SelectObject(DC, hFont); 
TextOut(DC,x,y,PChar(txt), length(txt)); 
SelectObject(DC, Fontold); 
DeleteObject(hFont); 
end;

P.S. Желаю удачи.

Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 5 ноября 2008, 15:44
Оценка за ответ: 4


Мини-форум вопроса

Всего сообщений: 6; последнее сообщение — 6 ноября 2008, 12:43; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 5 ноября 2008, 11:43 [#1]:

А зачем это??? я даже непредставляю. может можно решить проблему более мирным путём?
Галочка "подтверждения прочтения" - вселенское зло.
Marshall

Marshall (статус: Посетитель), 5 ноября 2008, 13:28 [#2]:

Скажем так нужно вывести
сообщение о том что включился демо режим!
Но прибегать к диалогам и окошкам нельзя!
Нужно чтобы форма и все компоненты были доступны и видимы!
Вадим К

Вадим К (статус: Академик), 5 ноября 2008, 13:50 [#3]:

Как эмоционально:)
А всё ведь можно решить через Canvas.TextOut(Xкоордината,Yкоордината,"текст для вывода");
И вставить это в обработчкий отрисовки компонента. Правда вначале стоит вызывать встроенный обработчик, а потом поверху дорисовывать.
Галочка "подтверждения прочтения" - вселенское зло.
Marshall

Marshall (статус: Посетитель), 5 ноября 2008, 14:54 [#4]:

Спасибо Вадим К!
Буду пробовать!
Marshall

Marshall (статус: Посетитель), 6 ноября 2008, 12:16 [#5]:

Не получилось!
Либо я что-то не так делал.
1. Листбоксов несколько (3 штуки) и все в центре формы (по горирозтали) и не маленькие.
2. В листбоксах канвасом отрисовую рамки и текст.
3. На форме расположена картинка.
4. выводимый текст должен быть крупным и через все листбоксы
З.Ы. Склоняють к мысли породить клас от СтатикТекст и наградить его прозрачностью.
Спасибо за помощь!
Вадим К

Вадим К (статус: Академик), 6 ноября 2008, 12:43 [#6]:

Отрисовку наверно следует вставить в OnPaint формы.
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:28
Выполнено за 0.02 сек.