54 / 3 / 2
Регистрация: 17.05.2014
Сообщений: 72
1

Существуют ли какие-нибудь библиотеки C++ для работы с HTML

26.06.2014, 17:21. Показов 14118. Ответов 47
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста, существуют ли какие-нибудь библиотеки С++ для работы с HTML (вывод формы из файла html, получение значений из полей, вообщем чтобы можно было написать форму на html, а работать из С++)? Само собой чтобы html выводился в графическое окно

Добавлено через 26 минут
Вроде нашел что можно как то подключить web-kit...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.06.2014, 17:21
Ответы с готовыми решениями:

Какие есть библиотеки для работы с MYSQL
Всем привет. Я ищу простую (С++) библиотеку для работы с MYSQL. Программа консольная, среда Visual...

Для работы с методом fopen(filename, "rb"); какие библиотеки нужно подключать?
Знаю, что для работы с методом fopen используется: #include <stdio.h> Может есть другие...

про библиотеки в VS C++ (какие библиотеки нужны для функций 'cout' и 'cin')
какие библиотеки нужны для функций 'cout' и 'cin' ???

Какие существуют способы выделения памяти для переменных?
А какие существуют способы выделять память для переменных?

47
54 / 3 / 2
Регистрация: 17.05.2014
Сообщений: 72
27.06.2014, 20:47  [ТС] 21
Author24 — интернет-сервис помощи студентам
Avazart, не явно.
Подключаешь htmlayout.lib которая с sdk идет
0
1 / 1 / 0
Регистрация: 10.04.2011
Сообщений: 30
06.12.2014, 13:15 22
deniska91, вы разобрались как обрабатывать элементы управления html интерфейса?

Добавлено через 43 секунды
У меня сейчас просто та же проблема.. я смогла подключить интерфейс, а вот как получить контрол понять не могу...
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
06.12.2014, 13:23 23
Тема актуальна, простого примера где к примеру создается одна кнопка и вешается на нее обработчик я не нашел.
0
1 / 1 / 0
Регистрация: 10.04.2011
Сообщений: 30
06.12.2014, 14:08 24
Avazart, а не подскажете, почему вот так

C++
1
2
LPCWSTR Name = L"F:\\Рабочий стол\\Работа\\projects\\test_htmlayout\\Resourses\\index.html";
    HTMLayoutLoadFile(hMainWnd, Name);
интерфейс работает, а вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
                        char Name[MAX_PATH];
    
                GetModuleFileNameA(NULL, Name, MAX_PATH);           
                
                for (int i = 0; i <= strlen(Name); i++)
                {
                    if (Name[i] == "\\")
                    {
                        Name[i] = "\\\\";
                    }
                }
 
                removeExe(Name);
                strcat(Name, "Resourses\\index.html");
                                
                HTMLayoutLoadFile(hMainWnd, Name);
не работает.

Добавлено через 2 минуты
упс.. не удалила цикл.. в общем без цикла последний код должен быть

C++
1
2
3
4
5
6
7
8
char Name[MAX_PATH];
    
                GetModuleFileNameA(NULL, Name, MAX_PATH);           
                                
                removeExe(Name);
                strcat(Name, "Resourses\\index.html");
                                
                HTMLayoutLoadFile(hMainWnd, Name);
0
54 / 3 / 2
Регистрация: 17.05.2014
Сообщений: 72
06.12.2014, 18:27  [ТС] 25
Простейший пример работы с HTMLayout:

1. Создаем пустой Win32 проект.
2. Создаем окно
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <Windows.h>
 
LRESULT CALLBACK WindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
 
