Главная страница
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.5 MB
Время: 0.025 c
3-1096443366
NewDelpher
2004-09-29 11:36
2004.10.24
Апострофы в MS SQL


4-1095197102
vertal
2004-09-15 01:25
2004.10.24
Формирование ToUnicode CMap для True Type шрифта в PDF документе


1-1097138190
Akoli
2004-10-07 12:36
2004.10.24
как написать на делфях COPY FILE1 + FILE2 FILE3


3-1096257220
NoG
2004-09-27 07:53
2004.10.24
Вопрос по MicroKernel DateBase (*.cmw)


1-1097505960
gigabyte
2004-10-11 18:46
2004.10.24
Как работать с Microsoft Agent?