Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26170
Рейтинг: 2127
#16: 2008-06-14 02:09:24 ЛС | профиль | цитата
Konst, а пример где?

[size=-2]------ Добавлено в 20:39
Пока ты искал пример, я исправил ошибку.

Выкладываю новую версию. Исправлено добавление строк автозамены из списка инициализации при старте.

------------ Дoбавленo:


Исправлен баг с начальным пуском и служебными клавишами (Home, End ...) при пустом списке
------------ Дoбавленo:

Исправлен баг с перемещением мыша вне фокуса
карма: 22

0
файлы: 1hilightmemo_2_52.zip [33.7KB] [457]
Ответов: 1304
Рейтинг: 405
#17: 2009-08-16 13:31:43 ЛС | профиль | цитата
nesco, при попытке сделать простенький редактор текста в рамках HiLightMemo обнаружил что не так это и просто. Первая проблема, подсветка лишнего текста до пробела, вторая недостаточно одного подсвеченного шрифта.


Add(MainForm,1641136,28,35)
{
Left=20
Top=105
Width=575
Height=301
Caption="SyntaxPad"
Position=1
Point(onResize)
}
Add(HilightMemo,15371114,91,35)
{
Width=567
Height=274
Align=5
Color=12632256
Font=[Courier New,9,0,0,204]
Strings=#45:Index:word //в списке подсвечиваемых строк in|47:class(TDebug) //после class подсвечено (TDebug)|80:// Нехватает возможности обозначить строку вторым, третьим, подсвеченным шрифтом|23:(к примеру коментарий).|
HilightStrings=#7:in=Blue|9:class=Red|
HilightFont=[Lucida Calligraphy,8,3,0,0]
AutoComplete=1
MinWordLen=0
RightMargin=1
Point(doHilightFont)
}
ps:Неплохо бы было иметь подсветку по маске ' xxx ', ( xxx), { xxx }, и т.д. Эта задача решаема при использовании дополнительных элементов, но думаю что при больших размерах редактируемого текста могут быть существенные тормоза.
карма: 3

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#18: 2009-08-16 14:50:57 ЛС | профиль | цитата
MAV писал(а):
недостаточно одного подсвеченного шрифта

Моноширных шрифтов очень мало, а обычный использовать настоятельно не рекомендуется. К тому же, реализовать такое дело со шрифтами в рамках этого компонента совсем не просто. Если в данном случае имеется в виду подсвечивание блока от и до с игнорированием пробелов, то над этим надо думать, так же, как и над маской. Поставлю это в свои задачи, но за это возьмусь не совсем сразу.
карма: 22

0
Ответов: 1304
Рейтинг: 405
#19: 2009-08-16 15:02:35 ЛС | профиль | цитата
nesco, а на счёт подсветки лишних символов ?
карма: 3

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#20: 2009-08-16 17:12:09 ЛС | профиль | цитата
MAV писал(а):
а на счёт подсветки лишних символов ?

Тут в компоненте такой алгоритм, я его не трогал -- включается по вхождению, выключается по пробелу. Пока, не знаю, можно ли чего сделать
карма: 22

0
Ответов: 32
Рейтинг: 2
#21: 2009-08-17 14:19:06 ЛС | профиль | цитата
Почему при вставке автодополнения некоторых слов происходит сдвиг начала строки:в частности слова tstcode_14621.txt
карма: 0

0
файлы: 1code_14621.txt [5.9KB] [355]
Разработчик
Ответов: 26170
Рейтинг: 2127
#22: 2009-08-17 16:41:34 ЛС | профиль | цитата
jeka7, насколько я понимаю, то это какой-то нестандартный способ использования автодополнения, видимо, попытка создать некий прообраз комментария. Но какой нужен конкретно алгоритм, я не знаю, потому, ничего из схемы не понял
------------ Дoбавленo в 17.20:
На SVN доступна версия с блочным построением засветки. Вот пример от MAV с его применением


Add(MainForm,1641136,308,175)
{
Left=20
Top=105
Width=575
Height=292
Caption="SyntaxPad"
Position=1
Point(onResize)
}
Add(HilightMemo,15371114,371,175)
{
Width=567
Height=258
Align=5
Color=12632256
Font=[Courier New,9,1,0,204]
Strings=#63:К примеру //сделана возможность засветить всю оставшуюся строку|69:Item: word //в списке подсвечиваемых строк word - засвечено все слово|89:Index:word; Index:word; //в списке подсвечиваемых строк in - отдельная засветка вхождения|38:class(TDebug) //подсвечен только class|62:/к примеру: 1-й коментарий/ и вот [к примеру: 2-й коментарий].|
HilightStrings=#11:word=Maroon|9:{in}=Blue|11:{class}=Red|9://*=Green|10:/*/=Yellow|8:[*]=Aqua|
HilightFont=[Lucida Console,8,1,0,0]
ReadOnly=0
AutoComplete=1
MinWordLen=0
RightMargin=1
Point(doHilightFont)
}

карма: 22

2
Голосовали:Konst, MAV
Ответов: 1304
Рейтинг: 405
#23: 2009-08-17 23:34:29 ЛС | профиль | цитата
nesco, спасибо за дополнение. Функционал элемента и область применения существенно увеличится, жалко что не все вопросы можно решить . nesco, остался ещё вопросик по поводу агрессивного поведения горизонтального скролбара, зафиксировать его никак нельзя ?
ps: Вариация на тему обновлённого компонента.


Add(MainForm,1641136,35,49)
{
Left=20
Top=105
Width=528
Height=382
Caption="SyntaxPad"
Position=1
Point(onResize)
}
Add(HilightMemo,15371114,98,49)
{
Width=520
Height=355
Align=5
Color=12632256
Font=[Courier New,9,1,0,204]
Ctl3D=1
Strings=#16:unit hiStr_Enum;|0:|9:interface|0:|21:uses Kol,Share,Debug;|0:|4:type|29: THIStr_Enum = class(TDebug)|10: private|15: iInd:Tdata;|9: public|27: _prop_Delimiter:string;|27: _data_String:THI_Event;|28: _event_onEnum:THI_Event;|27: _event_onEnd:THI_Event;|0:|56: procedure _work_doEnum(var _Data:TData; Index:word);|54: procedure _var_Index(var _Data:TData; Index:word);|6: end;|0:|14:implementation|0:|0:|35:procedure THIStr_Enum._work_doEnum;|13:var s:string;|16: Ind:integer;|5:begin|37: s:=ReadString(_Data,_data_String);|24: if s = ' then exit;|54: if _prop_Delimiter = ' then // выдаем по символам|34: for Ind:=1 to Length(s) do |14: begin|33: dtInteger(iInd,Ind-1);|45: _hi_onEvent(_event_onEnum,s[Ind]);|14: end |40: else // иначе|54: begin // делим по делимитеру|34: s := s + _prop_Delimiter[1];|15: ind := 0;|24: While s <> ' do |15: begin|32: dtInteger(iInd,Ind);|68: _hi_onEvent(_event_onEnum,Gettok(s,_prop_Delimiter[1]));|21: inc(ind);|14: end;|8: end;|42: _hi_CreateEvent(_Data,@_event_onEnd);|4:end;|0:|63:procedure THIStr_Enum._var_Index(var _Data:TData; Index:word); |6:begin |21: dtData(_Data,iInd);|4:end;|0:|4:end.|
HilightStrings=#9:And=Black|11:array=Black|8:as=Black|10:asm =Black|15:automated=Black|11:begin=Black|10:case=Black|13:{class}=Black|13:const=6632907|17:constructor=Black|16:destructor=Black|16:directives=Black|13:dispose=Black|9:div=Black|8:do=Black|12:downto=Black|10:else=Black|13:end;=12334431|13:end.=11038416|12:except=Black|13:exports=Black|10:file=Black|18:finalization=Black|13:finally=Black|9:for=Black|14:function=Black|10:goto=Black|8:if=Black|20:implementation=27824|15:inherited=Black|20:initialization=Black|15:interface=Black|8:is=Black|11:label=Black|13:library=Black|10:line=Black|9:mod=Black|9:nil=Black|9:not=Black|12:object=Black|10:{of}=Black|10:{on}=Black|11:{or} =Black|11:{out}=Black|12:packed=Black|13:private=Black|15:procedure=Black|13:program=Black|14:property=Black|15:protected=Black|12:public=Black|15:published=Black|11:raise=Black|12:record=Black|12:repeat=Black|14:resource=Black|11:{set}=Black|9:shl=Black|9:shr=Black|12:string=Black|12:string=Black|10:then=Black|15:threadvar=Black|10:{to}=Black|9:try=Black|12:type=6348983|13:unit=11220377|11:until=Black|10:uses=Black|9:var=Black|13:virtual=Black|11:while=Black|10:with=Black|9:xor=Black|9://*=Green|9:/*/=Green|11:(*)=8781824|
HilightFont=[Lucida Console,8,1,0,0]
AutoComplete=1
MinWordLen=0
RightMargin=1
Point(doHilightFont)
}