int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
    WNDCLASSEX mainWindow;
 
    memset( &mainWindow, 0, sizeof( WNDCLASSEX ));
 
    mainWindow.cbSize        = sizeof( WNDCLASSEX );
    mainWindow.hbrBackground = ( HBRUSH )GetStockObject( WHITE_BRUSH );
    mainWindow.hCursor       = LoadCursor( NULL, IDC_ARROW );
    mainWindow.hInstance     = hInstance;
    mainWindow.lpfnWndProc   = WindowProc;
    mainWindow.lpszClassName = _T( "Example" );
 
    RegisterClassEx( &mainWindow );
 
    HWND hWnd = CreateWindowEx( NULL, mainWindow.lpszClassName, _T( "Example" ), WS_VISIBLE | WS_OVERLAPPEDWINDOW, \
                                CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, \
                                HWND_DESKTOP, NULL, hInstance, 0 );
 
    if ( NULL == hWnd )
    {
        MessageBox( NULL, _T( "Error creating window" ), _T( "Error" ), MB_OK );
        return EXIT_FAILURE;
    }
 
    MSG uMsg;
    BOOL bRet;
    while( 0 != ( bRet = GetMessage( &uMsg, NULL, 0, 0 )))
    {
        if ( -1 == bRet )
        {
            return EXIT_FAILURE;
        }
        else    
        {
            TranslateMessage( &uMsg );
            DispatchMessage( &uMsg );
        }
    }
    
    return uMsg.wParam;
}
 
LRESULT CALLBACK WindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
    switch( uMsg )
    {
        case WM_CREATE:
            return 0;
 
        case WM_DESTROY:
            PostQuitMessage( 0 );
            return 0;
    }
    return DefWindowProc( hWnd, uMsg, wParam, lParam );
}


3. Подключаем библиотеку HTMLayout и создаем структуру обработки событий
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <HTMLayout\htmlayout.h>
#pragma comment ( lib, "HTMLayout.lib" )
 
struct DOMEventsHandlerType: htmlayout::event_handler
{
      DOMEventsHandlerType(): event_handler( 0xFFFFFFFF ) {}
      virtual BOOL handle_event ( HELEMENT he, BEHAVIOR_EVENT_PARAMS& params ) 
      { 
        switch( params.cmd )
        {
        case BUTTON_CLICK:              break; // click on button   
        case BUTTON_PRESS:              break;// mouse down or key down in button
        case BUTTON_STATE_CHANGED:      break;
        case EDIT_VALUE_CHANGING:       break;// before text change
        case EDIT_VALUE_CHANGED:        break;//after text change
        case SELECT_SELECTION_CHANGED:  break;// selection in <select> changed
        case SELECT_STATE_CHANGED:      break;// node in select expanded/collapsed, heTarget is the node
        case POPUP_REQUEST: 
                                        break;// request to show popup just received, 
                                              //     here DOM of popup element can be modifed.
        case POPUP_READY:               break;// popup element has been measured and ready to be shown on screen,
                                              //     here you can use functions like ScrollToView.
        case POPUP_DISMISSED:           break;// popup element is closed,
                                              //     here DOM of popup element can be modifed again - e.g. some items can be removed
                                              //     to free memory.
        case MENU_ITEM_ACTIVE:                // menu item activated by mouse hover or by keyboard
             break;
        case MENU_ITEM_CLICK:                 // menu item click 
             break;
 
 
            // "grey" event codes  - notfications from behaviors from this SDK 
        case HYPERLINK_CLICK:           break;// hyperlink click
        case TABLE_HEADER_CLICK:        break;// click on some cell in table header, 
                                              //     target = the cell, 
                                              //     reason = index of the cell (column number, 0..n)
        case TABLE_ROW_CLICK:           break;// click on data row in the table, target is the row
                                              //     target = the row, 
                                              //     reason = index of the row (fixed_rows..n)
        case TABLE_ROW_DBL_CLICK:       break;// mouse dbl click on data row in the table, target is the row
                                              //     target = the row, 
                                              //     reason = index of the row (fixed_rows..n)
 
        case ELEMENT_COLLAPSED:         break;// element was collapsed, so far only behavior:tabs is sending these two to the panels
        case ELEMENT_EXPANDED:          break;// element was expanded,
 
        }
        return FALSE; 
      }
 
} DOMEventsHandler;


