diff --git a/programs/cmm/TWB/TWB.c b/programs/cmm/TWB/TWB.c index 806532b427..160cf224f9 100644 --- a/programs/cmm/TWB/TWB.c +++ b/programs/cmm/TWB/TWB.c @@ -6,7 +6,6 @@ int downloader_id; dword buf; dword filesize; -dword blink; #define URL param @@ -97,8 +96,9 @@ void TWebBrowser::DrawPage() IF (s_text) DrawBuf.DrawBar(start_x, 4, line_length, 1, text_colors[text_color_index]); IF (u_text) DrawBuf.DrawBar(start_x, 8, line_length, 1, text_colors[text_color_index]); IF (link) { - UnsafeDefineButton(start_x-2, start_y, line_length + 3, 9, blink + BT_HIDE, 0xB5BFC9); + UnsafeDefineButton(start_x-2, start_y, line_length + 3, 9, PageLinks.count + 400 + BT_HIDE, 0xB5BFC9); DrawBuf.DrawBar(start_x, 8, line_length, 1, text_colors[text_color_index]); + PageLinks.AddText(#line, line_length, list.line_h); } stolbec += strlen(#line); } @@ -179,6 +179,7 @@ void TWebBrowser::ShowPage() address_box.size = address_box.pos = strlen(#editURL); address_box.offset=0; edit_box_draw stdcall(#address_box); + PageLinks.Clear(); if (!filesize) { @@ -206,7 +207,6 @@ void TWebBrowser::ParseHTML(dword bword){ byte ignor_param; char temp[768]; - if (blink<400) blink=400; else for ( ; blink>400; blink--;) DeleteButton(blink); b_text = i_text = u_text = s_text = blq_text = li_text = link = ignor_text = text_color_index = text_colors[0] = li_tab = condition_text_val = condition_text_active = 0; //îáíóëÿåì òåãè @@ -216,7 +216,6 @@ void TWebBrowser::ParseHTML(dword bword){ link_color_active = 0xFF0000; bg_color = 0xFFFFFF; DrawBuf.Fill(bg_color); - PageLinks.Clear(); strcpy(#header, #version); stroka = -list.first; stolbec = 0; @@ -462,7 +461,6 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) { text_colors[text_color_index] = text_colors[text_color_index-1]; link = 1; - blink++; text_colors[text_color_index] = link_color_inactive; PageLinks.AddLink(#options, stolbec*6+left1, top1); } @@ -477,7 +475,6 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) { } else { link = 0; - PageLinks.AddText(#line, strlen(#line)*6, list.line_h); IF(text_color_index > 0) text_color_index--; } return; diff --git a/programs/cmm/TWB/img_cache.h b/programs/cmm/TWB/img_cache.h index ebe32f5b51..99ecd5d6a3 100644 --- a/programs/cmm/TWB/img_cache.h +++ b/programs/cmm/TWB/img_cache.h @@ -96,7 +96,7 @@ void ImageCache::Images(int left1, top1, width1) img_draw stdcall (pics[cur_pic].image, left1-5, top1, w, h,0,img_lines_first); DrawBar(left1+w - 5, top1, WB1.list.w-w, h, bg_color); - IF (link) UnsafeDefineButton(left1 - 5, top1, w, h-1, blink + BT_HIDE, 0xB5BFC9); + IF (link) UnsafeDefineButton(left1 - 5, top1, w, h-1, PageLinks.count + 400 + BT_HIDE, 0xB5BFC9); } ImageCache ImgCache; \ No newline at end of file diff --git a/programs/cmm/TWB/links.h b/programs/cmm/TWB/links.h index 0e0323a941..c99cec22a1 100644 --- a/programs/cmm/TWB/links.h +++ b/programs/cmm/TWB/links.h @@ -5,8 +5,8 @@ struct array_link { struct LinksArray { - array_link links[100]; - char page_links[12000]; + array_link links[200]; + char page_links[64000]; dword buflen; int count, active; @@ -46,6 +46,8 @@ dword LinksArray::GetURL(int id) void LinksArray::Clear() { + int i; + for (i=0; i<=count; i++) DeleteButton(i+400); buflen = #page_links; count = 0; active = -1; @@ -73,4 +75,57 @@ void LinksArray::Hover(dword mx, my, link_col_in, link_col_a, bg_col) } -LinksArray PageLinks; \ No newline at end of file +LinksArray PageLinks; + + +/* +------------------ ÐŸÐ¾Ð´Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ 4 - загрузить курÑор ------------------- +Параметры: + * eax = 37 - номер функции + * ebx = 4 - номер подфункции + * dx = иÑточник данных: + * dx = LOAD_FROM_FILE = 0 - данные в файле + * ecx = указатель на полный путь к файлу курÑора + * файл курÑора должен быть в формате .cur, Ñтандартном Ð´Ð»Ñ + MS Windows, причём размером 32*32 пикÑÐµÐ»Ñ + * dx = LOAD_FROM_MEM = 1 - данные файла уже загружены в памÑÑ‚ÑŒ + * ecx = указатель на данные файла курÑора + * формат данных такой же, как и в предыдущем Ñлучае + * dx = LOAD_INDIRECT = 2 - данные в памÑти + * ecx = указатель на образ курÑора в формате ARGB 32*32 пикÑÐµÐ»Ñ + * edx = 0xXXYY0002, где + * XX = x-координата "горÑчей точки" курÑора + * YY = y-координата + * 0 <= XX, YY <= 31 +Возвращаемое значение: + * eax = 0 - неудача + * иначе eax = Ñ…Ñндл курÑора + +------------------ ÐŸÐ¾Ð´Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ 5 - уÑтановить курÑор ------------------ +УÑтанавливает новый курÑор Ð´Ð»Ñ Ð¾ÐºÐ½Ð° текущего потока. +Параметры: + * eax = 37 - номер функции + * ebx = 5 - номер подфункции + * ecx = Ñ…Ñндл курÑора +Возвращаемое значение: + * eax = Ñ…Ñндл предыдущего уÑтановленного курÑора +ЗамечаниÑ: + * ЕÑли передан некорректный Ñ…Ñндл, то Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð²Ð¾ÑÑтановит курÑор + по умолчанию (Ñтандартную Ñтрелку). Ð’ чаÑтноÑти, к воÑÑтановлению + курÑора по умолчанию приводит передача ecx=0. + +------------------- ÐŸÐ¾Ð´Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ 6 - удалить курÑор -------------------- +Параметры: + * eax = 37 - номер функции + * ebx = 6 - номер подфункции + * ecx = Ñ…Ñндл курÑора +Возвращаемое значение: + * eax разрушаетÑÑ +ЗамечаниÑ: + * КурÑор должен был быть ранее загружен текущим потоком + (вызовом подфункции 4). Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð½Ðµ удалÑет ÑиÑтемные курÑоры и + курÑоры, загруженные другими приложениÑми. + * ЕÑли удалÑетÑÑ Ð°ÐºÑ‚Ð¸Ð²Ð½Ñ‹Ð¹ (уÑтановленный подфункцией 5) курÑор, то + воÑÑтанавливаетÑÑ ÐºÑƒÑ€Ñор по умолчанию (ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð°Ñ Ñтрелка). + +*/ \ No newline at end of file