Форум: "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.041 c