4. Подцепляем HTMLayout к созданному окну в callback-функции WindowProc
C++
1
2
3
BOOL bHandled;
LRESULT lResult = HTMLayoutProcND( hWnd, uMsg, wParam, lParam, &bHandled );
if ( 0 != bHandled ) return lResult;
5. Аттачим структуру обработки событий при событии WM_CREATE и заодно подгружаем страницу:
C++
1
2
htmlayout::attach_event_handler(hWnd, &DOMEventsHandler);
HTMLayoutLoadFile( hWnd, _T( "Тут путь к файлу html" ));
6. После всего этого, мы сможем в структуре DOMEventsHandlerType отлавливать сообщения загруженной html страницы. Однако, есть некоторые нюансы, например, чтобы отлавливать нажатие на элемент div, этому элементу в стиле нужно добавить псевдо-стиль behavior:button; Это придает элементу div свойства кнопки
0
54 / 3 / 2
Регистрация: 17.05.2014
Сообщений: 72
06.12.2014, 18:28  [ТС] 26
Вот простой пример нажатия кнопки
Сначала код html страницы:
Кликните здесь для просмотра всего текста
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<html>
<head>
<style>
#myButton{
    behavior: button;
    width: 100px;
    height: 30px;
    text-align:center;
    line-height: 30px;
    background-color: #BABABA;
    color: #434343;
    border: 1px solid #0D0D0D;
    cursor: pointer;
}
#myButton:hover{
    color: #222222;
}
#myButton:active{
    font-weight: bold;
}
</style>
</head>
<body>
<div id = "myButton">Click me</div>
</body>
</html>


И полный С++ код (сделал для простоты все в одном cpp файле)
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <HTMLayout\htmlayout.h>
#include <tchar.h>
#include <Windows.h>
 
#pragma comment ( lib, "HTMLayout.lib" )
 
LRESULT CALLBACK WindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
 
struct DOMEventsHandlerType: htmlayout::event_handler
{
      DOMEventsHandlerType(): event_handler( 0xFFFFFFFF ) {}
      virtual BOOL handle_event ( HELEMENT he, BEHAVIOR_EVENT_PARAMS& params ) 
      { 
        switch( params.cmd )
        {
        case BUTTON_CLICK: 
        {// click on button        
            htmlayout::dom::element el = params.heTarget;
            HWND hWnd = el.get_element_hwnd( true );
            if ( !wcscmp( el.get_attribute( "id" ), _T( "myButton" )))
                MessageBox( hWnd, _T( "You click on the button" ), _T( "Message" ), MB_OK );
            break;
        }   
        case BUTTON_PRESS:              break;// mouse down or key down in button
        case BUTTON_STATE_CHANGED:      break;
        case EDIT_VALUE_CHANGING:       break;// before text change
        case EDIT_VALUE_CHANGED:        break;//after text change
        case SELECT_SELECTION_CHANGED:  break;// selection in <select> changed
        case SELECT_STATE_CHANGED:      break;// node in select expanded/collapsed, heTarget is the node
        case POPUP_REQUEST: 
                                        break;// request to show popup just received, 
                                              //     here DOM of popup element can be modifed.
        case POPUP_READY:               break;// popup element has been measured and ready to be shown on screen,
                                              //     here you can use functions like ScrollToView.
        case POPUP_DISMISSED:           break;// popup element is closed,
                                              //     here DOM of popup element can be modifed again - e.g. some items can be removed
                                              //     to free memory.
        case MENU_ITEM_ACTIVE:                // menu item activated by mouse hover or by keyboard
             break;
        case MENU_ITEM_CLICK:                 // menu item click 
             break;
 
 
            // "grey" event codes  - notfications from behaviors from this SDK 
        case HYPERLINK_CLICK:           break;// hyperlink click
        case TABLE_HEADER_CLICK:        break;// click on some cell in table header, 
                                              //     target = the cell, 
                                              //     reason = index of the cell (column number, 0..n)
        case TABLE_ROW_CLICK:           break;// click on data row in the table, target is the row
                                              //     target = the row, 
                                              //     reason = index of the row (fixed_rows..n)
        case TABLE_ROW_DBL_CLICK:       break;// mouse dbl click on data row in the table, target is the row
                                              //     target = the row, 
                                              //     reason = index of the row (fixed_rows..n)
 
        case ELEMENT_COLLAPSED:         break;// element was collapsed, so far only behavior:tabs is sending these two to the panels
        case ELEMENT_EXPANDED:          break;// element was expanded,
 
        }
        return FALSE; 
      }
 
} DOMEventsHandler;
 
 
 
int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
    WNDCLASSEX mainWindow;
 
    memset( &mainWindow, 0, sizeof( WNDCLASSEX ));
 
    mainWindow.cbSize        = sizeof( WNDCLASSEX );
    mainWindow.hbrBackground = ( HBRUSH )GetStockObject( WHITE_BRUSH );
    mainWindow.hCursor       = LoadCursor( NULL, IDC_ARROW );
    mainWindow.hInstance     = hInstance;
    mainWindow.lpfnWndProc   = WindowProc;
    mainWindow.lpszClassName = _T( "Example" );
 
    RegisterClassEx( &mainWindow );
 
    HWND hWnd = CreateWindowEx( NULL, mainWindow.lpszClassName, _T( "Example" ), WS_VISIBLE | WS_OVERLAPPEDWINDOW, \
                                CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, \
                                HWND_DESKTOP, NULL, hInstance, 0 );
 
    if ( NULL == hWnd )
    {
        MessageBox( NULL, _T( "Error creating window" ), _T( "Error" ), MB_OK );
        return EXIT_FAILURE;
    }
 
    MSG uMsg;
    BOOL bRet;
    while( 0 != ( bRet = GetMessage( &uMsg, NULL, 0, 0 )))
    {
        if ( -1 == bRet )
        {
            return EXIT_FAILURE;
        }
        else    
        {
            TranslateMessage( &uMsg );
            DispatchMessage( &uMsg );
        }
    }
    
    return uMsg.wParam;
}
 
LRESULT CALLBACK WindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
    BOOL bHandled;
    LRESULT lResult = HTMLayoutProcND( hWnd, uMsg, wParam, lParam, &bHandled );
    if ( 0 != bHandled ) return lResult;
 
    switch( uMsg )
    {
        case WM_CREATE:
            htmlayout::attach_event_handler(hWnd, &DOMEventsHandler);
 
            HTMLayoutLoadFile( hWnd, _T( "D:\\Projects\\C++\\Lessons\\HTMLayout\\Example\\index.html" ));
            return 0;
 
        case WM_DESTROY:
            PostQuitMessage( 0 );
            return 0;
    }
    return DefWindowProc( hWnd, uMsg, wParam, lParam );
}
0
1 / 1 / 0
Регистрация: 10.04.2011
Сообщений: 30
07.12.2014, 12:32 27
deniska91, спасибо большое! я про структуру ничего не знала, с этим вы мне ооочень помогли!
а вы не пробовали вместо пути
C++
1
HTMLayoutLoadFile( hWnd, _T( "Тут путь к файлу html" ));
писать переменную, в которую вы будете находить путь. Это же намного удобнее, если проект нужно перенести на другую машину. Я так пыталась сделать, но не получается отобразить интерфейс, хотя в переменную записывается правильный путь.
0
54 / 3 / 2
Регистрация: 17.05.2014
Сообщений: 72
07.12.2014, 22:01  [ТС] 28
Катеринк@, у себя в программе я все HTML страницы загонял в файл ресурсов, который подключал к программе.

Полный путь я привел в примере для простоты
0
1 / 1 / 0
Регистрация: 10.04.2011
Сообщений: 30
07.12.2014, 22:30 29
deniska91, спасибо я совсем затупила.. с самого начала его в ресурсы положила, а использовать почему-то не захотела
0
54 / 3 / 2
Регистрация: 17.05.2014
Сообщений: 72
07.12.2014, 23:22  [ТС] 30
Катеринк@, если будете загружать файл из ресурсов, тогда воспользуйтесь следующим кодом
C++
1
2
3
4
5
6
7
HRSRC hRes;
hRes = FindResource( NULL, /*Тут имя ресурса*/, RT_RCDATA );
HMODULE hMod = GetModuleHandle( NULL );
HGLOBAL hGlob = LoadResource( hMod, hRes );
BYTE* lpbArray = ( BYTE* )LockResource( hGlob );
HTMLayoutLoadHtml( hWnd, lpbArray, SizeofResource( hMod, hRes ));
FreeResource( hGlob );
0
1 / 1 / 0
Регистрация: 10.04.2011
Сообщений: 30
07.12.2014, 23:31 31
deniska91, а я вот так сделала
C++
1
2
LPCWSTR Name = L"index.htm";
HTMLayoutLoadFile(hMainWnd, Name);
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.07.2016, 21:45 32
Народ а кто-то разбирался со Sciter (производным от HTMLayout)?
Есть опыт/примеры какие нибудь ссылки на блоги идр что бы быстрее разобраться?
1
39 / 39 / 8
Регистрация: 03.05.2013
Сообщений: 178
19.07.2016, 05:25 33
После нескольких месяцев разработки увидел свет первый релиз быстрого и самодостаточного HTML парсера MyHTML. Код написан на языке Си и распространяется под лицензией LGPL v2.1. На основе данного проекта разрабатывается рендер HTML, написанный на "голом" Си без зависимостей, способный формировать результирующий образ страниц без использования движков, подобных WebKit и Gecko.

