На главную Наши проекты:
Журнал   ·   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 на любой машине....
    Надо открыть документ в MS-Word из Delphi корректно.
    Хотелось бы предумотреть возможные ошибки и устранить их на этапе разработки приложения:
    1. Проверить есть ли MS Word на машине вообще, и если нет...то поругаться корректно.
    2. Предусмотреть возможность того, что MS Word стоит не в каталоге по умолчанию(если это может помешать работе) и если их стоит 2 и более...И вообще зависит ли работа используемого мной кода от версии MS Office?

    ExpandedWrap disabled
      Var APP : variant;
      old_Text,new_text, SS:string;
      begin
       
        //создали новый документ
        APP:= CreateOleObject('Word.Application');
        APP.Visible := False;
        APP.Documents.Add;
        // Вставляем файл
        SS:=WebBrowser1.LocationURL;
        APP.Selection.InsertFile(SS ,'',false,false,false);
        // Меняем old_Text на new_Text
        APP.Selection.Find.Execute(old_Text, False, False,
        False, False, False, True, 0, False, new_Text,
        2, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
       
        APP.Selection.MoveDown;
        APP.Visible := true;


    Пожалуйста помогите кто чем может! :huh:
      В реестре искать номер версии ворда. Delphi Russian Knowledge Base
      Или Word.Application.9 - это 2000
        А так не проще???
        ExpandedWrap disabled
           
           try
            APP:= CreateOleObject('Word.Application');
            APP.Visible := False;
            APP.Documents.Add;
            // Вставляем файл
            SS:=WebBrowser1.LocationURL;
            APP.Selection.InsertFile(SS ,'',false,false,false);
            // Меняем old_Text на new_Text
            APP.Selection.Find.Execute(old_Text, False, False,
            False, False, False, True, 0, False, new_Text,
            2, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
           
            APP.Selection.MoveDown;
            APP.Visible := true;
           except
            Application.MessageBox('Нет Word-a','Error!!!');
           end;
          Цитата SergSW @ 24.08.04, 14:32
          А так не проще???
          ExpandedWrap disabled
             
             try
              APP:= CreateOleObject('Word.Application');
              APP.Visible := False;
              APP.Documents.Add;
              // Вставляем файл
              SS:=WebBrowser1.LocationURL;
              APP.Selection.InsertFile(SS ,'',false,false,false);
              // Меняем old_Text на new_Text
              APP.Selection.Find.Execute(old_Text, False, False,
              False, False, False, True, 0, False, new_Text,
              2, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
             
              APP.Selection.MoveDown;
              APP.Visible := true;
             except
              Application.MessageBox('Нет Word-a','Error!!!');
             end;

          Интересно....может так и проще... :huh:
          А ещё я нашла такой способ:
          ExpandedWrap disabled
            uses
              Registry;
             
            function IsWordInstalled: Boolean;
            var
              Reg: TRegistry;
              s: string;
            begin
              Reg := TRegistry.Create;
              try
                Reg.RootKey := HKEY_CLASSES_ROOT;
                Result := Reg.KeyExists('  Word  .Application');
              finally
                Free;
              end;
            end;
             
            procedure TForm1.Button1Click(Sender: TObject);
            begin
              if IsWordInstalled then
                ShowMessage('MS   Word   is installed.');
            end;


          И поди разбери, что лучше??? :unsure:
            что 100%-но работает - то и лучше :)
            на мой взгляд (не проверял), работают оба варианта, но удобней и наглядней второй.
            Только по-моему в строке
            ExpandedWrap disabled
               
              Reg.KeyExists('  Word  .Application');

            пробелов много (может, так и должно быть)
              Корректно из Delphi откроется документ ворда при помощи shellExecute() ;)
              Если ворд никак не установлен (а бывает, что он не установлен, но есть! и пользователь знает, где его найти), винда корректно спросит, с помощью чего юзер хочет корректно открыть документ.
              И смысла ругаться из Дельфи на отсутствие ворда я в данном случае не вижу.
              Хотя, хозяин - барин...
                2 Mischka
                в этом топике имелась в виду автоматизация с OLE, т.е. работа с самим вордом. А без его установки этого нельзя сделать
                  Цитата
                  DELPHIna, 24.08.04, 14:05
                  Надо открыть документ в MS-Word из Delphi корректно.
                  Хотелось бы предумотреть возможные ошибки и устранить их на этапе разработки приложения

                  Где тут написано про автоматизацию OLE? ;)
                    Я лично пользуюсь следующим методом:
                    ExpandedWrap disabled
                      procedure OpenWordFiles(FileName: String);
                      var
                        FilePath  : OleVariant;
                        WApp      : variant;
                        IsRunning : boolean;
                        OnlyRead : Olevariant;
                        WordApp : TWordApplication;
                      begin
                       
                       if not IsOLEObjectInstalled('Word.Application') then
                         raise Exception.Create('На компьютере не установлен Word !');
                       
                        // проверка запущен ли уже Word
                       IsRunning:=True;
                       try
                         WApp:=GetActiveOleObject('Word.Application'); // пытаемся найти  запущенный объект
                       except
                         IsRunning:=False;
                       end;
                       
                       
                       if (not IsRunning) or not Assigned(WordApp) then begin
                         WordApp := TWordApplication.Create(nil); // если не запущен, то создаём
                         WordApp.ConnectKind := ckRunningOrNew;
                       end;
                       
                        WordApp.Connect;
                       
                        FilePath := FileName;
                        WordApp.Documents.Open(FilePath,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                                                EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
                       
                       
                        // отобразим word правильно
                        WordApp.Visible := true;
                        if WordApp.WindowState = TOLEEnum(wdWindowStateMinimize) then
                            WordApp.WindowState := TOLEEnum(wdWindowStateNormal);
                            WordApp.ScreenUpdating := true;
                      end;
                    Сообщение отредактировано: <Dron> -
                      Цитата Voice @ 24.08.04, 15:25
                      ExpandedWrap disabled
                         
                        Reg.KeyExists('  Word  .Application');

                      пробелов много (может, так и должно быть)

                      не...так не должно быть...пробелы лишние :D

                      Добавлено в :
                      Цитата <Dron> @ 25.08.04, 09:18
                      Я лично пользуюсь следующим методом:
                      ExpandedWrap disabled
                        procedure OpenWordFiles(FileName: String);
                        var
                          FilePath  : OleVariant;
                          WApp      : variant;
                          IsRunning : boolean;
                          OnlyRead : Olevariant;
                          WordApp : TWordApplication;
                        begin
                         
                         if not IsOLEObjectInstalled('Word.Application') then
                           raise Exception.Create('На компьютере не установлен Word !');
                         
                        *********************
                         end;

                      Упустил наверное...:
                      ExpandedWrap disabled
                        function IsOLEObjectInstalled(Name: String): boolean;
                        var
                          ClassID: TCLSID;
                          Rez : HRESULT;
                        begin
                          // Ищем CLSID OLE-объекта
                          Rez := CLSIDFromProgID(PWideChar(WideString(Name)), ClassID);
                         
                          if Rez = S_OK then  // Объект найден
                            Result := true
                          else
                            Result := false;
                        end;
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0451 ]   [ 16 queries used ]   [ Generated: 3.08.25, 06:26 GMT ]