Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi & OpenOffice - Заполним пробел / 25 сообщений из 929, страница 1 из 38
09.03.2007, 17:18
    #34381137
fokiss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
Начну с очень грустного для себя открытия, что информации по работе с OpenOffice очень трудно найти даже на английском языке.
И попрошу заранее особо умных не умничать, и не кидать умных ссылок
(сам могу накидать http://www.oooforum.org/forum/viewforum.phtml?f=2),
я их за неделю насмотрелся большая просьба выкладывать рабочие примеры, а не их кусочки.

Это топ изначально планируется, для того чтобы больше не тратить по недели на то, что бы узнать, как объединить ячейки и т.д. (Кстати весьма буду благодарен если кто подскажет мой самый большой камень сейчас)
Ну а для начал этого топа выложу то, что смог найти или методом тыка нашел, чтобы Вы не потратили столько времени, сколько я на пойки.

Первый пример и очень классный я нашел на сайте http://www.rsdn.ru/Forum/?mid=1187888

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
 procedure  TForm1.Button1Click(Sender: TObject);
 var 
  LoadParams, aLoader: Variant;
  ServiceManager, Desktop : Variant;
  CoreReflection, PropertyValue, VA: Variant;
  Document: Variant;
  TableCursor, Table, TableCell : Variant;
  obj, objText, objCursor : Variant;
  w : integer;
  Cols : Variant;
 begin 
   if  VarIsEmpty(ServiceManager)  then 
     try 
      ServiceManager := CreateOleObject('com.sun.star.ServiceManager');
     except 
       Raise  Exception.Create('Couldn''t get ServiceManager');
      Exit;
     end ;

  CoreReflection := ServiceManager.createInstance('com.sun.star.reflection.CoreReflection');
  CoreReflection.forName('com.sun.star.beans.PropertyValue').createObject(PropertyValue);
  VA := VarArrayCreate([ 0 ,  0 ], varVariant);
  VA[ 0 ] := PropertyValue;

  Desktop := ServiceManager.createInstance('com.sun.star.frame.Desktop');
  Document := Desktop.LoadComponentFromURL( 'private:factory/swriter','_blank',  0 ,  VA);
   if  (VarIsNull(Document)  or  VarIsEmpty(Document))  then 
      begin 
        Raise  Exception.Create('Couldn''t create document');
       Exit;
      end ;

  objText := Document.getText;
   //Create a cursor object 
  objCursor := objText.createTextCursor;

   //Inserting some Text 
  objCursor.setPropertyValue('CharHeight', 12 );  //size 
  objCursor.setPropertyValue('CharWeight', 150 ); //bold 
  objCursor.setPropertyValue('ParaAdjust', 3 );   //center 
  objText.insertString(objCursor, 'The first line.', false);
  objText.insertControlCharacter(objCursor,  0 , false );  //PARA_BREAK 
  objText.insertControlCharacter(objCursor,  1 , false );  //LINE_BREAK 
  objText.insertControlCharacter(objCursor,  0 , false );  //PARA_BREAK 

  objCursor.setPropertyValue('CharHeight', 20 );  //size 
  objCursor.setPropertyValue('CharWeight', 150 ); //bold 
  objCursor.setPropertyValue('ParaAdjust', 0 );   //left 
  objCursor.setPropertyValue('CharUnderline', 1 ); //0-none, 1-single,...,18-BOLDWAVE 
  objText.insertString(objCursor, 'The second line.', false);

  objCursor.setPropertyValue('CharHeight', 12 );  //size 
  objCursor.setPropertyValue('CharWeight', 100 ); //normal 
  objCursor.setPropertyValue('CharUnderline', 0 ); //0-none 
  objText.insertString(objCursor, 'The second line.', false);

  objText.insertControlCharacter(objCursor,  0 , false );  //PARA_BREAK 
  objText.insertControlCharacter(objCursor,  0 , false );  //PARA_BREAK 

   //Inserting some Table 
  Table := Document.createInstance( 'com.sun.star.text.TextTable' );
  Table.initialize( 5 ,  4 );   //row, column 
  Table.HoriOrient :=  0 ;
  Table.LeftMargin :=  200 ;  // 2* 1/100 mm; 
  Table.RightMargin :=  200 ;

  Document.getText.insertTextContent( objCursor, Table, false );

  obj := Table.TableColumnSeparators;
  obj[ 0 ].Position :=  750 ;
  obj[ 1 ].Position := obj[ 0 ].Position+ 2000 ;
  obj[ 2 ].Position := obj[ 1 ].Position+ 2000 ;

  Table.TableColumnSeparators := obj;

   //   Cols := Table.getColumns; 
   //   w :=  Cols.getCount; 

  TableCell := Table.getCellByName('A1');
  TableCell.setString('A1');
  TableCell := Table.getCellByPosition( 1 ,  1 );
  TableCell.setString('**B2**');
  TableCell := Table.getCellByPosition( 2 ,  1 );
  TableCell.setString('**C2**');

 end ;

-----------------------------------------------------------
Вот что я смог сделать

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
 procedure  TForm1.Button1Click(Sender: TObject);
 var 
StarOffice, StarDesktop, Document, Sheets, Sheet, MyStruct, Cell: variant;
J, I: integer;
 begin 
  StarOffice := CreateOleObject('com.sun.star.ServiceManager');

  StarDesktop := StarOffice.createInstance('com.sun.star.frame.Desktop');
  Document := StarDesktop.LoadComponentFromURL(
                  'private:factory/scalc', '_blank',  0 ,
                  VarArrayCreate([ 0 , - 1 ], varVariant));
  MyStruct := StarOffice.Bridge_GetStruct('com.sun.star.table.BorderLine');

     try 

    Sheets := Document.getSheets;
    Sheet := Sheets.getByName('Лист1');
    Cell := Sheet.getCellRangeByName('C10:C13'); // cell := sheet.getCellRangeByPosition(0, 1, 0, 3); 
    Cell.setPropertyValue('CellBackColor',  255 ); //  Cell.cellBackColor :=200; 
  //   Cell.setPropertyValue('GoToCell');  //как сд 

    J :=  1 ; I :=  1 ;
    Cell := Sheet.getCellByPosition(j, i);
    // Cell.charColor := 255; 
    Cell.charHeight :=   14 ;
    Cell.CharWeight:=  150 ;
    Cell.charUnderline := true;
    Cell.charPosture := true;
    Cell.charStrikeout  := true;


    Cell.SetString('САЛЬДОВО-ГРУППИРОВОЧНАЯ ВЕДОМОСТЬ ПО УСЛУГЕ:');

    Cell := Sheet.getCellByPosition(j, i+ 1 );
       //MyStruct.color := 255; 
    MyStruct.lineDistance  :=  0 ;
    MyStruct.innerLineWidth :=  0 ;
    MyStruct.outerLineWidth :=  1 ;
    Cell.leftBorder :=  MyStruct;
    Cell.rightBorder := MyStruct;
    Cell.topBorder := MyStruct;
    Cell.bottomBorder := MyStruct;

    Cell.SetString('Дом: ');


   finally 
    StarOffice := Unassigned;
   end ;
 end ;
...
Рейтинг: 0 / 0
11.03.2007, 13:20
    #34382618
fokiss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
Если кто знает как в calc объединить ячейки плиз подсказать очень нужно
...
Рейтинг: 0 / 0
11.03.2007, 19:58
    #34382946
Упс!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
Создай Uno - сервис, да и рули им, через метод executeDispatch.

объект.executeDispatch(документ, 'команда', '', 0, значение_свойства)

Например,
значение_свойства(0).Name = 'ToPoint';
значение_свойства(0).Value = "$B$5:$E$7"

Команды известны:
'.uno:GoToCell' - выбор ячеек
'.uno:ToggleMergeCells' - объединение
...
... только свойства прваильно заполняй, и все.
...
Рейтинг: 0 / 0
12.03.2007, 01:23
    #34383164
grexhide
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
fokissЕсли кто знает как в calc объединить ячейки плиз подсказать очень нужно

Маетесь глупостями, IMHO.

OpenOffice, как таковой, вполне спокойно понимает базовый формат Excel (BIFF).

Для формирования файлов - вполне достаточно средств вроде NativeExcel или XLSReadWriteII.

И уже совсем отдельный вопрос - это открытие, печать, предпросмотр файлов (тот самый минимум средств для управления со стороны конечного приложения).

И все. Цена вопроса - общее средство формирования файлов напрямую (с интерфейсом а-ля COM) и пара интерфейсных классов (которые нужны только в части запуска предпросмотра, ибо печать и открытие делаются через ShellAPI не в пример куда более надёжно, чем через COM/OLE).
...
Рейтинг: 0 / 0
12.03.2007, 10:53
    #34383538
Я!!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
grexhide
OpenOffice, как таковой, вполне спокойно понимает базовый формат Excel (BIFF).

Для формирования файлов - вполне достаточно средств вроде NativeExcel или XLSReadWriteII.

Ну, и MSO понимает формат OpenOffice (.ods файлы). :)

А вот из "NativeExcel или XLSReadWriteII" в OO - что называется, "без гарантии качества". Плавали, знаем.
Может разработчики доберутся до поддержки ОО. Хотя ради чего им так стараться?

grexhide
И все. Цена вопроса - общее средство формирования файлов напрямую (с интерфейсом а-ля COM) и пара интерфейсных классов (которые нужны только в части запуска предпросмотра, ибо печать и открытие делаются через ShellAPI не в пример куда более надёжно, чем через COM/OLE). :+1
...
Рейтинг: 0 / 0
12.03.2007, 11:05
    #34383584
grexhide
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
Я!!А вот из "NativeExcel или XLSReadWriteII" в OO - что называется, "без гарантии качества". Плавали, знаем. Может разработчики доберутся до поддержки ОО. Хотя ради чего им так стараться?


Странно. Проблем замечено не было. Впрочем мои задачи ограничиваются довольно примитивными конструкциями (до графиков, графики, сводных таблиц и прочего) как то пока не дошло, впрочем, номинально данный функционал заявлен, и уже отдельный вопрос - как это все многообразие понимает сам ОО?

Или что имеется в виду под "гарантией качества"?.
...
Рейтинг: 0 / 0
12.03.2007, 11:09
    #34383601
Я!!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
Было дело: раскрашивал вертикально расположенные надписи: получилось, что при открытии в ОО фон с цветом шрифта совпал. В МО - нормально.
Еще было пару раз, когда на итоговом личе были формулы, ссылающиеся на другие листы. В ОО оторбазилось как "Ошибка в формуле".

Подробностей не помню, но эксперименты прекратил. :)
...
Рейтинг: 0 / 0
12.03.2007, 11:31
    #34383669
fokiss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
Давайте не возводить дебаты, а давать просто пример и ответы.
Большое спасибо гостю я вот пример выложу кому может пригодится.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
 procedure  TForm1.Button4Click(Sender: TObject);
 var 
  OOServiceManager, OODispatcher, OODocument, OODesktop: Variant;
  ooParams, ooFrame: Variant;

 begin 

 OOServiceManager := CreateOleObject('com.sun.star.ServiceManager');
 OODesktop:= OOServiceManager.createInstance('com.sun.star.frame.Desktop');
 OODocument := OODesktop.LoadComponentFromURL( 'private:factory/scalc', '_blank',  0 , VarArrayCreate([ 0 , -  1 ], varVariant));

 OODispatcher := ooServiceManager.createInstance('com.sun.star.frame.DispatchHelper');

 ooFrame:=OODocument.getCurrentController.getFrame;
 ooParams:= VarArrayCreate([ 0 ,  0 ], varVariant);


 ooParams[ 0 ] := OOServiceManager.Bridge_GetStruct('com.sun.star.beans.PropertyValue');

 ooParams[ 0 ].name := 'ToPoint';
 ooParams[ 0 ].value := '$F$3:$F$5';
 ooDispatcher.executeDispatch(ooFrame, '.uno:GoToCell', '',  0 , ooParams);
 ooDispatcher.executeDispatch(ooFrame, '.uno:ToggleMergeCells' , '',  0 , ooParams);

 ooParams[ 0 ].name := 'ToPoint';
 ooParams[ 0 ].value := '$F$13:$F$15';
 ooDispatcher.executeDispatch(ooFrame, '.uno:GoToCell', '',  0 , ooParams);
 ooDispatcher.executeDispatch(ooFrame, '.uno:ToggleMergeCells' , '',  0 , ooParams);




 ooParams[ 0 ].name := 'ToPoint';
 ooParams[ 0 ].value := '$F$23:$F$25';

 ooParams[ 0 ].name := 'Color';
 ooParams[ 0 ].value :=  16711680  ;
 ooDispatcher.executeDispatch(ooFrame, '.uno:GoToCell', '',  0 , ooParams);
 ooDispatcher.executeDispatch(ooFrame, '.uno:Color', '',  0 , ooParams);

 end ;

Подскажите как сделать если нужен массив > 0
...
Рейтинг: 0 / 0
12.03.2007, 12:31
    #34383926
fokiss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
Подскажите пожалуйста как с помощью uno сделать рамку ячейки
...
Рейтинг: 0 / 0
12.03.2007, 13:12
    #34384082
Я!!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
fokissПодскажите пожалуйста как с помощью uno сделать рамку ячейки

Сперва выбираете нужную ячейку, потом командой: ".uno:SetBorderStyle" обрамляем.
Трудность в параметре: массив типа PropertyValue, длиной 4.
Для Name задаются OuterBorder.LeftBorder, OuterBorder.RightBorder, OuterBorder.TopBorder, OuterBorder.BottomBorder, а также (если несколько ячеек) - то InnerBorder.Horizontal, InnerBorder.Vertical (если эти параметры, то массив длиной не 4, а 6).
Для значений Value задать массив [0..3], описывающий стиль линии.
...
Рейтинг: 0 / 0
12.03.2007, 15:36
    #34384719
fokiss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
Кстати объединение ячейк в оле делается так
Код: plaintext
Cell := Sheet.getCellRangeByName('A4:D4').Merge(true);

Я!! Сперва выбираете нужную ячейку, потом командой: ".uno:SetBorderStyle" обрамляем.
Трудность в параметре: массив типа PropertyValue, длиной 4.
Для Name задаются OuterBorder.LeftBorder, OuterBorder.RightBorder, OuterBorder.TopBorder, OuterBorder.BottomBorder, а также (если несколько ячеек) - то InnerBorder.Horizontal, InnerBorder.Vertical (если эти параметры, то массив длиной не 4, а 6).
Для значений Value задать массив [0..3], описывающий стиль линии.

Пример бы не мог бы скинуть?
...
Рейтинг: 0 / 0
13.03.2007, 11:03
    #34386361
fokiss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
Может кто подскажет как через Оле выронить по вертикали
По горизонтали так
Код: plaintext
Cell.ParaAdjust :=  3 ; 
а по вертикали подскажите плиз
...
Рейтинг: 0 / 0
15.03.2007, 11:25
    #34392547
demka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
Объединение ячеек например так:
Sheet.getCellRangeByPosition( 1, 1, 5, 1).Merge(true)

Только учтите что в ОО адресация ячеек идет наоборот, т.е. сначала столбец потом строка. Например в данном случае getCellRangeByPosition( НачСтолбец, НачСтрока, КонСтолбец, КонСтрока)

Ну и почитайте вот это
http://www.rsdn.ru/article/openoffice/ooautomation.xml
...
Рейтинг: 0 / 0
19.03.2007, 08:59
    #34399209
fokiss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
Подскажите как через Оле выронить по вертикали???
...
Рейтинг: 0 / 0
11.04.2007, 14:38
    #34453085
Сидоров Сидор Сидорович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
Хочу сказать большое спасибо автору за данную тему.
Я сам уже больше месяца стараюсь привыкнуть к ОО, после того как у нас отказались от закупки лицензионного MSOffice. Многое уже осознал, но вот не могу решить одну проблемку: как мне НЕ СОЗДАВАТЬ новый документ *.ods, а открыть существующий - забить в него данные и сохранить его под новым именем, но не закрывать. Всё это надо проделывать автоматически по нажатию на одну тока кнопку "Отчёт". В екселе у меня всё это делалось легко и быстро, а вот с ОО я подзавис, и пока главная моя беда - не могу открыть существующий так сказать шаблон. ПОМОГИТЕЕЕЕЕЕЕЕ!!!!
...
Рейтинг: 0 / 0
11.04.2007, 16:06
    #34453398
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
fokissПервый пример и очень классный

