Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Вниз

Легкий HilightMemo   Найти похожие ветки 

 
Vladimir Kladov   (2005-08-29 15:19) [0]

У меня практически готов облегченный HilightMemo, код на 100К меньше, чем в VMHSyntaxEdit получается, глюков по моим ощущениям тоже меньше (там не не понравилось что: undo/redo глючит, буквы справа в конце каждого токена режутся). Нет у меня unicode, но это как раз несложно переделать если позарез, да и кода у меня всего 1 модуль из < 2000 строк, подцветка сделана событием, компонент городить не надо. Зеркала тоже нет пока, может еще приделаю. Сегодня залью, вместе с версией KOL 2.11.


 
RA ©   (2005-08-29 15:47) [1]

Хорошие новости!


 
thaddy   (2005-08-29 15:51) [2]

Shorter than TOM ( incomplete, I know) interface version (200 lines)?

Great job! tnx!


 
Vladimir Kladov   (2005-08-29 20:34) [3]

Нет все самому довелось сделать, целых 3 для старался. И скорость наверняка все равно выше, чем в том томбе. Раскраска идет при отрисовке, с лёта.

Так я кажись все выложил, жду баг-репортов, недовольных свистов, и т.д. Кстати, люди, я вернулся на Delphi5, и чувствую себя намного лучше. Он просто летает...


 
thaddy   (2005-08-29 20:42) [4]

I am impressed! this was the first thing I tried.
Extremely usefull!
D5? my favorite still D4 ( because I have a full license to D4 and only pro level for D5). It flies, even under new Vista beta.


 
ECM ©   (2005-08-29 22:11) [5]

>Так я кажись все выложил, жду баг-репортов, недовольных свистов, и т.д.
Щас...
Навскидку: Опять остался неисправленным MCKfakeClasses.inc
(KOL 2.10 -> kolmck210to211.upd)
Ерунда конечно, но опять будет куча вопросов, что не собирается основной пакет MCK...:(


 
thaddy   (2005-08-29 22:19) [6]

I agree, to a certain extend.
This can indeed be solved easily.
But remember, most new users are too lazy to read *any* code. It seems to me that users who can write *without* mck and use the mck have less problems. It seems that users who only use the mck are causing problems.
I suggest a hidden directive:
{$READ_DOCS_FAQ_AND_COMMENTS} that is hidden somewhere in an include file and only switched on on first installation ;)

then:

{$INFNDEF $READ_DOCS_FAQ_AND_COMMENTS}
{$DEFINE GET_EDUCATION_FIRST}
{$ENDIF}


 
miek ©   (2005-08-30 10:24) [7]

>Кстати, люди, я вернулся на Delphi5, и чувствую себя намного лучше. Он просто летает...

Есть какие-нибудь важные фичи в D6, которых не в В5? По-моему, встроенный ассемблер там хуже, а это плохо.


 
thaddy   (2005-08-30 14:50) [8]

Use uneven numbers. except for 2 wich was good: D1,2,3,5,7...
Never use 4 or 6 or 8 (Although my favorite is still 4, for legal reasons and speed)


 
Vladimir Kladov   (2005-08-30 16:08) [9]

Ну багов (мелких) я уже нашел парочку. Сегодня положу версию, вот только автокомплешн доделаю для него.


 
Vladimir Kladov   (2005-08-30 16:13) [10]

Мне тоже был нужен MMX когда я уходил на D6 а потом на D7. Но теперь мне это не надо, у меня свой PCAsm, он компилит на лету, понимает MMX, макросы, и все то, без чего асм просто не нужен. Ущербным и недоделанным BASM"ом пользоваться я в своих проектах перестал. Я еще и от Opera8 хочу отказаться. Вот тормоза наделали. Буду искать дистриб какой-нибудь 5-й оперы, мож завалялся где на старых дисках...


 
homm   (2005-08-30 18:07) [11]

Opera 8 рулит :)


 
homm   (2005-08-30 18:10) [12]

Кстати, владимир как часто вы читаете почту. Два дня назад я послал интересное решение прорисовки для GradientPanel, но нечего не услышал в ответ, если вы не получили письма, дайте знать тут. Я изложу суть.


 
Vladimir Kladov   (2005-08-30 21:15) [13]

я то читаю, но до меня ее фильтруют несколько спам-фильтров, и окончательно когда мне высвечивается несколько заголовков, я отмечаю для прочтения только те, в которых нормальная тема. Ну вот скажите, что вы в теме сообщения написали? По-русски просьба не писать в теме, если пользуетесь аутглюком. Он похоже не знает что русский язык в заголовке должен кодироваться в КОИ-8. Пишите тему по английски. И лучше, чтобы там сразу было KOL или MCK, тоже английскими буквами.


 
homm   (2005-08-30 21:20) [14]

тема первого - WndProcGradient improvement from "homm"
тема второго - WndProcGradient improvement from "homm" part 2

Нужно еще рас переслать?


 
Vladimir Kladov   (2005-08-30 21:21) [15]

Новая версия HilightMemo выложена, и уже с автокомплешн и исправлением кучи мелких багов. Если чего найдете, пишите сразу на мыло, или сюда, я не возражаю, я - лицо заинтересованное, мне надо, чтобы он праильно работал, в моем проекте.


 
Vladimir Kladov   (2005-08-30 21:29) [16]

Нет не попадался. Может у вас почтовый адрес или домен в черный список попал? Попробуйте еще раз.


 
homm   (2005-08-30 21:33) [17]

Готово.


 
Vladimir Kladov   (2005-08-30 21:34) [18]

Ничего нету. Ну ладно, до завтра подожду. Пока.


 
homm   (2005-08-30 22:10) [19]

Предлагаю тогда текстовой вариант

http://www.homm86.harod.ru/latters.zip


 
Vladimir Kladov   (2005-08-31 22:40) [20]

сейчас неспешно выкладывается новая версия hilightMemo. Баги подчищены, скорость улучшена (работа с большим текстом и автокомплешн, удаление большого выделения). Сейчас вроде пашет, но от нареканий не откажусь.

2 письма от homm я утром видел в списке приемки, и даже поставил крыжик на приемку (перепутать было невозможно, в списке только они 2 и были, то ли спамеры прошлой ночью спали). После чего письма эти благополучно исчезли. Куда, не знаю. Наверное они большие были. У меня ограничение на размер письма. Так что буду по ссылке смотреть как время выдастся. А на словах нельзя сообщить, на сколько ( 1) исходного кода 2) результирующего кода ) эти добавки в градиентную панель потянут? А то может не стоит загружать?


 
homm   (2005-09-02 18:34) [21]

Показывать все заголовкиDate: Sun, 28 Aug 2005 21:00:59 +0600
To: bonanzas@online.sinor.ru
Subject: WndProcGradient improvement from "homm"
From: aLeXandr <homm86@mail.ru>


Владимир, я предлагаю при отрисовке WM_PAINT для GradienPanel использовать временное
хранилище для небольшой полосы правильно растянутого изображения для NT систем. Вот пример:

function WndProcGradient( Self_: PControl; var Msg: TMsg; var Rslt: Integer ): Boolean;
var PaintStruct: TPaintStruct;
   Bmp: PBitmap;
   CR: TRect;
   I: Integer;
   R, G, B: Integer;
   R1, G1, B1: Integer;
   C: TColor;
   W, H, WH: Integer;
   W9x: Boolean;
   Br: HBrush;
   //Save: Integer;
   OldPaintDC: HDC;
   Pattern: PBitmap;
   pdc: HDC;

const pw = 32;
begin
 case Msg.message of
 WM_PAINT, WM_PRINTCLIENT:
           begin
              OldPaintDC := Self_.fPaintDC;
              Self_.fPaintDC := Msg.wParam;
              if Self_.fPaintDC = 0 then
                 Self_.fPaintDC := BeginPaint( Self_.fHandle, PaintStruct );
              CR := Self_.ClientRect;
              W9x := WinVer < wvNT;
              W := 1;
              H := CR.Bottom;
              WH := H;
              Bmp := nil;
              if Self_.fGradientStyle = gsHorizontal then
              begin
                W := CR.Right;
                H := 1;
                WH := W;
              end;
              if not W9x then begin
                Bmp := NewDIBBitmap( W, H, pf32bit );
                if Self_.fGradientStyle = gsVertical then
                  Pattern := NewBitMap(pw, H)
                else
                  Pattern := NewBitMap(W, pw);
              end;
              C := Color2RGB( Self_.fColor1 );
              R := C shr 16;
              G := (C shr 8) and $FF;
              B := C and $FF;
              C := Color2RGB( Self_.fColor2 );
              R1 := C shr 16;
              G1 := (C shr 8) and $FF;
              B1 := C and $FF;
              for I := 0 to WH-1 do
              begin
                C := ((( R + (R1 - R) * I div WH ) and $FF) shl 16) or
                     ((( G + (G1 - G) * I div WH ) and $FF) shl 8) or
                     ( B + (B1 - B) * I div WH ) and $FF;
                if W9x then
                begin
                  if Self_.fGradientStyle = gsVertical then
                    CR.Bottom := CR.Top + 1
                  else
                    CR.Right := CR.Left + 1;
                  Br := CreateSolidBrush( C );
                  Windows.FillRect( Self_.fPaintDC, CR, Br );
                  DeleteObject( Br );
                  if Self_.fGradientStyle = gsVertical then
                    Inc( CR.Top )
                  else
                    Inc( CR.Left );
                end
                  else
                begin
                  if Self_.fGradientStyle = gsVertical then
                    Bmp.DIBPixels[ 0, I ] := C
                  else
                    Bmp.DIBPixels[ I, 0 ] := C;
                end;
              end;
              if not W9x then
              begin
                pdc := Pattern.Canvas.Handle;
                SetStretchBltMode( pdc, HALFTONE);
                SetBrushOrgEx( pdc, 0, 0, nil );
                StretchBlt( pdc, 0, 0, Pattern.Width, Pattern.Height, Bmp.Canvas.Handle,
                            0, 0, W, H, SRCCOPY );
                if Self_.fGradientStyle = gsHorizontal then begin
                    for i := 0 to (CR.Bottom div pw) do
                        Pattern.Draw(Self_.fPaintDC, 0, i*pw)
                end else begin
                    for i := 0 to (CR.Right div pw) do
                        Pattern.Draw(Self_.fPaintDC, i*pw, 0);
                end;
                Bmp.Free;
                Pattern.Free;
              end;
              if Msg.wParam = 0 then
                EndPaint( Self_.fHandle, PaintStruct );
              Self_.fPaintDC := OldPaintDC;
              Rslt := 0;
              Result := True;
              Exit;
           end;
 end;
 Result := False;
end;

К сожалению код становится длинее почти на 512 байт, но скорость отрисовки на моем уже не
молодом Celeron 563 увеличилась в 11,5 раз! как для 16, так и для 32 бит, а визуально
разница видна только под лупой.

--
____________________________________________________________
С уважением,
Карпинский Александр | mailto:homm86@mail.ru


 
homm   (2005-09-02 18:35) [22]

Показывать все заголовкиDate: Mon, 29 Aug 2005 20:01:40 +0600
From: aLeXandr <homm86@mail.ru>
To: bonanzas@online.sinor.ru
Subject: WndProcGradient improvement from "homm" part 2