Есть статья на хабре. Парсер выдает дерево элементов, по этому дереву строй форму в си
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
19.07.2016, 05:38 34
Цитата Сообщение от Avazart Посмотреть сообщение
Народ а кто-то разбирался со Sciter (производным от HTMLayout)?
Пару дней назад смотрел доки,
пока еще добром ничего не вкурил.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.07.2016, 10:48 35
Как то муторно устроено.

C++
1
2
3
4
5
  class window : public aux::asset
               , public sciter::host<window>
               , public sciter::event_handler
  {
  }
Т.е. тот же наследование event_handler
назначение aux::asset , sciter::host<window> пока загадка (подозреваю что первый связан с отладкой,второй с загрузкой ресурсов)

Тоже прикрепление объекта обработчика посредством:

C++
1
attach_dom_event_handler(HWINDOW hwnd, event_handler* ph)
Фильтрация происходит в методе:
C++
1
2
3
4
5
virtual bool on_script_call(HELEMENT he, 
    LPCSTR name, 
    UINT argc, 
    sciter::value* argv, 
    sciter::value& retval)
Только для удобства добавлены макросы которые разворачиваются в эту фильтрацию, получаем как декларирование методов которые могут вызываться изнутри движка в tiscript-е:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  class frame: public sciter::window 
{
public:
  frame() : window(SW_TITLEBAR | SW_RESIZEABLE | SW_CONTROLS | SW_MAIN | SW_ENABLE_DEBUG) {}
 
 
    json::value on_btn_click() 
    {
         MessageBox(get_hwnd(), L"Click!",L"Test",  MB_OK); 
         return json::value();
    }
 
   BEGIN_FUNCTION_MAP
     FUNCTION_0("on_btn_click", on_btn_click);
     // еще  FUNCTION_1 (... ) итд...
   END_FUNCTION_MAP
};
А в html с помощью tiscript нужно создать обработчик и навесит на кнопку


HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<html>
<head>
</head>
<body>
        <script type="text/tiscript">
        function on_click() 
        { 
                 view.on_btn_click();  
        } 
    
        $(input#MyButton).on("click", on_click);
        </script>   
 
        <input type="button" id="MyButton" name="test_button" value="Test button">
</body>
</html>
view.on_btn_click(); это вызов нашего С++ метода on_btn_click декларированного FUNCTION_0("on_btn_click", on_btn_click);

В итоге при нажатии на кнопку в окне, мы получим мессаджбокс.

Движок использует tiscript поэтому синтаксис "навешивания" отличается от обычного js
Javascript
1
$(input#MyButton).on("click", on_click);
Т.е. то как описано тут http://javascript.ru/tutorial/events/intro не работает.

Не по теме:

И непонятно можно ли сделать проще что-то типа:

Javascript
1
$(input#MyButton).on("click",view.on_btn_click);



Кстати public sciter::window это класс обвертка находящийся в

Bash
1
2
sciter-sdk\include\sciter-x-window.hpp
sciter-sdk\include\sciter-win-main.cpp

Не по теме:

Спрашивается что делает сpp в include ?



Этот класс используетcя в примере sciter-sdk\demos\uminimal
Это класс создает окно с помощью CreateWindow() и делает необходимые связки

C++
1
2
3
4
5
6
7
8
9
  window::window( UINT creationFlags, RECT frame): _hwnd(NULL)
  {
    _hwnd = ::SciterCreateWindow(creationFlags,&frame,&msg_delegate,this,NULL);
    if( _hwnd ) {
      add_ref();
      setup_callback();
      sciter::attach_dom_event_handler(get_hwnd(),this);
    }
  }
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
19.07.2016, 10:49 36
Цитата Сообщение от Avazart Посмотреть сообщение
Как то муторно устроено.
И доки какие-то глупенькие, имхо...
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.07.2016, 13:17 37
Цитата Сообщение от Croessmah Посмотреть сообщение
И доки какие-то глупенькие, имхо...
Меня примеры удивляют.
Казалось бы должны быть от простого к сложному, там обзор по контроллам, куча непонятного кода.
Названия папок demos и samples и гадай... оказывается в первом c++ во втором html-ки

Не по теме:

Я еще буквально сразу нарвался на такой код исходниках

C++
1
typedef std::runtime_error script_error;
Как то не хорошо тайпдефить исключения.



Добавлено через 18 минут
Можно кстати проще скрипт написать
Javascript
1
2
3
4
5
6
        <script type="text/tiscript">   
        $(input#MyButton).onClick= function() 
        {
          view.on_btn_click();  
        }
        </script>
Добавлено через 1 час 30 минут
Я попытался содрать "красивую" кнопку от сюда http://shpargalkablog.ru/2012/... ki.html#on

a.button24
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
a.button24 {
  display: inline-block;
  color: white;
  text-decoration: none;
  padding: .5em 2em;
  outline: none;
  border-width: 2px 0;
  border-style: solid none;
  border-color: #FDBE33 #000 #D77206;
  border-radius: 6px;
  background: linear-gradient(#F3AE0F, #E38916) #E38916;
  transition: 0.2s;
} 
a.button24:hover { background: linear-gradient(#f5ae00, #f59500) #f5ae00; }
a.button24:active { background: linear-gradient(#f59500, #f5ae00) #f59500; }


Тупо скопипастить не вышло - градиенты имеют другой синтаксис:

style.css
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
html  
{ 
   background: threedface /* buttonface не поддерживается? [url]http://webdesign.about.com/od/colorcharts/l/blsystemcolors.htm*/;[/url]
   font:system; 
}
 
a.a_button{
  display: inline-block;
  color: white;
  text-decoration: none;
  padding: .5em 2em;
  outline: none;
  border-width: 2px 0;
  border-style: solid none;
  
  border-radius: 6px; 
  transition: 0.2s;
  
  border-color: #E38916;
  background:  linear-gradient(top,#F3AE0F, #E38916); 
} l
a.a_button:hover  { background: linear-gradient(top,#f5ae00, #f59500) ; border-color:  #f5ae00; }
a.a_button:active { background: linear-gradient(top,#f59500, #f5ae00);  border-color: #f59500; }
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
<html>
<head>
    <link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
    <script type="text/tiscript">   
        $(a.a_button).onClick= function() { view.on_btn_click(); }
    </script>   
 
   <a href="#" class="a_button">кнопка</a>    
</body>
</html>
Как я понимаю еще не работает градиент по диагоналям:
CSS
1
linear-gradient(to top right, red, white, blue)
Добавлено через 18 минут
А вот "наклонный" градиент иначе задается (см sciter-sdk/samples/basics/*)

CSS
1
2
3
4
5
6
7
 @const START: rgb(255,0,0);
 @const END: rgba(0,0,255,0.5);
 
a.a_button
{
   background: linear-gradient(25% 25%, 45deg, @START, @END);
}
0
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593
17.05.2017, 22:14 38
Avazart, А для чего нужна библиотека HTMLayout, смысли какие программы можно писать с её помощью?
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.05.2017, 22:22 39
Цитата Сообщение от oleg rus Посмотреть сообщение
Avazart, А для чего нужна библиотека HTMLayout, смысли какие программы можно писать с её помощью?
https://sciter.com/
https://habrahabr.ru/post/154697/
https://ru.wikipedia.org/wiki/Sciter
0
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593
17.05.2017, 22:33 40
Avazart, А Sciter и HTMLayout как то связаны?
0
17.05.2017, 22:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2017, 22:33
Помогаю со студенческими работами здесь

Какие существуют короткие константы для достаточно больших чисел?
Периодически возникает потребность в использовании циклов с достаточно большим числом итераций, где...

Какие существуют библиотеки для работы с сокетами?
Здравствуйте! Подскажите пожалуйста, какие существуют библиотеки для работы с сокетами.

Какие существуют библиотеки для ИИ на lisp?
Всем хорошего времени суток! Заинтересовала тема разработки искусственного интеллекта на lisp...

Существуют ли какие-нибудь фреймворки для VB, наподобие MVVM Light, WAF и подобных?
Подскажите пожалуйста существуют ли какие нибудь фреймворки для VB, наподобие MVVM Light, WAF и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru