Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Передать в MS Word [D6, D7, 2000, XP]


Страницы:   1 2

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;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо