На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> Замена текста в Word!
    У меня есть едит. И ворд. В ворде есть текст: @edit1@. Как мне
    этот текст (в ворде) заменить на тот, что у меня в едите?
        Читал!!! Не могу понять!!!
          BIG-VL
          вот такой вот мудуль
          ExpandedWrap disabled
            unit MyWord;
             
            interface
            //*******************создаём объект ворд****************************************
              function CreateWord:boolean;
            //*******************делаем видимым*********************************************
              function VisibleWord(Visible:boolean):boolean;
            //*******************Поиск и замена*********************************************
              function FindAndReplace(FindText, ReplacementText:string):boolean;
            //*******************Проверяем, установлен ли ворд******************************
              function IsWordInstalled: Boolean;
            //*******************Открытие документа*****************************************
              function OpenDocFile(FileWord, Pass:string):boolean;
            implementation
            //*******************необходимые модули*****************************************
            uses ComObj,Registry,Windows;
            //*******************переменная для работы с объектом***************************
            var
              Word:variant;
            //*******************создаём объект ворд****************************************
            function CreateWord:boolean;
            begin
              CreateWord := true;
               try
                Word := CreateOleObject('Word.Application');
               except
                CreateWord := False;
               end;
            end;
            //*******************делаем видимым*********************************************
            function VisibleWord(Visible:boolean):boolean;
            begin
              VisibleWord := True;
               try
                Word.Visible := Visible;
               except
                VisibleWord := False;
               end;
            end;
            //*******************Поиск и замена*********************************************
            function FindAndReplace(FindText, ReplacementText:string):boolean;
            const
               wdReplaceAll=2;
            begin
              Word.Selection.Find.Text := FindText;
              Word.Selection.Find.Replecement.Text := ReplacementText;
              FindAndInsert := Word.Selection.Find.Execute(Replace := wdReplaceAll);
            end;
            //*******************Проверяем, установлен ли ворд******************************
            function IsWordInstalled: Boolean;
            var
              Reg: TRegistry;
              s: string;
            begin
              Reg := TRegistry.Create;
               try
                 Reg.RootKey := HKEY_CLASSES_ROOT;
                 Result := Reg.KeyExists('Word.Application');
               finally
                 Reg.Free;
               end;
            end;
            //*******************Открытие документа*****************************************
            function OpenDocFile(FileWord, Pass:string):boolean;
            const
               wdOpenFormatTemplate=2;
            begin
              Word.Documents.Open(FileName:=FileWord,Format:=wdOpenFormatTemplate,
                                          PasswordDocument:= Pass);
            end;
            //*******************Конец модуля***********************************************
            end.

          полностью рабочий, писал для собственных нужд...
          если что н понятно, пиши
            Цитата BIG-VL @
            Не могу понять!!!

            Что именно не понятно?
              хе, так это же мой модуль :)
              и что тебе тогда правда непонятно!!!!!!!!!????????? :blink:
                Блин не могу понять, а что именно не могу сказать потому чо всё! Этот модклю подключаю а дальше?
                  подключаешь модуль, а дальше используешь его функции
                  ExpandedWrap disabled
                    CreateWord;
                    OpenDocFile('путь к файлу','');
                    FindAndReplace('что нужно заменить','на что нужно заменить');
                    VisibleWord;
                    Цитата BIG-VL @
                    что именно не могу сказать потому чо всё!
                    :blink:
                    Если пользуешься процедурой tIce - то:

                    ExpandedWrap disabled
                      procedure TForm1.Button1Click(Sender: TObject);
                      begin
                        Word_StringReplace('C:\Test.doc','@edit1@',Edit1.Text, [wrfReplaceAll]); // Замени test.doc на имя своего файла
                      end;
                      Цитата dron-s @
                      подключаешь модуль, а дальше используешь его функции
                      ExpandedWrap disabled
                        CreateWord;
                        OpenDocFile('путь к файлу','');
                        FindAndReplace('что нужно заменить','на что нужно заменить');
                        VisibleWord;

                      Во это уже лучше!!!

                      Добавлено
                      Цитата volvo877 @
                      Если пользуешься процедурой tIce - то:

                      Это я не понял!!! :wall:
                        Цитата volvo877 @
                        что именно не могу сказать потому чо всё!

                        такое чувство, что BIG-VL не имеет не малейшего представления что к чему :wacko:
                          BIG-VL >:( Что, трудно на ник пользователя посмотреть, по той ссылке, которую я тебе дал? Или все время делать тебе Copy+Paste ???
                            Цитата BIG-VL @
                            Во это уже лучше!!!

                            и что, это тоже не работает?
                              Цитата volvo877 @
                              BIG-VL Что, трудно на ник пользователя посмотреть, по той ссылке, которую я тебе дал? Или все время делать тебе Copy+Paste ???

                              Я смотрел...


                              Цитата dron-s @
                              такое чувство, что BIG-VL не имеет не малейшего представления что к чему

                              Если честно то да не пойму что к чему!!! :wall:

                              Добавлено
                              Цитата dron-s @
                              и что, это тоже не работает?

                              Не могу сказать, не проверил ещё!!! Ща проверю и скажу!!! :unsure:

                              Добавлено
                              Когда подключил модуль то сказал он ошибка...

                              [Ошибка] myword.pas(46): Undeclared identifier: 'FindAndInsert'

                              в строке
                              ExpandedWrap disabled
                                FindAndInsert := Word.Selection.Find.Execute(Replace := wdReplaceAll);
                                Цитата BIG-VL @
                                Когда подключил модуль то сказал он ошибка...

                                [Ошибка] myword.pas(46): Undeclared identifier: 'FindAndInsert'

                                в строке
                                FindAndInsert := Word.Selection.Find.Execute(Replace := wdReplaceAll);

                                ну дык всё правильно... переправь модуль, а вернее функцию FindAndReplace
                                ExpandedWrap disabled
                                  function FindAndReplace(FindText, ReplacementText:string):boolean;
                                  const
                                     wdReplaceAll=2;
                                  begin
                                    Word.Selection.Find.Text := FindText;
                                    Word.Selection.Find.Replecement.Text := ReplacementText;
                                    FindAndReplace := Word.Selection.Find.Execute(Replace := wdReplaceAll);
                                  end;
                                  Ещё ошибка:
                                  [Ошибка] Unit2.pas(353): Not enough actual parameters
                                  в строке:
                                  ExpandedWrap disabled
                                    VisibleWord;
                                    ExpandedWrap disabled
                                      VisibleWord(true);

                                    так трудно посмотреть на функцию и сделать самому
                                      Я пока не врюблюсь в делфи, вот учюсь думать по делфи.... :unsure:
                                        Цитата BIG-VL @
                                        Я пока не врюблюсь в делфи, вот учюсь думать по делфи....

                                        не пиши полной чуши, а лучше читай УМНЫЕ книги!!!!
                                        да внимательнее, а не так что нравится или не нравится!!!!!!
                                        что сейчас тоже не работает?
                                          dron-s то же не работает!!!

                                          user posted image

                                          Добавлено
                                          Я так понял полный путь нужно указать? Ну а у меня документ лежит в папке doc/*.*
                                            Цитата BIG-VL @
                                            dron-s то же не работает!!!

                                            что на этот раз
                                              пост выше...
                                                если у тебя файл лежит в папке doc, папка находится в корне, то пиши так
                                                ExpandedWrap disabled
                                                  CreateWord;
                                                  OpenDocFile(ExtractFilePath(paramStr(0)) + 'doc\Template.doc','');
                                                  FindAndReplace('что нужно заменить','на что нужно заменить');
                                                  VisibleWord;
                                                  user posted image

                                                  Говорит что файл открыт!!! Потом вот эта ошибка!!!
                                                    Цитата BIG-VL @
                                                    Говорит что файл открыт!!!

                                                    перерд выполнение процедуры, файл должен быть закрыт!!!
                                                    Цитата BIG-VL @
                                                    Потом вот эта ошибка!!!

                                                    у меня нет никакой ошибки, всё работает...
                                                      Цитата dron-s @
                                                      перерд выполнение процедуры, файл должен быть закрыт!!!

                                                      Я знаю!!! Он у меня закрыт!!! Может у меня офис то что 2003?
                                                        Не работает!!! :wall: :wall: :wall:
                                                          Цитата BIG-VL @
                                                          Не работает!!!

                                                          Ну, что, этот проект у тебя тоже не работает? Ничего не меняй, просто откомпилируй, запусти и нажми на кнопку! А потом проверь, что содержится в DOC файле...
                                                          Прикреплённый файлПрикреплённый файлtest_it.zip (5.04 Кбайт, скачиваний: 180)
                                                            такой вопрос.. компилиться все нормально, но потом при нажати на соотв кнопку выдает ошибку ... Method replacement not supported by automation object.
                                                            ExpandedWrap disabled
                                                              procedure TForm1.Button2Click(Sender: TObject);
                                                              var
                                                                BookmarkName, Doc, R, Ff_w: OleVariant;
                                                              begin
                                                                try
                                                                  MsWord := CreateOleObject('Word.Application');
                                                                  MsWord.Visible := False;
                                                                except
                                                                  ShowMessage('Microsoft Word не установлен!');
                                                                end;
                                                                Ff_w:='D:\Pos_Inst\akt.doc';
                                                                BookmarkName:='date';
                                                                try
                                                                  MsWord.Documents.Open(Ff_w);
                                                                except
                                                                  ShowMessage('Файл не найден!');
                                                                end;
                                                                MsWord.Selection.Find.Text := '123';
                                                                MsWord.Selection.Find.Replecement.Text := 'нашол:))';
                                                                
                                                               
                                                                {If  MsWord.Bookmarks.Exist(BookmarkName) then
                                                                  begin
                                                                    R:=MsWord.Bookmarks.Item(BookmarkName).Range;
                                                                    R.InsertAfter('FUCK');}
                                                                  end;
                                                              Ребята помогите :wall:
                                                              Мне нужно сделать фтоб с делфи заполнялся бланк в ворде, но он меняет только первое значение а вот уже второе нехочет в чем дело??
                                                              ПОдскажите :(


                                                              unit Unit1;

                                                              interface

                                                              uses
                                                              Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
                                                              Dialogs, StdCtrls, comobj;

                                                              type
                                                              TForm1 = class(TForm)
                                                              Edit1: TEdit;
                                                              Edit2: TEdit;
                                                              Edit3: TEdit;
                                                              Button1: TButton;
                                                              Edit4: TEdit;
                                                              procedure Button1Click(Sender: TObject);
                                                              private
                                                              { Private declarations }
                                                              public
                                                              { Public declarations }
                                                              end;

                                                              var
                                                              Form1: TForm1;

                                                              implementation
                                                              {$R *.dfm}
                                                              function zamena(w: variant; poisk, zamslovo: string): boolean;

                                                              begin


                                                              W.Selection.Find.Forward:=true;
                                                              W.Selection.Find.Text:=poisk;
                                                              if W.Selection.Find.Execute then begin W.Selection.Text:=zamslovo; result:=true;
                                                              end;
                                                              end;





                                                              procedure TForm1.Button1Click(Sender: TObject);
                                                              var w: variant;
                                                              begin
                                                              edit4.Text:=edit1.Text + edit2.Text+ edit3.Text ;
                                                              w:=createoleobject('word.application') ;
                                                              w.documents.add('C:\Documents and Settings\User\Рабочий стол\т1.dot') ;
                                                              if zamena(w, '##1FIO&', edit4.text)=true then showmessage('2') ;
                                                              if zamena(w, '##6FIO&', edit1.text)=true then showmessage('3') ;

                                                              w.visible:=true;
                                                              //w.quit;
                                                              end;

                                                              end.
                                                                Попробуй заменить кусок
                                                                ExpandedWrap disabled
                                                                  function zamena(w: variant; poisk, zamslovo: string): boolean;
                                                                  begin
                                                                    W.Selection.Find.Forward:=true;
                                                                    W.Selection.Find.Text:=poisk;
                                                                    if W.Selection.Find.Execute
                                                                    then begin
                                                                      W.Selection.Text:=zamslovo;
                                                                      result:=true;
                                                                    end;
                                                                  end;


                                                                на кусок
                                                                ExpandedWrap disabled
                                                                  function zamena(w: variant; poisk, zamslovo: string): boolean;
                                                                  begin
                                                                    result := False;
                                                                    W.Selection.Find.Forward := true;
                                                                    W.Selection.Find.Text := poisk;
                                                                    while W.Selection.Find.Execute
                                                                    do begin
                                                                      W.Selection.Text := zamslovo;
                                                                    end;
                                                                    result := true;
                                                                  end;
                                                                Сообщение отредактировано: ZVano -
                                                                  У меня тоже сейчас подобная проблемка с прогой...

                                                                  ExpandedWrap disabled
                                                                    unit Unit1;
                                                                    interface
                                                                    uses
                                                                      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
                                                                      Dialogs, Buttons, StdCtrls, ComObj;
                                                                    type
                                                                      TForm1 = class(TForm)
                                                                        Label1: TLabel;
                                                                        Edit1: TEdit;
                                                                        Edit2: TEdit;
                                                                        Edit3: TEdit;
                                                                        Label2: TLabel;
                                                                        Label3: TLabel;
                                                                        Label5: TLabel;
                                                                        Button1: TButton;
                                                                        Button2: TButton;
                                                                        procedure Button1Click(Sender: TObject);
                                                                        procedure Button2Click(Sender: TObject);
                                                                      private
                                                                        { Private declarations }
                                                                      public
                                                                        { Public declarations }
                                                                      end;
                                                                    var
                                                                      Form1: TForm1;
                                                                    implementation
                                                                    {$R *.dfm}
                                                                    function zamena(w: variant; poisk, zamena: string): boolean;
                                                                    begin
                                                                      result := False;
                                                                      W.Selection.Find.Forward := true;
                                                                      W.Selection.Find.Text := poisk;
                                                                      while W.Selection.Find.Execute
                                                                      do begin
                                                                        W.Selection.Text := zamena;
                                                                      end;
                                                                      result := true;
                                                                    end;
                                                                    procedure TForm1.Button1Click(Sender: TObject);
                                                                    var W: variant;
                                                                    begin
                                                                    W:=CreateOleObject('Word.Application');
                                                                    W.Documents.Open(FileName:='D:\ДВ.doc', Readonly:=True);
                                                                      zamena(w, 'XXX', Edit1.Text);
                                                                      zamena(w, 'QQQ', Edit2.Text);
                                                                      zamena(w, 'ZZZ', Edit3.Text);
                                                                    W.Visible:=True;
                                                                    end;
                                                                    procedure TForm1.Button2Click(Sender: TObject);
                                                                    begin
                                                                      Form1.Close;
                                                                    end;
                                                                     
                                                                    end.



                                                                  Когда в поля Edit введены данные заменяется только первое значение, тоисть 'XXX', причем остается выделеным а остальные же, 'QQQ' и 'ZZZ' остаются без изменений. Притом что первые два значения встречаются только по одному разу в документе, а третье около 5, но меняется только 1 а дальнейшие остаются без изменений.
                                                                  Когда поля Edit не заполнены то все значения которые нужно найти тоисть 'XXX', 'QQQ' и 'ZZZ' просто удаляются...
                                                                  помогите разобраться :(
                                                                    В zamena не мешало бы первым делом устанавливать курсор (selection) в начало документа, иначе Forward-поиск после первой замены может ничего не найти
                                                                      ExpandedWrap disabled
                                                                        function zamena(w: variant; poisk, zamena: string): boolean;
                                                                         
                                                                        begin
                                                                          result := False;
                                                                         
                                                                          W.Selection.Start:=0;
                                                                          W.Selection.End:=0;
                                                                         
                                                                         
                                                                          W.Selection.Find.Forward := true;
                                                                          W.Selection.Find.Text := poisk;
                                                                          while W.Selection.Find.Execute
                                                                          do begin
                                                                            W.Selection.Text := zamena;
                                                                          end;
                                                                          result := true;
                                                                        end;


                                                                      В итоге получил что те искомые значения что в тексте появляются однократно заменились. А то что несколько раз встечается в тексте лишь первый раз, дальнейших изменений в тексте не произошло :(
                                                                      Сообщение отредактировано: alexandr_fg -
                                                                        alexandr_fg, а сделать
                                                                        ExpandedWrap disabled
                                                                          function zamena(w: variant; poisk, zamena: string): boolean;
                                                                          begin
                                                                            result := False;
                                                                           
                                                                            W.Selection.Start := 0;
                                                                            W.Selection.End := 0;
                                                                           
                                                                            W.Selection.Find.ClearFormatting;
                                                                           
                                                                            W.Selection.Find.Forward := true;
                                                                            W.Selection.Find.Wrap := 1; // wdFindContinue
                                                                            W.Selection.Find.MatchCase := true;
                                                                           
                                                                            W.Selection.Find.Text := poisk;
                                                                            W.Selection.Find.Replacement.Text := zamena;
                                                                           
                                                                            W.Selection.Find.Execute(Replace := 2); // wdReplaceAll
                                                                           
                                                                            result := true;
                                                                          end;

                                                                        тебе какие-то предрассудки запрещают? Обязательно надо цикл гонять?
                                                                          Спасибо огромное, все заработало :)
                                                                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                          0 пользователей:


                                                                          Рейтинг@Mail.ru
                                                                          [ Script execution time: 0,0756 ]   [ 16 queries used ]   [ Generated: 31.07.25, 15:11 GMT ]