Страница 5 из 13
Re: Работа с uOpenOffice
Добавлено: 21.12.2011 08:34:30
Владимир
leo_bsv писал(а):Пишите ваши наблюдения и мысли. Бум допиливать.
Доброго!
1.Вызов ShowDocument без параметров работает на классе, но у меня по умолчанию запускается Okular (очень долго) и документ не успевает открыться (рано удаляется /temp). Спасает sleep(2000) перед удалением.
2.Вызов ShowDocument с пустыми параметрами вообще лишен смысла, поэтому этот вопрос закрываем.
Из наболевшего - по важности.
1.Очень нужен AppendRow (там, похоже, Cols не определена - я писал выше).
2.Удаление пустых строк по содержимому ячейки - предлагаю упростить алгоритм - удалять строку, если содержимое первой ячейки равно шаблону.
3.AppendCols.
Как-то так.
Re: Работа с uOpenOffice
Добавлено: 21.12.2011 18:08:20
leo_bsv
Владимир писал(а):2.Вызов ShowDocument с пустыми параметрами вообще лишен смысла, поэтому этот вопрос закрываем.
Вообще-то определение процедуры в подобном виде
Код: Выделить всё
procedure ShowDocument(editor:string='xdg-open'; f_name:string='doc.odt');
позволяет опускать параметры при вызове, т.е. эту процедуру можно вызвать и таким образом:
и таким:
можно также запустить таким образом:
добавил условие для передачи пустой строки в параметр editor:
Код: Выделить всё
procedure TOdt.ShowDocument(editor:string='xdg-open';
f_name:string='doc.odt');
var exe_path, templ_path, sh: string;
Proc: TProcess;
begin
if editor='' then editor:='xdg-open';
exe_path:=ExtractFilePath(Application.ExeName);
{$IFDEF Linux}
templ_path:=IncludeTrailingPathDelimiter(exe_path+'temp');
GenerateDocument(templ_path,f_name,'');
try
Proc:=TProcess.Create(nil);
Proc.CommandLine:=editor+' '+templ_path+f_name;
Proc.Options:=[poWaitOnExit];
Proc.ShowWindow:=swoShowMaximized;
Proc.Execute;
finally
if Proc.WaitOnExit then begin
Proc.CommandLine:='rm '+templ_path+' -r';
Proc.Execute;
Proc.Free;
end;
end;
{$ENDIF}
end;
Поэтому теперь можно запускать процедуру даже так:
Re: Работа с uOpenOffice
Добавлено: 21.12.2011 18:19:44
Владимир
leo_bsv писал(а):позволяет опускать параметры при вызове
Да понимаю я, я говорю о бессмысленности вызова с ПУСТЫМИ параметрами.
Нарисовалась какая-то бредятина - сделал новый проект специально для тестирования ODFProc. Все, что касается класса TOdt - живет, TodtTable - в упор не видит. Второй час чешу заднюю часть того места, где должны быть мозги - напрасно. В живом проекте TODTTable работает, в тестовом -нет...
Re: Работа с uOpenOffice
Добавлено: 21.12.2011 19:03:16
leo_bsv
Владимир писал(а):Да понимаю я, я говорю о бессмысленности вызова с ПУСТЫМИ параметрами.
С пустыми параметрами вызов не получится - будет ошибка

(конечно если задать пустым первый параметр - то ошибки не будет - в последней ревизии я добавил условие чтобы первый пустой параметр заменялся значением по-умолчанию, второй пустой - ошибка, второй не определён - запустится)
При таком объявлении - можно просто все параметры опустить, и тогда всё запустится по-умолчанию.
Добавлено спустя 1 минуту 15 секунд:Владимир писал(а):сделал новый проект специально для тестирования ODFProc. Все, что касается класса TOdt - живет, TodtTable - в упор не видит
у меня тоже спец проект для тестирования. всё компилится... у тебя не компилится вообще? или компилится но не видит ТOdtTable?
Добавлено спустя 7 минут 53 секунды:по поводу sleep(2000), достаточно костыльное решение,.. а если док будет очень здоровым - двух секунд может не хватить... думаю следует копать в сторону xdg-open... нужен контроль над запущенным ею приложением, может быть кто что подскажет путное?
Re: Работа с uOpenOffice
Добавлено: 21.12.2011 20:11:43
Владимир
leo_bsv писал(а):компилится но не видит ТOdtTable?
Ага, компилится, но не видит TOdtTtable. Заметил отличие в старых проектах, где все Ок, и в новом - там появился каталог /lib/i386-linux, в котором собраны все файлы .o .or .res .lfm .ppu. В старых проектах эти файлы в каталоге проекта. Я в расстройстве, что делать?
Re: Работа с uOpenOffice
Добавлено: 21.12.2011 21:27:28
leo_bsv
Владимир писал(а):Ага, компилится, но не видит TOdtTtable.
TOdtTable проверен следующим кодом
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var ODT: TOdt;
T: TOdtTable;
begin
ODT:=TOdt.Create;
ODT.LoadTemplate(FNE.Text);
// Заполним таблицу
T:=ODT.GetTable('Таблица1');
T.MultiplyRow(1,5);
ODT.ShowDocument;
ODT.Destroy;
end;

Работает...
Re: Работа с uOpenOffice
Добавлено: 21.12.2011 21:29:53
Владимир
leo_bsv писал(а):Работает...
И у меня работает - когда проект скопировал из старого...
Пока для пользы дела вопрос про /lib в проекте снимаю. Разберусь позже.
Касательно sleep() согласен с "костылями", однако, если путь запуска указан жестко, таких катаклизмов не видно!
И потом, какая пользователю разница - будет удален /temp через 2 или 10 сек или 20 сек ?
Re: Работа с uOpenOffice
Добавлено: 22.12.2011 02:15:42
leo_bsv
обновил ещё раз - темп-файлы теперь все в папке /tmp и чистятся при уничтожении объекта класса TOdt;
sleep пришлось оставить при запуске через xdg-open, т.к. другие решения не дали нужного результата;
но процедура переписана таким образом, что если из программы явно будет указываться редактор для открытия файла - ничего тормозить не должно, в этом случае sleep не срабатывает.
11 ревизия
Re: Работа с uOpenOffice
Добавлено: 22.12.2011 11:34:28
Владимир
Ok, принято. Работает, не тормозит.
Re: Работа с uOpenOffice
Добавлено: 27.12.2011 20:50:39
Владимир
leo_bsv писал(а):
Re: Работа с uOpenOffice
Сообщение leo_bsv » 22.12.2011 01:15:42
обновил ещё раз
Доброго! Боюсь показаться назойливым, но очень нужно добавление колонок (AppendCols).
Хотелось бы все косяки добить в уходящем году...
Да, с наступающим НГ!
Re: Работа с uOpenOffice
Добавлено: 27.12.2011 23:35:43
leo_bsv
Владимир писал(а):Боюсь показаться назойливым
а вы не бойтесь ) у меня тож проект один висит в котором этот функционал будет необходим =)
так что лучше сейчас допиливать по-тихому чем потом всё разом

другое дело что времени в обрез... быстро может не получиться...
Добавлено спустя 56 минут 8 секунд:12 ревизия - допилена TOdtTable.AppendRow, просьба тестить
Добавлено спустя 1 час 40 минут 10 секунд:13 ревизия - TOdtTable.AppendColumn работает, но создаёт колонку шириной 0, общая ширина таблицы тоже не меняется, в итоге после добавления колонки её не видно. Поэтому для нормального функционала нужно будет обрабатывать ширину таблицы и ширину добавляемой колонки или ширину добавляемой колонки и соответствующим образом уменьшать ширину уже существующих. Это пока не реализовано.
Re: Работа с uOpenOffice
Добавлено: 28.12.2011 10:29:44
Владимир
leo_bsv писал(а):допилена TOdtTable.AppendRow, просьба тестить
Что изменилось - так это заработало чтение Table.Cols. AppendRow по-прежнему не работает (но и не валит приложение). В самой процедуре Cols почему-то 9-тизначное (при таблице в 5 столбцов).
Вообще-то при наличии MultiplyRow большого смысла в AppendRow не вижу.
По поводу AppendColumn - работает, добавляет столбец нулевой ширины. В идеале хотелось бы при добавлении явно указывать ширину ColWidths[n] всех столбцов (и, возможно, ширину таблицы Width). С точки зрения пользователя алгоритм примерно такой:
1. Читаем ширины существующих столбцов.
2. Устанавливаем ширины существующих и добавляем столбец нужной ширины.
Считаю, что для начала не следует связываться с объединенными ячейками, пусть будет простая таблица.
p.s. Если интересно, могу поделиться допиленным под Utf8 модулем "Сумма прописью". Также сделал шаблоны форм КМ-3 и КМ-6.
Re: Работа с uOpenOffice
Добавлено: 28.12.2011 13:01:31
leo_bsv
Владимир писал(а):Вообще-то при наличии MultiplyRow большого смысла в AppendRow не вижу.
Признаться, я, когда в своё время реализовывал MultiplyRow, сначала хотел сделать AppendRow, но потом желание отпало из этих же соображений.
Владимир писал(а):В самой процедуре Cols почему-то 9-тизначное (при таблице в 5 столбцов).
поподробнее опиши ситуацию - у меня при тестах всё работало, судя по формам - у тебя сложнее таблицы
Владимир писал(а):Считаю, что для начала не следует связываться с объединенными ячейками, пусть будет простая таблица.
Кстати эт всё тоже возможно, сейчас думаю как в удобном виде воссоздать структуру таблицы в классе...
Владимир писал(а):p.s. Если интересно, могу поделиться допиленным под Utf8 модулем "Сумма прописью". Также сделал шаблоны форм КМ-3 и КМ-6.
Предлагаю выложить твои формы на странице проекта на sourceforge.net... мне лично пока нужды в этом нет, но чем чёрт не шутит...
Добавлено спустя 11 минут 38 секунд:Владимир писал(а):могу поделиться допиленным под Utf8 модулем "Сумма прописью"
а вот от этого не откажусь

Re: Работа с uOpenOffice
Добавлено: 28.12.2011 14:20:11
Владимир
leo_bsv писал(а):а вот от этого не откажусь
Зарегистрировался на SourceForge - дальше куда и как идти-выкладывать - не могу разобраться
Re: Работа с uOpenOffice
Добавлено: 28.12.2011 16:09:28
leo_bsv
скажи мне свой ник на SF, я тебя добавлю в проект как девелопера, можешь на личку скинуть