Форум: "WinAPI";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];
ВнизКак поменять цвет текста у метки ? Найти похожие ветки
← →
ipnet (2004-09-13 20:34) [0]Как поменять цвет текста у метки ?
Пробовал таким образом :
SetTextColor(GetDc(lbl2),RGB(0,128,128));
не выходит
← →
MBo © (2004-09-14 06:34) [1]метка не является окном, так что к ней неприменимы соотв. APi-функции - работай средствами VCL.
← →
ipnet © (2004-09-14 16:30) [2]Так что средствами API сменить цвет метки невозможно ?
что вы подразумеваете под средствами VCL ?
← →
MBo © (2004-09-14 16:39) [3]Что подразумевается под меткой?
Если TLabel, то ответ прежний, а если STATIC - то нужно использовать WM_SETFONT
← →
DVM © (2004-09-14 16:47) [4]
> Так что средствами API сменить цвет метки невозможно ?
Возможно, возможно, так же как и на уже нарисованном на поверхности окна рисунке, что-то изменить. Неудобно только.
> GetDc(lbl2);
Эта штука в лучшем случае вернет DC того окна, на котором метка.
Потому и не работает.
← →
ipnet © (2004-09-14 19:58) [5]под меткой в данном случае подразумевается 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)
← →
Sergey Kaminski © (2004-09-14 20:42) [6]SetTextColor?
Только если это точно STATIC, а не TLabel VCL"овский.
← →
Sergey Kaminski © (2004-09-14 21:11) [7]Нет, не проходит SetTextColor.
← →
Sergey Kaminski © (2004-09-14 21:49) [8]Но копать нужно где-то рядом.
См., например имплементацию
procedure TCanvas.CreateFont;
begin
SelectObject(FHandle, Font.GetHandle);
SetTextColor(FHandle, ColorToRGB(Font.Color));
end;
Также, см. MBo © (14.09.04 16:39) [3], ибо все равно нужно будет уведомить окно о смене фонта и перерисовке.
← →
MBo © (2004-09-15 06:39) [9]>а цвета в структуре hfont нет
Да, это я ошибся.
← →
ipnet © (2004-09-15 16:56) [10]Кроме поворота текста и установки его в 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 полегче будет
← →
ipnet © (2004-09-16 15:04) [11]вопрос по прежнему открыт
← →
ipnet © (2004-09-19 15:49) [12]Вопрос наполовину решил:
Сделал так:
создаю подчеркнутый шрифт:
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-20 14:12) [13]Вообщем кое как уменьшил я длину метки, подвел чтобы белого небыло видно.
Решил попробовать курсор менять.
{ Регистрация класса: }
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) подскажите.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.033 c