Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
3-1095917409
Настенька
2004-09-23 09:30
2004.10.24
сложный поиск


14-1096568677
Роман
2004-09-30 22:24
2004.10.24
Easu GPRS


4-1095444827
Antonmm2
2004-09-17 22:13
2004.10.24
Нажатие кнопок другого приложения


1-1097330321
CoolMan
2004-10-09 17:58
2004.10.24
Скрытый поиск по маске с копированием


1-1097178595
dms_main
2004-10-07 23:49
2004.10.24
Application.minimize





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский