Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как поменять цвет текста у метки ? [D7, Win95/98, WinXP]


ipnet ©   (2004-09-13 20:34:00) 

Как поменять цвет текста у метки ?
Пробовал таким образом :
SetTextColor(GetDc(lbl2),RGB(0,128,128));
не выходит


ipnet   (2004-09-20 14:12:00) [1]

Вообщем кое как уменьшил я длину метки, подвел чтобы белого небыло видно.
Решил попробовать курсор менять.
{ Регистрация класса: }
lc.style := cs_hredraw or cs_vredraw;
lc.lpfnWndProc := @MyLblWndProc;
lc.cbClsExtra := 0;
lc.cbWndExtra := 0;
lc.hInstance := hInstance;
lc.hIcon := ExtractIcon(hInstance,PChar(Paramstr(0)),0);
lc.hCursor := LoadCursor(0,IDC_HAND);
lc.hbrBackground := COLOR_BTNFACE;
lc.lpszMenuName := nil;
lc.lpszClassName := 'static_web';
if RegisterClass(lc) = 0 then halt(0);

lbl1:=CreateWindowEx(0,'static_web','www.site.com',bs_pushbutton or ws_child or ws_visible or ws_tabstop,
46, 5, 66, 13, myWnd,0,hInstance,nil);
UnRegisterClass('static_web',hInstance);
Только вот одного не понял как сделать класс на основе static ?
Потому что созданый static_web текста не отображает, просто белый регион.
p.s. хочется довести до конца, так что если кто знает как можно эту проблему решить (и про курсор и про цвет и фон static) подскажите.


ipnet   (2004-09-19 15:49:00) [2]

Вопрос наполовину решил:
Сделал так:
создаю подчеркнутый шрифт:

fnt := CreateFontIndirect(lf); //создаем шрифт
oldFnt := SelectObject(hdc_s, fnt);//выбираем шрифт в контекст
SendMessage (lbl1, WM_SETFONT, fnt, 0);
SelectObject(hdc_s, oldFnt);//возвращаем в контекст старый шрифт
ReleaseDC(mywnd, hdc_s);//освобождаем контекст

потом
WM_CTLCOLORSTATIC:
begin
if lparam=lbl1 then
begin
SetTextColor(wparam,RGB(0,0,255));
// SetBkMode(wparam, TRANSPARENT );//делаем фон под буквами прозрачным
SetBkColor(wparam,GetSysColor(COLOR_BTNFACE));
result:=wparam;
end;
Собственно цвет изменил, но вот фон сделался цветом COLOR_BTNFACE только под текстом а если сделать
SetBkMode(wparam, TRANSPARENT) то фон остается белым. По высоте метку уменьшил, белого не видно а вот по ширине не получается, да и не выход это. Что еще менять надо ?


ipnet   (2004-09-16 15:04:00) [3]

вопрос по прежнему открыт


ipnet   (2004-09-15 16:56:00) [4]

Кроме поворота текста и установки его в static и edit ни к чему не пришел.
dc := GetDC(wnd);
lf.lfHeight := -30;
lf.lfWidth := 0;  
lf.lfEscapement := -90;
lf.lfOrientation := 0;
lf.lfWeight := 400;    
lf.lfItalic := 0;
lf.lfUnderline := 1;
lf.lfStrikeOut := 0;
lf.lfCharSet := RUSSIAN_CHARSET;
lf.lfOutPrecision := 0;
lf.lfClipPrecision := 0;
lf.lfQuality := ANTIALIASED_QUALITY;
lf.lfFaceName := 'Arial';
fnt := CreateFontIndirect(lf);  
oldFnt := SelectObject(dc, fnt);
SetBkMode(dc, TRANSPARENT);
SetTextColor(dc,RGB(255,0,0));
SendMessage (ed, WM_SETFONT, fnt, 0);
TextOut(dc, 100, 100, 'Sample Пример', 13);
SelectObject(dc, oldFnt);
ReleaseDC(wnd, dc);
Собственно хотелось сделать метку на подобие ссылки (кстати как сменить курсор для отдельного компонента), которая меняет цвет и подчеркивается
в wm_paint подобную картину нарисовал, но все таки хотелось бы со static. Все таки с ним потом обработка клика
и mouse move полегче будет


MBo   (2004-09-15 06:39:00) [5]

>а цвета в структуре hfont нет
Да, это я ошибся.


Sergey Kaminski   (2004-09-14 21:49:00) [6]

Но копать нужно где-то рядом.

См., например имплементацию

procedure TCanvas.CreateFont;
begin
 SelectObject(FHandle, Font.GetHandle);
  SetTextColor(FHandle, ColorToRGB(Font.Color));
end;


Также, см. MBo ©   (14.09.04 16:39) [3], ибо все равно нужно будет уведомить окно о смене фонта и перерисовке.


Sergey Kaminski   (2004-09-14 21:11:00) [7]

Нет, не проходит SetTextColor.


Sergey Kaminski   (2004-09-14 20:42:00) [8]

SetTextColor?
Только если это точно STATIC, а не TLabel VCL'овский.


ipnet   (2004-09-14 19:58:00) [9]

под меткой в данном случае подразумевается STATIC.

этим методом я смог установить только подчеркнутый шрифт и то несистемным шрифтом, а цвета в структуре hfont нет
CreateFont(0,0,0,0,FW_NORMAL,0,1,0,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,  nil)


DVM   (2004-09-14 16:47:00) [10]


> Так что средствами API сменить цвет метки невозможно ?

Возможно, возможно, так же как и на уже нарисованном на поверхности окна рисунке, что-то изменить. Неудобно только.

> GetDc(lbl2);

Эта штука в лучшем случае вернет DC того окна, на котором метка.
Потому и не работает.


MBo   (2004-09-14 16:39:00) [11]

Что подразумевается под меткой?
Если TLabel, то ответ прежний, а если STATIC - то нужно использовать WM_SETFONT


ipnet   (2004-09-14 16:30:00) [12]

Так что средствами API сменить цвет метки невозможно ?
что вы подразумеваете под средствами VCL ?


MBo   (2004-09-14 06:34:00) [13]

метка не является окном, так что к ней неприменимы соотв. APi-функции - работай средствами VCL.


Наверх

Титульная страница Поиск, карта сайта Написать письмо