| 
| 
 | Вопрос # 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 формы. Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |