Code: Select all
while (m.lkm) //левая клавиша на ползуке и нажата?
{
если да, то проверяем положение мыши, рисуем чё-то если надо
m.get(); //считываем данные о состоянии мыши и снова на while
}
Code: Select all
while (m.lkm) //левая клавиша на ползуке и нажата?
{
если да, то проверяем положение мыши, рисуем чё-то если надо
m.get(); //считываем данные о состоянии мыши и снова на while
}
Code: Select all
=======================================================================================================
=== Алгоритм парсинга мыши для перемещения ползунка по оси у. =========================================
=======================================================================================================
а. Выделяем буфер размером в байт, для флага основной (начальной) координаты мыши по оси у.
б. Выделяем буфер размером в дворд, для значения основной (начальной) координаты мыши по оси у.
=======================================================================================================
01. Надо получить координаты мыши в окне.
02. Проверить где находится мышь.
03. Если на ползунке, то проверить нажата ли левая кнопка мыши.
04. Если нажата, то получаем текущую координату мыши по оси у. Если нет, то очещаем флаг основной (начальной) координаты мыши по оси у и выходим.
05. Проверяем флаг основной (начальной) координаты мыши по оси у.
06. Флаг сброшен, то записываем в буфер координату по оси у (буфер б), устанавливаем флаг (буфер а)
07. Выходим из парсера.
--------------------------------------------------------------------------------------------------------
08. Флаг установлен, то тогда сравниваем текущую координату мыши по оси у, с основной (начальной), которая должна быть в буфере (буфер б).
09. Если текущая координата ниже, чем основная (начальная), то вычисляем разницу между ними. Разница = основная (начальная) корд. по оси у - текущая корд. по оси у.
10. Эту разницу вычитаем из текущей координаты ползунка по оси у в буфере с координатами ползунка по оси у.
11. Восстанавливаем основную (начальную) коорд. по оси у в буфере.
12. Перерисовываем ползунок с новыми координатами.
13. Выходим из парсера.
--------------------------------------------------------------------------------------------------------
14. Если текущая координата выше, чем основная (начальная), то вычисляем разницу между ними. Разница = текущая корд. по оси у. - основная (начальная) коорд. по оси у
15. Эту разницу прибавляем к текущей координаты ползунка по оси у в буфере с координатами ползунка по оси у.
16. Восстанавливаем основную (начальную) корд. по оси у в буфере.
17. Перерисовываем ползунок с новыми координатами.
18. Выходим из парсера.
--------------------------------------------------------------------------------------------------------
Code: Select all
<?xml encoding="UTF-8">
Code: Select all
<?xml encoding="UTF-8">
Code: Select all
for (; buf + fsize > bword; bword++;) {
Code: Select all
for (; buf + fsize > bword; bword++;) {
Code: Select all
ParseHTML(dword bword, fsize)
Code: Select all
ParseHTML(buf, filesize);
Code: Select all
for (bword = buf; buf + fsize > bword; bword++;) {
Code: Select all
...
case 021: //Ctrl+U
ReadHtml();
utf8rutodos(buf);
break;
Code: Select all
inline fastcall int utf8rutodos(dword ESI) //-
{
EDI=ESI;
while (BL=ESBYTE[ESI])
{
IF (BL == 0xD0) || (BL == 0xD1) EDI--;
else IF (BL == 0x81) && (ESBYTE[ESI-1]==0xD0) ESBYTE[EDI] = 0xF0; //ш
else IF (BL == 0x91) && (ESBYTE[ESI-1]==0xD1) ESBYTE[EDI] = 0xF1; //м
//0xE2 0x80 - сгруппировать
else IF (BL == 0xE2) && (ESBYTE[ESI+1]==0x80)
SWITCH (ESBYTE[ESI+2])
{
case 0x93: //long defis
CASE 0x94:
{
ESBYTE[EDI] = '-';
ESI+=2;
BREAK;
}
CASE 0xA2: //central point
{
ESBYTE[EDI] = '*';
ESI+=2;
BREAK;
}
CASE 0xA6: //многоточие
{
ESBYTE[EDI] = ESBYTE[EDI+1] = ESBYTE[EDI+2] = '.';
EDI+=2;
ESI+=2;
break;
}
}
//0xC2 сгруппировать
else IF (BL == 0xC2) //таблицу перекодировок?
SWITCH(ESBYTE[ESI+1]) {
case 0xAB: //"
CASE 0xBB: //"
{
ESBYTE[EDI] = '\"';
ESI++;
BREAK;
}
CASE 0xB7: // _
{
ESBYTE[EDI] = '_';
ESI++;
BREAK;
}
CASE 0xA0: // Alt+160 - неразбивающий пробел
{
ESBYTE[EDI] = ' ';
ESI++;
BREAK;
}
CASE 0xB0: // градус
{
ESBYTE[EDI] = '\29';
ESI++;
BREAK;
}
CASE 0xA9: // (c)
{
ESWORD[EDI] = 'c(';
// ESBYTE[EDI] = '(';
// ESBYTE[EDI+1] = 'c';
ESBYTE[EDI+2] = ')';
EDI+=2;
ESI++;
BREAK;
}
CASE 0xAE: // (r)
{
ESWORD[EDI] = 'r(';
ESBYTE[EDI+2] = ')';
EDI+=2;
ESI++;
break;
}
}
ELSE IF (BL >= 0x90) && (BL <= 0xAF)
{
BL -= 0x10;
ESBYTE[EDI] = BL;
}
ELSE IF (BL >= 0x80) && (BL <= 0x8F)
{
BL += 0x60;
ESBYTE[EDI] = BL;
}
ELSE IF (BL >= 0xB0) && (BL <= 0xBF)
{
BL -= 0x10;
ESBYTE[EDI] = BL;
}
ELSE ESBYTE[EDI] = BL;
ESI++;
EDI++;
}
WHILE (EDI<ESI)
{
ESBYTE[EDI] = ' ';
EDI++;
}
}
Users browsing this forum: No registered users and 0 guests