На главную Наши проекты:
Журнал   ·   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
Страницы: (3) 1 2 [3]  все  ( Перейти к последнему сообщению )  
> Замена текста в Word!
    Попробуй заменить кусок
    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 пользователей:
              Страницы: (3) 1 2 [3]  все


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