LookDBF

Здесь можно обсудить ваш любимый плагин.
buniak_a_h
Posts: 313
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 34 times
Been thanked: 4 times
Contact:

LookDBF

Post by buniak_a_h » Mon 18 Jul, 2016 14:30

Latest post of the previous page:

Vertigo wrote: Думаю, ограничение победить не удастся
Как выяснилось, это - ограничение для Far-1. Если перейти на интерфейс Far-3, то ограничение уйдёт. Но!
  1. Тогда плугин перестанет работать под первым ФАРом
  2. На самом деле мне тоже вариант (а) нравится. Не только универсальностью, но и удобством: очень длинные поля реально удобнее править в обычном редакторе (можно использовать идею WordWrap-а: запоминать позиции, куда вставляется \n и перед сохранением удалять. Также переформатировать при изменении размера консоли).
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

buniak_a_h
Posts: 313
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 34 times
Been thanked: 4 times
Contact:

LookDBF

Post by buniak_a_h » Mon 18 Jul, 2016 14:33

Vertigo wrote:Это, а также по соседству в GoLast я поправил. Правда, во втором случае остался-таки косяк, когда последняя колонка отображается на экране не полностью. Я пока не понимаю, что там хотел сказать оригинальный автор в коде. Но хотя бы падать не должно.
На самом деле кузяво было бы убрать варнинги. Как-то несолидно... Да и неизвестно, чем выльется и когда. Так и данные запортить можно
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

User avatar
Vertigo
Posts: 61
Joined: Tue 13 Apr, 2010 12:04
Location: Moscow, Russia
Has thanked: 7 times
Been thanked: 2 times

LookDBF

Post by Vertigo » Mon 18 Jul, 2016 14:57

На самом деле мне тоже вариант (а) нравится. Не только универсальностью, но и удобством: очень длинные поля реально удобнее править в обычном редакторе
Вот и я про удобство. Я бы, наверное, даже принудительно ограничил меньшей длиной, чем сейчас вмещается, скажем, 256.
Вот только я не очень уверен насчёт "махинаций" с переносом строк. Я бы пошёл по пути а-ля браузер и HTML: переносы строк заменяются на пробел.

buniak_a_h
Posts: 313
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 34 times
Been thanked: 4 times
Contact:

LookDBF

Post by buniak_a_h » Mon 18 Jul, 2016 15:07

Vertigo wrote: принудительно ограничил меньшей длиной,
На самом деле я бы ограничил 512, а редактирование в окне вызывал бы по F4 (просмотр, соответственно, по F3)
Vertigo wrote: переносы строк заменяются на пробел.
У нас есть документы (и в форме XML-документов, и в форме DBF-таблиц), в которых в символьных полях хранятся переносы строк (типа для форматирования юзером). Увы, убедить руководство таможни не смогли ни мы, ни технические специалисты таможни. Поэтому либо (а) редактировать всё поле в виде одной длинной-длинной строки (что ненамного не удобнее имеющегося), либо (б) перед выводом на экран (и при любом изменении) расставлять \n, запоминая позиции, куда вставлено.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

User avatar
Vertigo
Posts: 61
Joined: Tue 13 Apr, 2010 12:04
Location: Moscow, Russia
Has thanked: 7 times
Been thanked: 2 times

LookDBF

Post by Vertigo » Mon 18 Jul, 2016 16:57

buniak_a_h wrote: На самом деле кузяво было бы убрать варнинги. Как-то несолидно...
Безусловно. Со временем. Просто не хочется бездумно расширять размерность локальных переменных. Может потом в обратную сторону "не влезть".
На самом деле, я глазами всё просмотрел - особо криминала не заметил.
Просто в коде жёсткая экономия на переменных и их реюз. Надо разносить.

User avatar
Vertigo
Posts: 61
Joined: Tue 13 Apr, 2010 12:04
Location: Moscow, Russia
Has thanked: 7 times
Been thanked: 2 times

LookDBF

Post by Vertigo » Mon 18 Jul, 2016 17:01

buniak_a_h wrote: Ничего сложного (особенно, если использовать СОВРЕМЕННЫЙ язык C++. Такого древнего кода, как в этом плугине, не встречал с примерно 1992-го года.
В том-то и проблема, что мои знания этого языка фактически ограничиваются правками уже существующего кода. На чуть более современном уровне, чем данный мамонт. Поэтому многого от меня ждать не приходится... :-(

User avatar
DrKnS
Posts: 4581
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 115 times
Contact:

LookDBF

Post by DrKnS » Mon 18 Jul, 2016 20:43

Vertigo wrote: Думаю, ограничение победить не удастся.
DIF_VAREDIT.

User avatar
Vertigo
Posts: 61
Joined: Tue 13 Apr, 2010 12:04
Location: Moscow, Russia
Has thanked: 7 times
Been thanked: 2 times

LookDBF

Post by Vertigo » Mon 18 Jul, 2016 20:54

Спасибо, я уже обнаружил это. Копаю в ту сторону.

buniak_a_h
Posts: 313
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 34 times
Been thanked: 4 times
Contact:

LookDBF

Post by buniak_a_h » Mon 18 Jul, 2016 21:06

DrKnS wrote: DIF_VAREDIT
Лаконично... :-(
На самом деле, кроме этого проблема в структуре FarDialogItem для первого ФАРа (там массив символов char[512]). Собственно, все описания структур для первого ФАРа я узнаю из файла Plugin.hpp, входящего в исходники (видимо, первый автор получил его с ФАРом, так и тянется...) Чтобы продолжить переделки, нужно иметь описание API первого. У меня его нет. И главное: мы с Vertigo думаем, что игра не стоит свеч: длинные строки просто удобнее редактировать в многострочном редакторе. Тем более, если будет весь редакторский сервис (замена, регэкспы, темплейты и т.п.)
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

User avatar
DrKnS
Posts: 4581
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 115 times
Contact:

LookDBF

Post by DrKnS » Mon 18 Jul, 2016 21:27

buniak_a_h wrote: нужно иметь описание API первого. У меня его нет
Описание API можно найти в дистрибутиве.
Где можно найти дистрибутив - думаю, знаете.

User avatar
Vertigo
Posts: 61
Joined: Tue 13 Apr, 2010 12:04
Location: Moscow, Russia
Has thanked: 7 times
Been thanked: 2 times

LookDBF

Post by Vertigo » Mon 18 Jul, 2016 22:42

Plugin.hpp и есть его описание. Взято мной (как и всеми остальными) из дистрибутива или репозитория с исходниками. Комментарии к нему в т.н. энциклопедии, которая также есть в дистрибутиве.

buniak_a_h
Posts: 313
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 34 times
Been thanked: 4 times
Contact:

LookDBF

Post by buniak_a_h » Mon 18 Jul, 2016 22:59

Vertigo wrote:Plugin.hpp и есть его описание. Взято мной (как и всеми остальными) из дистрибутива или репозитория с исходниками. Комментарии к нему в т.н. энциклопедии, которая также есть в дистрибутиве.
Да всё понятно. Только (а) дистр нужен первого, неохота откатываться; (б) в энциклопедии описан (почти везде) современный АПИ (точнее, какая-то смесь старого и нового) и главное - у Вас была здравая мысль: редактировать в отдельном окне даже не с 512, а меньше. Посему я бы и рыть не стал...
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

User avatar
Vertigo
Posts: 61
Joined: Tue 13 Apr, 2010 12:04
Location: Moscow, Russia
Has thanked: 7 times
Been thanked: 2 times

LookDBF

Post by Vertigo » Mon 18 Jul, 2016 23:25

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

buniak_a_h
Posts: 313
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 34 times
Been thanked: 4 times
Contact:

LookDBF

Post by buniak_a_h » Mon 18 Jul, 2016 23:33

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-компании

buniak_a_h
Posts: 313
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 34 times
Been thanked: 4 times
Contact:

LookDBF

Post by buniak_a_h » Tue 19 Jul, 2016 00:43

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

Мои исправления:
LookDBF.Sources.rar
Только исходники. Новое помечено «// BAX, 18.07.16»
(94.12 KiB) Downloaded 24 times
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

buniak_a_h
Posts: 313
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 34 times
Been thanked: 4 times
Contact:

LookDBF

Post by buniak_a_h » Tue 19 Jul, 2016 04:12

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

buniak_a_h
Posts: 313
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 34 times
Been thanked: 4 times
Contact:

LookDBF

Post by buniak_a_h » Fri 21 Apr, 2017 14:11

Vertigo, вроде нашёл критическую ошибку. Прилагаемую БД плагин считает пустой; на самом деле в ней 330 записей. Возможно, у меня устаревшая версия, к тому же немного изменённая (для поиска поля и для просмотра длинных полей в виде мемо). Изменения я Вам присылал, но в то время в версию они не вошли (а жаль).
OUPRF.RAR
Плагин считает пустым. На самом деле 330 записей
(962 Bytes) Downloaded 15 times
Сообщение на всякий случай продублировал в личку... Извините, если что. :facepalm:

Post Reply

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