Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.24;
Скачать: CL | DM;

Вниз

Как поменять цвет текста у метки ?   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2004.10.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.035 c
14-1096718672
VID
2004-10-02 16:04
2004.10.24
DOOM-3 зависает.


14-1096666396
quickblack
2004-10-02 01:33
2004.10.24
Проблема с входом в Win2000


14-1096979739
Игорь Шевченко
2004-10-05 16:35
2004.10.24
Нету ли в природе программы транслитерации русских символов?


6-1092399409
Blick
2004-08-13 16:16
2004.10.24
Изменение програмно IP адреса


4-1095613838
debuger
2004-09-19 21:10
2004.10.24
Работа с портами





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский