На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Открытие Word в Delphi и создание ini файла
    Всем привет. Не подскажите, как сделать, чтобы по нажатии кнопки в программе, написанной на Delhi 2010, открывался документ Word, лежащий рядом с exe (наподобие справки)? И как сделать ini файл, в котором хранились бы значения переменных, передаваемые в эту программу? Всем заранее спасибо.
      FAQ'и раздела Delphi, you're welcome!
      Скрытый текст
      Работа с MS Word из Delphi
      Previous Top Next

      1. Управление Word-ом из Delphi.
      (опубликовано - 13 SoftWare)
      Здесь мы рассмотрим пример того, как управлять объектами Word-а (Excel - аналогично) из программ на Delphi. Исходный код примера можно скачать на страничке 'DownLoad'
      а). Для чего это нужно ?
      Задачи могут быть самые разные, в общем случае это использование возможностей Word-а в своей программе, н-р: проверка текста на орфографию; печать текста, графики; экспорт отчетов в Word или изначальное создание их там и т.д.

      б). Подготовительные работы. На самом деле существует несколько способов сделать это, мы рассмотрим только один (пример кроме Delphi 5, в Delphi5 для этого есть компоненты на закладке Servers переименуете в программе типы на соответствующие компоненты, дальше так же).
      Для начала начнем новый проект File, New Application; File, Save All. Создадим отдельную папку для проекта и сохраним Unit1 как Main, а Project1 как WordWriter.
      Далее для работы с Word-ом нам потребуется библиотека типов Word-а, это делается так:
      Project, Import Type Library, Add, далее переходим в папку, где стоит Word ( у меня это - "c:\program files\microsoft office) , заходим в папку Office и выбираем файл - msword8.olb (цифра -? версии Word-а - у Вас может отличаться ) или excel8.olb (для Excel).Нажимаем Оk. Delphi создаст 2 файла - Word_tlb.pas и Office_tlb.pas, их надо включить в раздел uses модуля Main нашего проекта:

      uses ... ,Office_Tlb, word_tlb;

      в). Теперь займемся непосредственно программированием.
      В разделе var опишем следующие переменные:

      // класс приложения ворда
      WordApp:Word_tlb.Application_;
      // класс чего-то типа выделения,
      // т.е. говоришь - выделить ячейку с ... по, а результат скидываешь
      // в эту перем и работаешь с этими ячейками как с 1 объектом
      ARange,TempRange:Range;
      // массив документов
      Docs:documents;
      // 1 документ
      Doc:document;
      // массив параграфов
      pars:Paragraphs;
      // 1 параграф
      par:Paragraph;
      // параметры для передачи
      Template,temp,OpenAsTemplate:olevariant;
      // массив таблиц
      tabls:Tables;
      // 1 таблица
      tabl:Table;
      // рабочая переменная
      i:integer;

      Далее проектируем форму:
      1. Поместим вверх нашей формы кнопку - button1 типа tbutton, поменяем заголовок (св-во Caption) на 'Старт'.
      2. Под кнопкой разместим панель - panel1 типа tpanel. Внутри панели поместим компонент - bevel1 типа tbevel, поменяем св-во Align на alClient (при этом рамка растянется на всю панель).
      3. Сверху панели (далее все компоненты будут размещаться внутри этой панели) разместим метку - label1 типа tlabel, поменяем значение св-ва Caption на 'Передать в ячейку':
      4. Ниже слева поместим метку - label1 типа tlabel, св-во Caption поменяем на 'X='
      5. Правее метки помещаем компонент Edit1 типа tEdit, св-во Text меняем на '1'
      6. По правой границе Edit1 помещаем компонент UpDown1 типа tUpDown, в списке св-ва 'Associate' выбираем Edit1, св-во 'Position' приравниваем '1'
      7. Чуть отступаем вправо и повторяем шаги 4-6 , заменив Edit1 на Edit2, UpDown1 на UpDown2, Label1 на Label2 соответственно.
      8. Ниже размещаем еще одну метку - label4 типа tlabel, меняем св-во 'Caption' на 'Новое значение ячейки:'
      9. Ниже размещаем компонент Edit3 типа tEdit, св-во Text меняем на '0'
      10. И, наконец, в самом низу панели размещаем кнопку BitBtn1 типа tBitBtn, меняем св-во 'Kind' на 'bkOk'.
      Теперь напашем обработчики - именно в них и заключается вся функциональность программы:

      1. Назначим обработчик OnClick компоненту Button1 :

      procedure TForm1.Button1Click(Sender: TObject);
      begin
      // если заголовок 'Выход', то закрываем программу
      if button1.caption='Выход' then
      begin
      Application.Terminate;
      exit
      end
      // иначе (при первом начатии, когда у нас заголовок 'Старт')
      //переименовываем заголовок в 'Выход'
      else button1.caption:='Выход';

      panel1.Visible:=true;
      // создаем экземпляр ворда
      WordApp:=CoApplication_.Create;
      // делаем его видимым
      WordApp.Visible:=true;
      // шаблон
      template:='Normal';
      // создать шаблон
      OpenAsTemplate:=false;
      // что-то типа оператора with, можно было и напрямую обратиться
      Docs:=WordApp.Documents;
      // добавляем документ
      Doc:=Docs.Add(template,OpenAsTemplate);

      // выделить все
      ARange:=Doc.Range(EmptyParam,EmptyParam);
      // массив параграфов
      pars:=doc.Paragraphs;
      // переменная - параметр
      template:=arange;
      // новый параграф
      par:=pars.Add(template);
      // цвет зеленный
      par.Range.Font.ColorIndex:=11;
      // вставляем текст
      par.Range.InsertBefore('Привет !!!');
      // переменная - параметр
      template:=par.Range;
      // новый параграф, чтобы таблица не потерла текст
      par:=pars.Add(template);
      // цвет черный
      par.Range.Font.ColorIndex:=0;
      // вставляем текст
      par.Range.InsertBefore('Переключившись в программу, можно программно менять текст ячеек !');
      // переменная - параметр
      template:=par.Range;
      // новый параграф, чтобы таблица не потерла текст
      par:=pars.Add(template);
      // выделяем параграф
      arange:=par.Range;

      // шрифт - жирный
      ARange.Font.Bold:=1;
      // шрифт - рукописный
      ARange.Font.Italic:=1;
      // получить массив таблиц
      tabls:=aRange.Tables;
      // добавляем новую таблицу размером 5 на 5
      tabl:=tabls.Add(arange,5,5);
      // в цикле
      for i:=1 to 5 do
      // задаем значение ячеек
      tabl.Cell(i,1).Range.Text:=inttostr(i);

      end;

      2. Зададим обработчик формы:

      procedure TForm1.FormDestroy(Sender: TObject);
      var
      // для параметров
      SaveChanges:olevariant;
      begin
      // если Word не закрыт
      if not VarIsEmpty(WordApp) then begin
      { а можно сохранить автоматом:
      // имя файла в оле
      template:='Имя.doc';
      // если не сохранен, то
      if doc.Saved=false then
      // сохраняем
      Doc.SaveAs(template, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);

      короче, пишешь имя объекта, ставишь точку и нажимаешь
      'ctrl'+' ' и изучаешь существующие методы и св-ва
      }
      //изменения не сохранять
      SaveChanges:=false;
      // то закрыть сначала документ
      Doc.Close(SaveChanges,EmptyParam,EmptyParam);
      // а потом и ворд
      WordApp.Quit(SaveChanges,EmptyParam,EmptyParam)
      end;
      end;

      3. Назначим обработчик OnClick компоненту Bitbtn1 :

      procedure TForm1.BitBtn1Click(Sender: TObject);
      begin
      // в соотв ячейку ставим соотв значение,
      // а можно и наоборот - получать значение из ячейки в переменную
      tabl.Cell(UpDown2.Position,UpDown1.Position).Range.Text:=Edit3.Text;
      end;

      в). В общем-то, это все ...
      г). Дополнительная информация:
      · Справка Word-а (по Visual Basic, по умолчанию она не ставится - запустите заново Setup и поставте в соотв. месте галочку)
      · Книги:
      - Чарльз Калверт "Энциклопедия пользователя Delphi4"
      (издательство - DiaSoft)
      - Марко Кэнту "Delphi4 для профессионалов"
      (издательство - Питер)
      · Если у Вас другая версия Word-а:
      Параметры ф-ций могут отличаться - обратитесь к справке (см выше) или если у Вас версия Delphi 3 и выше, то используем универсальный метод - пишешь имя объекта, ставишь точку (если нужно посмотреть список параметров у функции , то после открывающей скобки ) , нажимаешь 'ctrl'+'пробел' и изучаешь существующие методы и св-ва.

      © 13 SoftWare. Статья взята с сайта www.vladimir13.narod.ru

      В данный FAQ попала с Исходников.ru http://www.sources.ru
        Цитата
        И как сделать ini файл, в котором хранились бы значения переменных, передаваемые в эту программу?


        Обычная работа с текстовым файлом + THashedStringList
          Bas VisualProg не надо давать малютке Тиффани учебники по квантовой физике...

          maxjuvefan
          1) ShellExecute('open', path_to_doc_file ...) остальные параметры посмотри в справке
          2) TIniFile, TMemIniFile

          Добавлено
          Цитата maxjuvefan @
          как сделать, чтобы по нажатии кнопки в программе, написанной на Delhi 2010, открывался документ Word, лежащий рядом с exe (наподобие справки)

          И кстати, это ужасное решение. Если лень заморачиваться с CHM, сделай хотя бы pdf.
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0262 ]   [ 17 queries used ]   [ Generated: 16.04.24, 05:22 GMT ]