|
Вопрос # 2 051/ вопрос открыт / |
|
Здравствуйте, эксперты!
У меня такая проблема.
На форме имеется несколько компонентов ListBox и нужно поверх них поставить Label с текстом. Но так как label имеет родительский клас -TGraphicControl а ListBox - TWinControl то соответственно ListBoxы перекрывают текст.
Пробовал ставить вместо label StaticText (родительский клас-TWinControl) но у него прозрачности нету, а это важно!
Как с этим бороться!
Заранее благодарен!
 |
Вопрос задал: 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 (статус: Посетитель), 5 ноября 2008, 13:28 [#2]:
Скажем так нужно вывести
сообщение о том что включился демо режим!
Но прибегать к диалогам и окошкам нельзя!
Нужно чтобы форма и все компоненты были доступны и видимы!
|
|
Вадим К (статус: Академик), 5 ноября 2008, 13:50 [#3]:
Как эмоционально
А всё ведь можно решить через Canvas.TextOut(Xкоордината,Yкоордината,"текст для вывода");
И вставить это в обработчкий отрисовки компонента. Правда вначале стоит вызывать встроенный обработчик, а потом поверху дорисовывать.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Marshall (статус: Посетитель), 5 ноября 2008, 14:54 [#4]:
Спасибо Вадим К!
Буду пробовать!
|
|
Marshall (статус: Посетитель), 6 ноября 2008, 12:16 [#5]:
Не получилось!
Либо я что-то не так делал.
1. Листбоксов несколько (3 штуки) и все в центре формы (по горирозтали) и не маленькие.
2. В листбоксах канвасом отрисовую рамки и текст.
3. На форме расположена картинка.
4. выводимый текст должен быть крупным и через все листбоксы
З.Ы. Склоняють к мысли породить клас от СтатикТекст и наградить его прозрачностью.
Спасибо за помощь!
|
|
Вадим К (статус: Академик), 6 ноября 2008, 12:43 [#6]:
Отрисовку наверно следует вставить в OnPaint формы.
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|