Редактор TextEdit

...
Post Reply
User avatar
IgorA
Posts: 939
Joined: Mon Oct 27, 2008 10:10 pm

Редактор TextEdit

Post by IgorA »

Решил создать программу для работы с текстовыми файлами.
Думаю, что будет как альтернативная программа к TinyPad.

Преимущество по сравнению с TinyPad в том что есть многократный Повтор/Отмена действий.

Можно работать с файлами больше 65 Кб. Скроллинга пока нет так что на большие файлы можно не надеяться. Недостатков пока намного больше, потому что многое не сделано. Версия тестовая, так что просьба с "серйозными" файлами пока не работать.
Last edited by IgorA on Sat Feb 14, 2009 2:35 pm, edited 1 time in total.
User avatar
Gluk
Posts: 1222
Joined: Mon Apr 16, 2007 6:38 pm

Re: текстовый редактор

Post by Gluk »

здОрово) конкуренция нужная вещь) // [offtop]Leency, а может и сделаю браузер ;) не знаю пока.[/offtop]
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Veliant
Posts: 284
Joined: Thu Jan 26, 2006 8:47 pm

Re: текстовый редактор

Post by Veliant »

Это конечно хорошо, но хочу немного критики.. вынеси элементы в разные процедуры и например по нажатию клавиши перерисовывай не все окно а только вызывай нужную функцию и тогда перерисовку почти не будет видно)
User avatar
IgorA
Posts: 939
Joined: Mon Oct 27, 2008 10:10 pm

Re: текстовый редактор

Post by IgorA »

Veliant
по нажатию клавиши перерисовывай не все окно а только вызывай нужную функцию и тогда перерисовку почти не будет видно
На форуме я подобные предложения видел, но пока перерисовать часть окна у меня почему-то не удавалось. Может я что-то еще не знаю об работе системы :(
Например я пишу процедуру:

Code: Select all

Red_MainWnd:
  push eax ebx
  mcall 12,1 ;готовлюсь к рисованию

  xor eax,eax
  mov ebx,10*65536+460
  mov ecx,10*65536+230
  mov edx,[sc.work]
  or  edx,0x73000000
  mov edi,hed
  mcall ;прорисовываю контур окна

  call draw_main_win ;прорисовываю в отдельной функции измененную часть окна

  mcall 12,2 ;кидаю из контекста на экран
  pop ebx eax
  ret ;возвращаюсь обратно в вызвавшую функцию
И оно не работает. По идее, на сколько я понимаю должно работать, или я что-то упустил ?
User avatar
Heavyiron
Posts: 1073
Joined: Fri Jan 27, 2006 3:06 pm

Re: текстовый редактор

Post by Heavyiron »

То, что ты выложил - это только начало, гораздо важнее при изменении какой-то области вызывать не полностью Red_MainWnd, а, например, ту самую draw_main_win, в которой не рисуется ничего лишнего, а только то, что нужно в данный момент, причем чем больше таких подфункций, тем меньшие участки можно перерисовывать. Вообще функцию Red_MainWnd стоит вызывать только при старте программы и как реакцию на системную перерисовку окна, во всех остальных случаях использовать подфункции.
User avatar
IgorA
Posts: 939
Joined: Mon Oct 27, 2008 10:10 pm

Re: текстовый редактор

Post by IgorA »

Понял я в чем была проблема. Дополнительную функцию перерисовки я поставил сразу за основной, перед входом в главный цикл, потому и глючило. А я подумал что может как в Виндовсе контекст какой для рисования нужно готовить, а оказывается все проще чем я думал, сразу рисую что надо ... :D .

Мигать стало меньше.
User avatar
mike.dld
Site Founder
Posts: 693
Joined: Sun Aug 08, 2004 8:55 am

Re: текстовый редактор

Post by mike.dld »

IgorA wrote:можно работать с файлами больше 65 Кб
Только что открыл файл размером 700КБ (12000+ строк). Что я делаю не так? Или это замечание к Tinypad'у не относится?..

P.S.: Кроме undo/redo я пока что не вижу причин начинать что-то новое (легче добавить в Tinypad). Есть что-то ещё, о чём ты не говоришь?
in code we trust
User avatar
IgorA
Posts: 939
Joined: Mon Oct 27, 2008 10:10 pm

Re: текстовый редактор

Post by IgorA »

Дело в том что один файл у меня есть 360Кб, при открытии которого у меня глючит ОС.
Раз дело не в размере, то я подправлю свое сообщение.
User avatar
diamond
Kernel Developer
Posts: 1600
Joined: Mon Nov 28, 2005 8:00 pm

Re: текстовый редактор

Post by diamond »

Дело в том что один файл у меня есть 360Кб, при открытии которого у меня глючит ОС.
Даже на легендарном ЛОРе телепатов никому не удаётся заставить работать, они постоянно в отпуске, а здесь их вообще отродясь не было...
В последнем дистре это проявляется? Скопировать файл в файловых менеджерах удаётся (желательно попробовать все)? Как именно начинает глючить? Глючит только tinypad или kfar'овский редактор тоже?
Ушёл к умным, знающим и культурным людям.
User avatar
mike.dld
Site Founder
Posts: 693
Joined: Sun Aug 08, 2004 8:55 am

Re: текстовый редактор

Post by mike.dld »

Напиши в личку, что значит "глючит ОС", разберёмся...
in code we trust
User avatar
IgorA
Posts: 939
Joined: Mon Oct 27, 2008 10:10 pm

Re: текстовый редактор

Post by IgorA »

diamond
Глюк был в том что при открытии этого файла пропадал курсор, и я не мог двигать окна без курсора. Повторить глюк у меня не получилось, но раньше он несколько раз был.
Файл копируется удачно, думаю наверно что-то было не то в системе, TinyPad тут не причем, а я подумал на него потому что при открытии файла глючило. Наверное какая-нибудь программа портила память, как результат на других программах вылазило.

Немного обновил TextEdit
1) мерцать стало меньше, но все же еще можно оптимизировать
2) добавил прокрутку по строкам (для вертикального скролинга заготовил 2 кнопки, а так по клавиатуре PageUp PageDown)
3) меняются размеры окна с текстом в зависимости от procinfo.client_box
4) убрал один глюк
Mario

Re: текстовый редактор

Post by Mario »

IgorA
Весьма рекомендую обратить внимание на тему:
viewtopic.php?f=2&t=1220
То что там заявлено не шутка и если ты не будешь торопится, то немалую часть работы по коду можно будет не делать.
Разумеется это лишь в том случае, если это не очередная поделка на пару недель, а потом забили на это дело...
User avatar
IgorA
Posts: 939
Joined: Mon Oct 27, 2008 10:10 pm

Re: текстовый редактор

Post by IgorA »

Mario
В том, что надо стремится все стандартизировать ты прав. Общие компоненты это хорошо.
Но дело в том что скролинги от andrew_programer я не взял по 2 причинам:
1) вертикальный и горизонтальный отличаются по оформлению, не красиво что один будет квадратный а другой скругленный
2) она (библиотека) давно не развивается и вроди не доделана до конца
А компонент EditBox я взял от Lrz. Он говорит, что хочет сделать стандартный скролинг, этого я не знал, спасибо тебе за ссылку.
В любом случае почти во всех программах, которые я видел, скролинги делались через кнопки системной функции 8 у меня пока нет другого выхода :?

: Открой код ZSea и может я из него возьму менюшку :wink: и для Lrz меньше работы будет (меню он тоже хочет добавить в box_lib.obj).
Mario

Re: текстовый редактор

Post by Mario »

IgorA
Вообще то в теме обсуждалась BOX_LIB, а не LIBGUI и соответственно речь о компонентах от andrew_programer не шла.
Код zSea я открывать не буду, но вот макросы компонентов SCROLLBAR, DINAMIC BUTTON и MENU BAR будут интегрированы в BOX_LIB.
Использовать бибилотеку можно даже не имея исходников, но поскольку я не "собака на сене", то исходники данных компонентов будут выложены под лицензией аналогичной BSD.
и для Lrz меньше работы будет
Вообще то открою страшную тайну - речь шла о моих компонентах, поскольку написание аналогичных компонентов в приемлмые сроки для <Lrz> не реально (у него сейчас совсем другие жизненные трудности).

З.Ы. Еще раз повторяю, если плохо понятно - компоненты встроенные в загружаемый модуль (по другому библиотека) можно использовать и не имея исходника - достаточно иметь документацию и/или пример использования. Это замечательно демонстрируется на KFAR_ARC.OBJ и SORT.OBJ которые есть в архиве zSea и к исходникам которых я не притрагивался (да исходники есть, но раз соблюден принцип "черного ящика" то я с таким же успехом мог бы использовать их не имея исходников).
User avatar
IgorA
Posts: 939
Joined: Mon Oct 27, 2008 10:10 pm

Re: текстовый редактор

Post by IgorA »

Сделал несколько доработок (версия 18.02.2009):
1) память под файл bmp выделяю через функции, в связи с чем размер программы уменьшился на 19 Кб
но теперь в KlbrInWin вместо кнопок черные квадраты
2) ввел режим замены символа (вкл. кнопкой Ins)
3) уменьшил мерцание (при движении курсора Вверх/Вниз внутри окна), Влево и Вправо - пока мигает
4) вертик. скролинг немного доработал, но скорее всего буду менять его на библиотечный, нижний пока не развиваю, жду готовых примеров использования библиотеки

---
Добавил файл readme, в котором можно еще кое что прочитать, особенно рекомендую прочитать раздел в нем: *** Некоторые недоработки ***
---
Файл ниже, а серое уже исправил ...
Last edited by IgorA on Wed Feb 18, 2009 11:32 pm, edited 1 time in total.
Post Reply

Who is online

Users browsing this forum: No registered users and 0 guests