карма: 3

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#24: 2009-08-18 01:00:38 ЛС | профиль | цитата
MAV писал(а):
жалко что не все вопросы можно решить

А что еще осталось, маска там уже будет лишней

MAV писал(а):
остался ещё вопросик по поводу агрессивного поведения горизонтального скролбара, зафиксировать его никак нельзя ?

Не замечал, подробнее можно в чем и как это проявляется

Пример очень даже ничего, вот только begin надо цветом end ставить, да и end не все определены.
карма: 22

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#25: 2009-08-18 13:49:06 ЛС | профиль | цитата
jeka7, обновись по SVN и вот решение твойей задачи. В новой версии добавлена возможность использовать разделитель в списке автозавершения



Add(MainForm,14589188,420,301)
{
@Color=15132390
Width=410
Height=288
Position=1
}
Add(HilightMemo,9822400,539,245)
{
@Color=15132390
Left=50
Top=40
Width=310
Height=120
Font=[Courier New,10,0,0,1]
HilightStrings=#8:adc=253 |7:add=253|8:adiw=253|7:and=253|8:andi=253|7:asr=253|8:bclr=253|7:bld=253|8:brbc=253|8:brbs=253|8:brcc=253|8:brcs=253|8:breq=253|8:brge=253|8:brhc=253|8:brhs=253|8:brid=253|8:brie=253|8:brlo=253|8:brlt=253|8:brmi=253|8:brne=253|8:brpl=253|8:brsh=253|8:brtc=253|8:brts=253|8:brvc=253|8:brvs=253|8:bset=253|7:bst=253|8:call=253|7:cbi=253|7:cbr=253|7:clc=253|7:clh=253|7:cli=253|7:cln=253|7:clr=253|7:cls=253|7:clt=253|7:clv=253|7:clz=253|7:com=253|6:cp=253|7:cpc=253|7:cpi=253|8:cpse=253|7:dec=253|8:elmp=253|7:eor=253|8:fmul=253|9:fmuls=253|10:fmulsu=253|9:icall=253|8:ijmp=253|6:in=253|7:inc=253|7:jmp=253|6:ld=253|7:ldi=253|7:lds=253|7:lpm=253|7:lsl=253|7:lsr=253|7:mov=253|8:movw=253|7:mul=253|8:muls=253|9:mulsu=253|7:neg=253|7:nop=253|6:or=253|7:ori=253|7:out=253|7:pop=253|8:push=253|9:rcall=253|7:ret=253|8:reti=253|8:rjmp=253|7:rol=253|7:ror=253|8:sbc=253 |8:sbci=253|7:sbi=253|8:sbic=253|8:sbis=253|8:sbiw=253|7:sbr=253|8:cbrc=253|8:sbrs=253|7:sec=253|7:seh=253|7:sei=253|7:sen=253|7:ser=253|7:ses=253|7:set=253|7:sev=253|7:sez=253|9:sleep=253|7:spm=253|6:st=253|7:std=253|7:sts=253|7:sub=253|8:subi=253|8:swap=253|7:tst=253|7:wdr=253|8:;=Blue=U|0:|2: |
HilightFont=[Courier New,10,0,0,1]
AutoCompStrings=#34:adc_сложение_двух_РОН_с_переносом |21:add_сложение_двух_РОН|36:adiw_сложение_рег_пары_с_константой |18:and_лог_И_двух_РОН|26:andi_лог_И_РОН_и_константы|21:asr_ариф_сдвиг_вправо|23:bclr_сброс_разряда_SREG|34:bld_пересылка_флага_Т_в_разряд_РОН|37:brbc_переход_если_разряд_SREG_сброшен|40:brbs_переход_если_разряд_SREG_установлен|34:brcc_переход_если_не_было_переноса|24:brcs_переход_по_переносу|21:breq_переход_по_равно|32:brge_переход_по_больше_или_равно|46:brhc_переход_если_не_было_половинного_переноса|36:brhs_переход_по_половинному_переносу|38:brid_переход_если_прерывария_запрещены|38:brie_переход_если_прерывания_разрешены|38:brlo_переход_по_меньше_для_беззнаковых|35:brlt_переход_по_меньше_для_знаковых|30:brmi_переход_по_отриц_значение|24:brne_переход_по_не_равно|30:brpl_переход_по_полож_значение|30:brsh_переход_по_выше_или_равно|32:brtc_переход_если_флаг_Т_сброшен|35:brts_переход_если_флаг_Т_установлен|43:brvc_переход_если_нет_переполнения_доп_кода|37:brvs_переход_по_переполнению_доп_кода|27:bset_установка_разряда_SREG|31:bst_запись_разряда_РОН_в_флаг_Т|29:call_абсол_вызов_подпрограммы|23:cbi_сбросить_разряд_РВВ|22:cbr_сброс_разрядов_РОН|24:clc_сброс_флага_переноса|36:clh_сброс_флага_половинного_переноса|31:cli_общее_запрещение_прерываний|30:cln_сброс_флага_отриц_значения|15:clr_очистка_РОН|21:cls_сброс_флага_знака|17:clt_сброс_флага_Т|39:clv_сброс_флага_переполнения_допол_кода|20:clz_сброс_флага_нуля|29:com_вычисление_обратного_кода|16:cp_сравнение_РОН|35:cpc_сравнение_РОН_с_учетом_переноса|42:cpi_сравнение_содержимого_РОН_с_константой|43:cpse_пропуск_команды_при_равенстве_двух_РОН|17:dec_декремент_РОН|51:elmp_расширенная_загрузка_данных_из_памяти_программ|28:eor_исключающее_ИЛИ_двух_РОН|40:fmul_умножение_дробных_беззнаковых_чисел|38:fmuls_умножение_дробных_знаковых_чисел|71:fmulsu_умножение_дробного_беззнакового_числа_и_дробного_числа_со_знаком|34:icall-косвенный вызов подпрограммы|22:ijmp_косвенный_переход|34:in_пересылка_значения_из_РВВ_с_РОН|17:inc_инкремент_РОН|29:jmp_абсол_безусловный_переход|33:ld_косвенное_чтение_памяти_данных|28:ldi_загрузка_константы_в_РОН|46:lds_непосредственная_загрузка_из_памяти_данных|38:lpm_загрузка_данных_из_памяти_программ|26:lsl_логический_сдвиг_влево|27:lsr_логический_сдвиг_вправо|23:mov_пересылка_между_РОН|31:movw_пересылка_между_парами_РОН|31:mul_умножение_беззнаковых_чисел|30:muls_умножение_чисел_со_знаком|52:mulsu_умножение_беззнакового_числа_и_числа_со_знаком|25:neg_вычисление_допол_кода|18:nop_пустая_команда|19:or_лог_ИЛИ_двух_РОН|27:ori_лог_ИЛИ_РОН_и_константы|35:out_пересылка_значения_из_РОН_в_РВВ|29:pop_извлечение_байта_из_стека|29:push_сохранение_байта_в_стеке|38:rcall_относительный_вызов_подпрограммы|27:ret_возврат_из_подпрограммы|49:reti_возврат_из_подпрограммы_обработки_прерывания|38:rjmp_относительный_безусловный_переход|29:rol_сдвиг_влево_через_перенос|30:ror_сдвиг_вправо_через_перенос|23:sbc_вычитание_с_заемом |40:sbci_вычитание_константы_из_РОН_с_заемом|25:sbi_установить_разряд_РВВ|47:sbic_пропустить_команду_если_разряд_РВВ_сброшен|50:sbis_пропустить_команду_если_разряд_РВВ_установлен|44:sbiw_вычитание_константы_из_регистровой_пары|26:sbr_установка_разрядов_РОН|47:cbrc_пропустить_команду_если_разряд_РОН_сброшен|50:sbrs_пропустить_команду_если_разряд_РОН_установлен|28:sec_установка_флага_переноса|40:seh_установка_флага_половинного_переноса|31:sei_общее_разрешение_прерываний|34:sen_установка_флага_отриц_значения|17:ser_установка_РОН|25:ses_установка_флага_знака|21:set_установка_флага_Т|41:sev_установка_флага_переполнения_доп_кода|24:sez_установка_флага_нуля|28:sleep_переход_в_спящий_режим|41:spm_изменение_содержимого_памяти_программ|35:st_косвенная_запись_в_память_данных|50:std_косвенная_относительная_запись_в_память_данных|43:sts_непосредственная_запись_в_память_данных|22:sub_вычитание_двух_РОН|36:subi_вычитание_константы_из_регистра|28:swap_перестановка_тетрад_РОН|46:tst_проверка_РОН_на_нулевое_или_отриц_значение|30:wdr_сброс_сторожевого_таймера |
AllowDelim=0
FindReplace=0
FindBack=0
FindSpaces=0
ReplaceAll=0
Point(doShowAutoComp)
Point(onMouseMove)
Point(onAutoComp)
Point(WordAtPosStartX)
Point(SearchStr)
Point(ReplaceStr)
Point(doSelectWordUnderCursor)
Point(doFind)
Point(SearchFrom)
Point(onAddAutoComp)
Point(PositionX)
Point(PositionY)
Point(doDeleteSelect)
link(SearchStr,4531420:Result,[])
link(SearchFrom,9507543:Point,[(573,226)(608,226)])
link(onAddAutoComp,7044084:doSplit,[])
}
Add(StrPart,7044084,602,266)
{
@Color=15132390
Char="_"
Point(Right)
link(onPart,4531420:doStrCat,[(665,279)(665,143)(541,143)(541,181)])
}
Add(PointXY,9507543,602,175)
{
@Color=15132390
X=200
link(X,9822400:PositionX,[(608,157)(654,157)(654,346)(573,346)])
link(Y,9822400:PositionY,[(615,165)(646,165)(646,337)(580,337)])
}
Add(StrCat,4531420,553,175)
{
@Color=15132390
Str1="_"
link(onStrCat,10353682:doTimer,[(599,181)(599,137)(475,137)(475,307)])
link(Str2,7044084:Right,[(566,156)(594,156)(594,310)(608,310)])
}
Add(Timer,10353682,490,301)
{
Interval=25
Enable=1
AutoStop=1
link(onTimer,9822400:doFind,[])
}


