
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.193] |
![]() |
|
Страницы: (3) 1 2 [3] все ( Перейти к последнему сообщению ) |
Сообщ.
#31
,
|
|
|
Попробуй заменить кусок
![]() ![]() 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; на кусок ![]() ![]() 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; |
Сообщ.
#32
,
|
|
|
У меня тоже сейчас подобная проблемка с прогой...
![]() ![]() 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' просто удаляются... помогите разобраться ![]() |
Сообщ.
#33
,
|
|
|
В zamena не мешало бы первым делом устанавливать курсор (selection) в начало документа, иначе Forward-поиск после первой замены может ничего не найти
|
Сообщ.
#34
,
|
|
|
![]() ![]() 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; В итоге получил что те искомые значения что в тексте появляются однократно заменились. А то что несколько раз встечается в тексте лишь первый раз, дальнейших изменений в тексте не произошло ![]() |
![]() |
Сообщ.
#35
,
|
|
alexandr_fg, а сделать
![]() ![]() 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; тебе какие-то предрассудки запрещают? Обязательно надо цикл гонять? |
Сообщ.
#36
,
|
|
|
Спасибо огромное, все заработало
![]() |