Владимир, я все по поводу темы вчерашнего письма. Для чего вообще было разделение в
функции WndProcGradient на 9х и NT системы? Для увеличения быстродействия в 9х. Поправте
если я не прав. Я увеличил скорость прорисовки на NT системах, и теперь она не уступает от
скорости прорисовки в 9х. Вывод - долой это теперь не нужное ветвление.
Кроме того, тем же методом запросто реализуются еще две заливки. Из верхнего левого угла в
противоположный и из верхнего правого угла в противоположный. Предлогаемый мной сегодня
вариант отрисовки работает в 49 (сорок девять!) раз быстрее, чем практически не
отличающееся по расположению цвета ( при условии хотя бы примерного сохранения соотношения
сторон 1:1) и значительно хуже выглядящей в 16 битах комбинации свойств:
GradientStyle=gsRombic и GradientLayout=glTopLeft.
Кстати тут еще баг в MCK. Если GradientLayout отличен от glTop, то создается
GradientPanelEx с GradientStyle=gsHorizontal если в дезвйнере выставлен gsVertical.



TGradientStyle = ( gsVertical, gsHorizontal, gsRectangle, gsElliptic, gsRombic,
gsTopToBottom, gsBottomToTop );

. . .

. . .

. . .

function WndProcGradient( Self_: PControl; var Msg: TMsg; var Rslt: Integer ): Boolean;
var PaintStruct: TPaintStruct;
   Bmp: PBitmap;
   CR: TRect;
   I: Integer;
   R, G, B: Integer;
   R1, G1, B1: Integer;
   C: TColor;
   W, H, WH: Integer;
   OldPaintDC: HDC;
   Pattern: PBitmap;
   pdc: HDC;
   pw: integer;

begin
 case Msg.message of
 WM_PAINT, WM_PRINTCLIENT:
           begin
              result := false;
              CR := Self_.ClientRect;
              case Self_.fGradientStyle of
                gsHorizontal: begin
                                W := CR.Right;
                                H := 1;
                                WH := W;
                                pw := 32;
                              end;
                gsVertical: begin
                              W := 1;
                              H := CR.Bottom;
                              WH := H;
                              pw := 32
                            end;
                gsTopToBottom,
                gsBottomToTop: begin
                                 W := CR.Bottom + CR.Right;
                                 H := 1;
                                 WH := W;
                                 pw := 1 + (CR.Bottom div 16);
                                 if pw > 6 then
                                   pw := 6;
                               end;
                else exit; // <-- impartant if user change GradientStyle to not supported
by this object
              end;
              OldPaintDC := Self_.fPaintDC;
              Self_.fPaintDC := Msg.wParam;
              if Self_.fPaintDC = 0 then
                 Self_.fPaintDC := BeginPaint( Self_.fHandle, PaintStruct );
              Bmp := NewDIBBitmap( W, H, pf24bit );
              C := Color2RGB( Self_.fColor1 );
              R := C shr 16;
              G := (C shr 8) and $FF;
              B := C and $FF;
              C := Color2RGB( Self_.fColor2 );
              R1 := C shr 16;
              G1 := (C shr 8) and $FF;
              B1 := C and $FF;
              for I := 0 to WH-1 do begin
                C := (( R + (R1 - R) * I div WH ) shl 16) or
                     (( G + (G1 - G) * I div WH ) shl 8) or
                     ( B + (B1 - B) * I div WH );
                if Self_.fGradientStyle = gsVertical then
                  Bmp.DIBPixels[ 0, I ] := C
                else
                  Bmp.DIBPixels[ I, 0 ] := C;
              end;
              if Self_.fGradientStyle = gsVertical then
                Pattern := NewBitMap(pw, H)
              else
                Pattern := NewBitMap(W, pw);
              pdc := Pattern.Canvas.Handle;
              SetStretchBltMode( pdc, HALFTONE);
              SetBrushOrgEx( pdc, 0, 0, nil );
              StretchBlt( pdc, 0, 0, Pattern.Width, Pattern.Height, Bmp.Canvas.Handle,
                          0, 0, W, H, SRCCOPY );

              case Self_.fGradientStyle of
                gsHorizontal: for i := 0 to (CR.Bottom div pw) do
                                Pattern.Draw(Self_.fPaintDC, 0, i*pw);
                gsVertical: for i := 0 to (CR.Right div pw) do
                              Pattern.Draw(Self_.fPaintDC, i*pw, 0);
                gsTopToBottom: for i := 0 to ((CR.Bottom + pw -1) div pw)-1 do
                                 Pattern.Draw(Self_.fPaintDC, -i*pw, i*pw);
                gsBottomToTop: for i := 0 to ((CR.Bottom + pw -1) div pw)-1 do
                                 Pattern.Draw(Self_.fPaintDC, -CR.Bottom + i*pw, i*pw);
              end;
              Bmp.Free;
              Pattern.Free;
              if Msg.wParam = 0 then
                EndPaint( Self_.fHandle, PaintStruct );
              Self_.fPaintDC := OldPaintDC;
              Rslt := 0;
              Result := True;
              Exit;
           end;
 end;
 Result := False;
end;

ЗЫ Чуть не забыл во вложении пример всего этого.

--
____________________________________________________________
С уважением,
Карпинский Александр | mailto:homm86@mail.ru


 
homm   (2005-09-02 18:36) [23]

результирующий код увеличивается на 400 байт, но этос добпвлением 2-х заливок (это по последней версии)


 
Vladimir Kladov   (2005-09-02 19:57) [24]

Нет скорость меня не интересовала. Имеется существенное различие в том, как обрабатывается halftone в 9х и NT+. В итоге в разрешении 64К цветов получаем несколько полос, с явными границами между ними. А вы пробовали свой вариант в разрешении 64К цветов? Что-то меня смущает, что используется pf24bit. Во многих случаях винде нужны дополнительные усилия, чтобы превратить этот формат в то, что реально имеется. Ни одна новая видеокарта не использует 24 бита в качестве родного разрешения, либо 32, либо 16 бит. Следовательно, нужно преобразование.


 
homm   (2005-09-02 20:39) [25]

Владимир, я естественно пробовал в 16 битах, если бы я не понял того, что вы написали с самого начала, то предложил бы срезать ветвь с NT. pf24bit вас смущает, и вы беспокоитесь об "дополнительных усилиях", притом что прежний вариант работает реально в 11 раз медленее.


 
homm   (2005-09-02 20:44) [26]

ЗЫ Видео у меня ДжиФорс ЭмИкс 400 на 64 М. Конечно это не "новая видеокарта", но тоже испоьлзует 32 бита. А собственно и не настаиваю на pf24bit, пусть будет 32 ...


 
Vladimir Kladov   (2005-09-02 20:46) [27]

А куда сешить? Он один раз должен отрисоваться и не перерисовываться пока что-нибудь не испортится, например движением чужого окна. Поэтому я иговорю: скорость второстепенна, для KOL важнее размер кода. Корректность тоже нужна, конечно. Если оно одинаково работает на 98 и NT, и не делает полосок, то возьмем ваш вариант. С размером я может похимичу чего-нибудь.


 
homm   (2005-09-02 22:34) [28]

> А куда спешить?

Такой глупости от Вас я не ожидал... А если пользователь может изменять размер окна (Align=Client), или цвет заливки меняется динамически. А прорисовка комбинации GradientStyle=gsRombic и GradientLayout=glTopLeft по вашему тоже не нуждается в ускорении?

ЗЫ Я тут старые темы почитал, не у меня одного проблемы с отправкой Вам писем...


 
Vladimir Kladov   (2005-09-12 19:32) [29]

Маленькое обновление в связи с обнаружением небольшого числа мелких багов.


 
Vladimir Kladov   (2005-09-13 18:40) [30]

еще одно маленькое обновление по сабжу, заодно выложил поправленный MultiClipbrd 1.6 (у ноутбука работают еще кой-какие сообщения, я их не предусматривал - по WM_POWERBROADCAST).


 
Vladimir Kladov   (2005-09-16 19:41) [31]

Обновлены KOLHilightEdit (ctrl+ins), приложения MultiClipBrd (опять выход из гибернации, теперь и на 2000 и на ХР должно работать в том числе на ноутбуках), и Zoomer3 (паролирование и переименование файлов, в том числе групповое по шаблону с автоперенумерацией в позиции #, + фиксы). За выходные соберусь может сделаю обновление.


 
mdw ©   (2005-09-20 10:25) [32]

2 Кладов
ctrl+ins в KOLHilightEdit не работает, его там и нет, собственно. Что-то Владимир напутал это версия недельной давности, хотя пример для OnScanToken и добавил.

Да, вот еще. Глюк, не глюк не знаю, но  во многих редакторах так:
При комбинации Ctrl+левая\правая стрелка каретка прыгает на начало\конец следующего слова.  В KOLHilightEdit, в случае если она стоит на середине слова, то текущее пропускается. И в начале\конце строки тоже останавливать бы ее нужно. Понятно объяснил? Ну в общем поиграйтесь с комбинацией Ctrl+левая\правая стрелка в  KOLHilightEdit и любом редакторе, поймете.


 
mdw ©   (2005-09-20 14:56) [33]

Еще баг.
Если выделить мышкой справа налево строку и увести ее запределы KOLHilightEdit то Х-позиция каретки получается отрицательная и сответственно она (каретка) уходит за пределы KOLHilightEdit. Не смертельно, но смотрится не очень красиво..


 
Grom PE ©   (2006-01-08 15:58) [34]

Здравствуйте.
А HilightMemo давно обновлялся?
В моей версии HilightMemo присутствуют некоторые "неправильности":

1. Если поступить так, как сказал mdw в [33] и нажать <пробел>, то получается смертельно - программа вылетает.
Это исправимо в MouseMove (не помню точно, не могу сейчас проверить) - добавляется if x<0 then x:=0 и if y<0 then y:=0.

2. При отсутствии директивы для фиксированного горизонтального скроллбара и при прогрутке мышкой за вертикальный, около самого низа начинает скакать - горизонтальный то исчезает, то появляется.

3. Не мог бы кто узнать, почему при включенной AutoComplete окошко появляется на 1 миллисекунду и исчезает, то есть не работает?


 
Vladimir Kladov   (2006-01-08 21:56) [35]

23.11.05
У меня автокомплешн работает, я как раз помню, что то обновление его исправляло. Начсет мыши не понял, вроде не падает. Никакой правки в MouseMove нет.


 
Grom PE ©   (2006-01-09 12:03) [36]

Подскажите, где можно скачать последнюю версию. А то, получается, на прошлое жалуюсь.


 
Grom PE ©   (2006-01-15 09:00) [37]

Ладно. Я нашел обновление, а остальное, что нужно было, сделал сам.
Вопросы:

1. Как максимально ускорить подсветку синтаксиса, как нужно писать процедуру подсветки?

2. Как сделать подсветку многострочного комментария оптимальным способом?


 
Vladimir Kladov   (2006-01-15 20:32) [38]

1. подсветка работает построчно в момент рисования строки. Просто не надо весь файл просматривать, чтобы строку нарисовать. Пример есть.

2. пометить один раз строки, и повторно не просматривать.


 
Grom PE ©   (2006-01-17 04:34) [39]

1. По-моему вы меня не совсем поняли: я знаю принцип расцветки, раскрашиваю именно по строкам, и она довольно хорошо работает. Но когда окно разворачивается на весь экран, начинает тормозить. Особенно неприятно то, что курсор перестает мигать при прокрутке вверх (давим кл. вверх) и его не видно.

2. Ладно уж.



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.59 MB
Время: 0.047 c
1-1158731446
WhiteBarin
2006-09-20 09:50
2006.11.05
Работает ли Sleep в реальном времени?


15-1160647970
ПЛОВ
2006-10-12 14:12
2006.11.05
Жесткий диск с 2-мя интерфейсами...


10-1124890680
Solo_Mes
2005-08-24 17:38
2006.11.05
Сообщение о подключениях


3-1157704383
Вольный Стрелок
2006-09-08 12:33
2006.11.05
Как фильтровать лукапные поля?


2-1161230560
Kwoon
2006-10-19 08:02
2006.11.05
Помогите разобраться





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