LookDBF

Здесь можно обсудить ваш любимый плагин.
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

LookDBF

Post by buniak_a_h »

Latest post of the previous page:

Vertigo wrote: Думаю, ограничение победить не удастся
Как выяснилось, это - ограничение для Far-1. Если перейти на интерфейс Far-3, то ограничение уйдёт. Но!
  1. Тогда плугин перестанет работать под первым ФАРом
  2. На самом деле мне тоже вариант (а) нравится. Не только универсальностью, но и удобством: очень длинные поля реально удобнее править в обычном редакторе (можно использовать идею WordWrap-а: запоминать позиции, куда вставляется \n и перед сохранением удалять. Также переформатировать при изменении размера консоли).
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

LookDBF

Post by buniak_a_h »

Vertigo wrote:Это, а также по соседству в GoLast я поправил. Правда, во втором случае остался-таки косяк, когда последняя колонка отображается на экране не полностью. Я пока не понимаю, что там хотел сказать оригинальный автор в коде. Но хотя бы падать не должно.
На самом деле кузяво было бы убрать варнинги. Как-то несолидно... Да и неизвестно, чем выльется и когда. Так и данные запортить можно
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
Vertigo
Posts: 85
Joined: Tue 13 Apr, 2010 12:04
Location: Moscow, Russia
Has thanked: 11 times
Been thanked: 4 times

LookDBF

Post by Vertigo »

На самом деле мне тоже вариант (а) нравится. Не только универсальностью, но и удобством: очень длинные поля реально удобнее править в обычном редакторе
Вот и я про удобство. Я бы, наверное, даже принудительно ограничил меньшей длиной, чем сейчас вмещается, скажем, 256.
Вот только я не очень уверен насчёт "махинаций" с переносом строк. Я бы пошёл по пути а-ля браузер и HTML: переносы строк заменяются на пробел.
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

LookDBF

Post by buniak_a_h »

Vertigo wrote: принудительно ограничил меньшей длиной,
На самом деле я бы ограничил 512, а редактирование в окне вызывал бы по F4 (просмотр, соответственно, по F3)
Vertigo wrote: переносы строк заменяются на пробел.
У нас есть документы (и в форме XML-документов, и в форме DBF-таблиц), в которых в символьных полях хранятся переносы строк (типа для форматирования юзером). Увы, убедить руководство таможни не смогли ни мы, ни технические специалисты таможни. Поэтому либо (а) редактировать всё поле в виде одной длинной-длинной строки (что ненамного не удобнее имеющегося), либо (б) перед выводом на экран (и при любом изменении) расставлять \n, запоминая позиции, куда вставлено.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
Vertigo
Posts: 85
Joined: Tue 13 Apr, 2010 12:04
Location: Moscow, Russia
Has thanked: 11 times
Been thanked: 4 times

LookDBF

Post by Vertigo »

buniak_a_h wrote: На самом деле кузяво было бы убрать варнинги. Как-то несолидно...
Безусловно. Со временем. Просто не хочется бездумно расширять размерность локальных переменных. Может потом в обратную сторону "не влезть".
На самом деле, я глазами всё просмотрел - особо криминала не заметил.
Просто в коде жёсткая экономия на переменных и их реюз. Надо разносить.
User avatar
Vertigo
Posts: 85
Joined: Tue 13 Apr, 2010 12:04
Location: Moscow, Russia
Has thanked: 11 times
Been thanked: 4 times

LookDBF

Post by Vertigo »

buniak_a_h wrote: Ничего сложного (особенно, если использовать СОВРЕМЕННЫЙ язык C++. Такого древнего кода, как в этом плугине, не встречал с примерно 1992-го года.
В том-то и проблема, что мои знания этого языка фактически ограничиваются правками уже существующего кода. На чуть более современном уровне, чем данный мамонт. Поэтому многого от меня ждать не приходится... :-(
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

LookDBF

Post by DrKnS »

Vertigo wrote: Думаю, ограничение победить не удастся.
DIF_VAREDIT.
User avatar
Vertigo
Posts: 85
Joined: Tue 13 Apr, 2010 12:04
Location: Moscow, Russia
Has thanked: 11 times
Been thanked: 4 times

LookDBF

Post by Vertigo »

Спасибо, я уже обнаружил это. Копаю в ту сторону.
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

LookDBF

Post by buniak_a_h »

DrKnS wrote: DIF_VAREDIT
Лаконично... :-(
На самом деле, кроме этого проблема в структуре FarDialogItem для первого ФАРа (там массив символов char[512]). Собственно, все описания структур для первого ФАРа я узнаю из файла Plugin.hpp, входящего в исходники (видимо, первый автор получил его с ФАРом, так и тянется...) Чтобы продолжить переделки, нужно иметь описание API первого. У меня его нет. И главное: мы с Vertigo думаем, что игра не стоит свеч: длинные строки просто удобнее редактировать в многострочном редакторе. Тем более, если будет весь редакторский сервис (замена, регэкспы, темплейты и т.п.)
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

LookDBF

Post by DrKnS »

buniak_a_h wrote: нужно иметь описание API первого. У меня его нет
Описание API можно найти в дистрибутиве.
Где можно найти дистрибутив - думаю, знаете.
User avatar
Vertigo
Posts: 85
Joined: Tue 13 Apr, 2010 12:04
Location: Moscow, Russia
Has thanked: 11 times
Been thanked: 4 times

LookDBF

Post by Vertigo »

Plugin.hpp и есть его описание. Взято мной (как и всеми остальными) из дистрибутива или репозитория с исходниками. Комментарии к нему в т.н. энциклопедии, которая также есть в дистрибутиве.
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

LookDBF

Post by buniak_a_h »

Vertigo wrote:Plugin.hpp и есть его описание. Взято мной (как и всеми остальными) из дистрибутива или репозитория с исходниками. Комментарии к нему в т.н. энциклопедии, которая также есть в дистрибутиве.
Да всё понятно. Только (а) дистр нужен первого, неохота откатываться; (б) в энциклопедии описан (почти везде) современный АПИ (точнее, какая-то смесь старого и нового) и главное - у Вас была здравая мысль: редактировать в отдельном окне даже не с 512, а меньше. Посему я бы и рыть не стал...
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
Vertigo
Posts: 85
Joined: Tue 13 Apr, 2010 12:04
Location: Moscow, Russia
Has thanked: 11 times
Been thanked: 4 times

LookDBF

Post by Vertigo »

Дистрибутив есть на сайте в разделе загрузки по ссылке собрание сочинений. В виде архива в том числе, насколько я помню.
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

LookDBF

Post by buniak_a_h »

Vertigo
Нашёл ещё две ошибки:
  1. Надо расширить буфер редактирования всей записи (модуль LookDBF.cpp, метод WORD LOOK::EditRecord(void), описание s[384] заменить на [b]s[32767][/b])
  2. Там же метод EditDialog::Line(...): необходимо перед формированием элемента DI_TEXT чистить память (после строки
    if (iLast == nItems) return 0;
    вставить строку
    ZeroMemory(&(di[iLast]), sizeof(di[iLast]));.
    Или по-другому. Но чистить надо, иначе, например, имя второго поля в той БД, что я высылал для теста, не видно).
    На самом деле имеет смысл, наверно, почистить весь массив di Сразу после размещения, в процедуре EditDialog::Init. А то могут быть совершенно непредвиденные эффекты... НО!!! Вставка ZeroMemory(di, sizeof(di)); после di = new <...> в процедуре EditDialog::Init проблему не решает. Я давно не писал на СИ, не помню, как он с памятью и указателями работает... Может, так и должно быть.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

LookDBF

Post by buniak_a_h »

Vertigo
ЗЫ.
Насчёт того кода, что написал (после di = new <...>) - я не совсем деревянный, понимаю, что sizeof(di)=4. Значит, либо в цикле надо чистить, либо возможно есть ключ компилятора, заставляющий генерить код, очищающий выделенные блоки памяти (типа запрета оптимизации). Я знаю, что в некоторых компиляторах такие флаги есть.
Если верить MSDN, при выделении памяти можно указать инициализатор. Причём, написано, что пустые фигурные скобки инициализируют всё нулями. Ер у меня не получилось - синтаксис ругается, а примера инициализации массива структур в MSDN нету... Может, знаете, как это сделать? Было бы удобно...

Мои исправления:
LookDBF.Sources.rar
Только исходники. Новое помечено «// BAX, 18.07.16»
(94.12 KiB) Downloaded 106 times
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

LookDBF

Post by buniak_a_h »

Vertigo
Я прошу прощения за назойливость.
В процедуре LOOK::ShowMemo тоже ошибка. Есть строка if (Yes(WinCode)) ToOem(coCurr->name, nafi) ;, но нет строки else lstrcpy(nafi, coCurr->name);. В результате, если НЕ Yes(WinCode) (подозреваю, что это - ansi-кодировка), то nafi остаётся неопределённым, и в следующей строке ( FSF.sprintf(title,...) ) всё портится (в том числе и имя файла).
Есть неприятность: при вызове плагина или при работе с ним уже выбрана кодовая страница. Но при просмотре-редактировании МЕМО-поля (на самом деле - временного файла) кодовую страницу в редактор при АПИ ФАР-1 не передать. В результате кодовая страница определяется снова. И очень часто неправильно. :-(
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
Post Reply

Return to “Обсуждение плагинов”