Все схемные пляски с бубном нужны только для добавления нового значения в список
карма: 22

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#26: 2009-08-18 16:39:09 ЛС | профиль | цитата
Добавлена возможность сохранять/загружать список автозавершения и список подсвечиваемых слов
карма: 22

0
Ответов: 1304
Рейтинг: 405
#27: 2009-08-18 20:51:21 ЛС | профиль | цитата
nesco, нерешённые вопросы, это комментарии обычным курсивом а остальная подсветка жирная. Но этот из области хотелок и принципе не смертельно.
MAV писал(а):
остался ещё вопросик по поводу агрессивного поведения горизонтального скролбара, зафиксировать его никак нельзя ?

Если текст насыщен строками разной длинны, то при протяжке вертикальным скролбаром довольно сильно напрягает непрерывное мерцание(появился, исчез) горизонтального сролбара, возможно это только моё субъективное мнение.
ps: действительно begin одним цветом с end лучше визуально воспринимается, да и с логической точки оправданно.

карма: 3

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#28: 2009-08-18 22:55:23 ЛС | профиль | цитата
Добавлена возможность делать курсив и зачеркивание подсвечиваемых символов. Убрано перескакивание горизонтальной прокрутки
карма: 22

0
Ответов: 32
Рейтинг: 2
#29: 2009-08-19 09:56:59 ЛС | профиль | цитата
Большое спасибо за доработку, да сейчас можно убрать лишние элементы.
карма: 0

0
Ответов: 899
Рейтинг: 43
#30: 2009-08-20 17:40:52 ЛС | профиль | цитата
а как сделать такое?

Em C G
I could bet on new-years eve he'd call me up at night
Em C D
From the other side of the world Ed was always there alright
Am G D Am
Ed's got the looks of a movie star Ed's got the smile of a prince
D Em C D
He ride a bike instead of a car I wanna be his friend

карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)