![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передать в MS Word [D6, D7, 2000, XP]
Officeman © (2007-02-05 10:18:00)Доброе время суток!
Передаю контент ListView (LVprice) в MS Word.
Используя для target вставки 'Закладки'
Происходит:
1) открытие Word
2) переход к нужной 'Закладки'
3) посторочная передача данных
4) остановка передачи.
и если во время передачи данных [3], нажать несколько раз мышью.
но передача прерывается и таблица остаётся незаполненной.
либо заполняется наперекосяк.
вопрос: как блокировать мышь до завершения передачи данных.
или испольщовать другой способ. например передавать а потом показывать Word
Var
S,Info : string;
i,Nn : integer;
Sum : double;
Tv, Ss : PChar;
MsWord: Variant;
begin
try
MsWord := GetActiveOleObject('Word.Application');
except
try
MsWord := CreateOleObject('Word.Application');
MsWord.Visible := True;
except
ShowMessage('Не могу запустить Microsoft Word');
Exit;
end;
end;
S:=AppDir+'data\newlist.doc'; //имя открываемого документа
DDE1.DdeTopic:=MsWord;
DDE1.OpenLink; //устанавливаем связь
Tv:=StrAlloc(20000); Ss:=StrAlloc(300); //выделяем память
//даем команду открыть документ и установить курсор
//в начало документа
StrPCopy(Tv, '[FileOpen "'+S+'"][StartOfDocument]');
S:='1'; //номер документа
{ ШАПКА }
Info:=Form7.addinfo.Text;
StrCat(Tv, StrPCopy(SS, '[EditBookmark.Name = "Info", .Goto][Insert "'+Info+'"]'+'[EditBookmark .Name = "Table", .Goto]'));
if not DDE1.ExecuteMacro(Tv, false) then
begin
MessageDlg('Ошибка связи с Microsoft Word.', mtError, [mbOk], 0);
StrDispose(Tv); StrDispose(Ss);
exit;
end;
{ТАБЛИЦА}
{ Заполняем таблицу }
Sum:=0; Nn:=0;
for i:=0 to LVprice.Items.Count-1 do
begin
inc(Nn);
StrPCopy(Tv, '[Insert "'+inttostr(Nn)+'"][NextCell][Insert "'+LVprice.Items[i].subitems[1]+'"]'+
'[NextCell][Insert "'+LVprice.Items[i].subitems[2]+'"][NextCell][Insert "'+LVprice.Items[i].subitems[3]+'"][NextCell]');
if not DDE1.ExecuteMacro(Tv, false)
then begin
MessageDlg('Ошибка связи с Microsoft Word.', mtError, [mbOk], 0);
exit;
end;
end;
StrDispose(Tv); StrDispose(Ss);
Officeman (2007-02-05 13:11:00) [21]оо.. попробую.. спасиба Elen
Elen (2007-02-05 10:51:00) [22]
> Officeman
...Да еще может поможет если сделать ворд Visible :=false.
Elen (2007-02-05 10:44:00) [23]
> вопрос: как блокировать мышь до завершения передачи данных.
Ну если конкретно по вопросу то например так :
Открыть какое нибудь модальное окно с прогрессбаром например и пока не конец не давать его закрыть, или :
(С приколом)
procedure TForm1.Timer1Timer(Sender: TObject);
begin
SetCursorPos(Screen.Width,0);
ShowCursor(false);
end;