Код: plaintext
1.
2.
3.
4.
5.
     try 
      .....
     except 
       Raise  Exception.Create('Couldn''t get ServiceManager');
      Exit;
     end ;

Надо признать, пример действительно неординарный.
...
Рейтинг: 0 / 0
12.04.2007, 11:12
    #34455266
Сидоров Сидор Сидорович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
к вопросу про открытие файла - подскажите!!!!
...
Рейтинг: 0 / 0
12.04.2007, 21:02
    #34457581
Yuric74
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
Выкладываю небольшой модуль для работы с OO Calc. В архиве сам модуль и небольшой тестовый проект для проверки. Сделано в Delphi6.
Вся работа через OLE. Может, кому пригодится. Дорабатывайте, кому что надо.
Код используется в работающем проекте.
Идея отсюда http://www.codenet.ru/progr/bcb/Open-Office-Calc-Automation.php
...
Рейтинг: 0 / 0
17.04.2007, 19:11
    #34467626
hor-olga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
тема перехода на openoffice - возникла и у нас на предприятии
все отзывы очень помогли, чтобы разобраться для начала
что не получается - так это управлять в CALC ориентацией страницы,
размером (а3 а4), полями
Плиз, помогите где искать или подскажите кто может
...
Рейтинг: 0 / 0
17.04.2007, 20:03
    #34467725
NextMan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
Код: plaintext
1.
2.
args[...].Name := 'Orientation';
args[...].Value := 'Potrait';
...
Рейтинг: 0 / 0
18.04.2007, 20:03
    #34471064
hor-olga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
Вопрос к Yurik74.
Скачала выш пример, смотрела ссылку.
На основании вашего примера не получ сделать WrapText ячейке
и установить параметры страницы (альбомная, А4, поля)
где можно почитать как вы строили свой пример???
плиз , очень нужно
...
Рейтинг: 0 / 0
18.04.2007, 20:25
    #34471100
Yuric74
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
hor-olgaСкачала выш пример, смотрела ссылку.
На основании вашего примера не получ сделать WrapText ячейке
и установить параметры страницы (альбомная, А4, поля)
где можно почитать как вы строили свой пример???
плиз , очень нужно
WrapText уже есть, код на работе, завтра выложу, параметры страницы тоже есть (сделал вчера после вашего предыдущего поста, нам в работе это не надо). Просто код в постоянной доработке, но уже используется. Я свой код строил, исходя из того, что нам надо только вывести отчет в Calc, а дальше пользователь уже сам решает, что с ним делать - печатать, сохранять и т.д. Поэтому там почти нет методов на чтение свойств. В принципе, можно сделать и печать, и сохранение, все это можно сделать в скрытом режиме, не выводя окно Calc на экран.
Код основан на том, что есть в ссылке выше + OpenOffice SDK. Правда в SDK почти все на Java, приходится думать и много экспериментировать. Правда, можно перейти на использование UNO (лениво :) ), в этом случае проще, можно необходимые действия записать в макрос и посмотреть его код.
Интересно, мой код помог? Если так, очень рад.
...
Рейтинг: 0 / 0
19.04.2007, 09:31
    #34471641
hor-olga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
Yurik74
До конца еще не разобралась, но код уже помог
Если делать обратный процесс(из OO куда грузить),
можно использовать этот же код?
...
Рейтинг: 0 / 0
19.04.2007, 16:29
    #34473447
Yuric74
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
hor-olgaно код уже помог
Это хорошо :)
hor-olga
Если делать обратный процесс(из OO куда грузить), можно использовать этот же код?
Да, можно, там, где не используется CellRange, а идет обращение к одной ячейке или там, где установка чего-либо другого, например, цвета. Опиши метод на чтение свойства и в нем
Код: plaintext
Result:=(то, чему идет присвоение в методе записи)
Несколько ссылок:
ресурс, посвященный макросам OpenOffice.org
и
конкретная дока оттуда на Basic
Выкладываю свой код, уже в Delphi2006.
...
Рейтинг: 0 / 0
19.04.2007, 16:30
    #34473453
Yuric74
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi & OpenOffice - Заполним пробел
Sorry
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi & OpenOffice - Заполним пробел / 25 сообщений из 929, страница 1 из 38
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]