1. Процедуры - это и есть методы. Методы - это функции и процедуры.
2. Не надо путать библиотеки конкретных языков и динамические библиотеки в ос. Библиотеки для js конечно в js подключатся одной строкой. Как и библиотеки для шарпа в шарпе подключатся одной строкой, но вот библиотеки из шарпа никогда не подключатся в js. Библиотека - это набор кода на конкретном языке. Как ты код на шарпе подключишь одной строкой в js?
3. Если речь о DLL-библиотеках, то JS тут вообще ни каким боком. Он такие ни когда не переварит. Такие библиотеки в делфи подключаются либо через интерфейсы, либо через ком.
SaveDialog1 не может выдавать ошибку. Это просто диалоговое окно. Оно не имет ни какого отношения к сохранению файла, который ты создаешь. Оно лишь возвращает строку - название файла. Дальше сам. Диалоговое окно не создает ни каких файлов.
Где именно у тебя ошибка происходит? Здесь ничерта не понятно.
Думаю можно посмотреть на какие-нибудь пакеты или компоненты отчетов. У многих из них есть экспорт и импорт.
Ну и разметка html богаче чем rtf, из-за чего просто невозможно четко перевести из html в rtf.
Ну вы же сами сказали, что это самодельный отчёт.
Есть ли возможность найти генератор такого ответа на Delphi? Если нет, то придется угадывать структуру записей (record) и пытаться читать, пока не совпадет.
На первый взгляд тут не сложная структура с фиксированной строкой (строками).
Но так или иначе, лучше найти генератор такого отчёта.
Создаешь новую форму. Добавляешь таблицу, добавляешь источники данных. Связываешь друг с другом. Добавляешь поля для редактирования источников. Ну и контрол управления таблицей.
Все это, компоненты DBGrid, DBEdit, DBNavigator и тд
При изменении записи в таблице прав делаешь записи в другую таблицу (таблица - история действий).
Добавляешь права или изменяешь, создаешь запись в таблице истории. Таблицу подключаешь в другой (нужной) форме.
История изменений ни где автоматически не пишется.
function columnToLetter(column: Integer): string;
var
temp: Integer;
begin
Result := '';
while (column > 0) do
begin
temp := (column - 1) mod 26;
Result := Char(temp + 65) + Result;
column := (column - temp - 1) div 26;
end;
end;
Желателен всё же агент, который будет общаться со службой.
Можешь посмотреть, как работает, например Cobian Backup. Он написан на Delphi как раз в такой сцепке. Есть где-то исходники старой версии.