![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как поменять цвет текста у метки ? [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.