Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.18;
Скачать: CL | DM;

Вниз

Куда пропадает кнопка?   Найти похожие ветки 

 
ищущий ответ   (2005-08-23 12:45) [0]

При выполнении данного кода все выполняется. Документ в Word полностью формируется. Но пункт меню, на который повешен данный код исчезает. Если добавить Button и на него повесить этот код, то после выполнения он тоже исчезает. Где ошибка???
procedure TForm1.N63Click(Sender: TObject);
var
Range0: OleVariant;
Direction : OleVariant;
T1,a : OleVariant;
i : integer;
vWidth : array [1..4] of OleVariant;
n : longint;
list:tstringlist;
memo: TMemo;
m: integer;//строка Мемо
s0: string;
vr:olevariant;
 separ: OleVariant;
 tcount: integer;
begin
Table1.Filtered := true;
Table1.Filter :="";
separ := wdPageBreak;
WordApplication1 := TWordApplication.Create(self);
WordApplication1.ConnectKind := ckNewInstance;
WordDocument1 := TWordDocument.Create(self);
WordFont1 := TWordFont.Create(self);
WordParagraphFormat1 := TWordParagraphFormat.Create(self);
if(StrToInt(Copy(WordApplication1.Version,0,Pos(".",WordApplication1.Version)-1))) < 9
 then
 //для Word 97
 (WordApplication1.Documents as Word97.Documents).Add(EmptyParam,EmptyParam)
 else
 begin
 //для Word 2000
 (WordApplication1.Documents as Word2000.Documents).Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam);
 end;
 WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
  list.Free;
 list:=tstringlist.create;
 list.sorted:=true;
 list.Duplicates := dupIgnore;
 Form1.table1.First;
 while not Form1.table1.Eof do
    begin
    list.Add(table1.FieldByName("TarPl").AsString);
    Form1.Table1.Next;
    end;
  Memo := TMemo.Create(Self);
  Memo.Visible := false;
  Memo.Parent := Self;
  Memo.Clear;
  Memo.Lines.Assign(list);
  list.Free;
   for m := 0 to Memo.Lines.Count - 1 do
 BEGIN
 Range0 := WordDocument1.Range;
 s0 := "СПИСОК ...";
 Range0.InsertAfter(s0);
 //создание таблицы
 a := WordDocument1.Characters.Count - 1;
 T1 := WordDocument1.Tables.Add(WordDocument1.Range(a), 1, 4, EmptyParam, EmptyParam);
 vWidth[1] := 15;   vWidth[2] := 90;
 vWidth[3] := 30;   vWidth[4] := 55;
  for i := 1 to 4 do
    begin
    T1.Columns.Item(i).Width := Roundto(2.54*vWidth[i],0);
    end;
  T1.Cell(1, 1).Range.Text := "N пп";
  T1.Cell(1, 2).Range.Text := "Адрес";
  T1.Cell(1, 3).Range.Text := "Договор"+#13+"до";
  T1.Cell(1, 4).Range.Text := "Примечание";
  T1.Range.Font.Size := 9; //шрифт для таблицы
  i := 1;
WordApplication1.Visible:=true;
 Form1.Table1.First;
  while not Form1.table1.Eof do
    begin
  if  Form1.Table1.FieldByName("TarPl").AsString = Memo.Lines[m] then
      begin
      T1.Rows.Add(EmptyParam);
      T1.Cell(i+1, 1).Range.Text := IntToStr(i);
      T1.Cell(i+1, 2).Range.Text :=Table1.FieldByName("Ul").AsString+ " "+Table1.FieldByName("Dom").AsString + "  подъезд " +Table1.FieldByName("Pod").AsString;
      T1.Cell(i+1, 3).Range.Text := Form1.Table1.FieldByName("DataEnd").AsString;
      inc(i);
      end;
      Form1.Table1.Next;
    end;
   WordDocument1.Content.InsertAfter(" "+#13);
 //переход в конец документа
vr:=wdStory;
 WordApplication1.Selection.EndKey(vr,EmptyParam);
 if m<>memo.Lines.Count-1 then //если не последняя
 WordApplication1.Selection.InsertBreak(separ);//вставляем разрыв страницы
 END;
 Memo.Free;
 //переход в начало документа
 vr:=wdStory;
 WordApplication1.Selection.HomeKey(vr,EmptyParam);
end;


 
ищущий ответ   (2005-08-23 12:47) [1]

Если закоментарить этот кусок кода, то все нормально... В чем ошибка?
while not Form1.table1.Eof do
   begin
 if  Form1.Table1.FieldByName("TarPl").AsString = Memo.Lines[m] then
     begin
     T1.Rows.Add(EmptyParam);
     T1.Cell(i+1, 1).Range.Text := IntToStr(i);
     T1.Cell(i+1, 2).Range.Text :=Table1.FieldByName("Ul").AsString+ " "+Table1.FieldByName("Dom").AsString + "  подъезд " +Table1.FieldByName("Pod").AsString;
     T1.Cell(i+1, 3).Range.Text := Form1.Table1.FieldByName("DataEnd").AsString;
     inc(i);
     end;
     Form1.Table1.Next;
   end;


 
ищущий ответ   (2005-08-23 21:27) [2]

Помогите советом


 
Турист   (2005-08-23 21:36) [3]

Как минимум один list.Free лишний


 
ищущий ответ   (2005-08-23 21:40) [4]


> Турист   (23.08.05 21:36) [3]
> Как минимум один list.Free лишний

Да, но на исчезновение кнопки никак не влияет


 
ищущий ответ   (2005-08-24 11:49) [5]

Где же ошибка?


 
Gelax ©   (2005-08-24 17:50) [6]

Сокрее всего это связано с удаление чего-то несущестующего.
первый List.Free я бы убрал. В последнем куске вроде
криминала нет. Посомотри, может где-то есть
массивы, динамическая работа с памятью и т.д.
Либо присваивание друг другу совершенно различных типов.
Либо еще может проблема в том, что
i := 1;
потом
T1.Rows.Add(EmptyParam);
потом
T1.Cell(i+1, 1).Range.Text  здесь i+1 = 2 а строку вроде одну добавили



Страницы: 1 вся ветка

Текущий архив: 2005.09.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.042 c
11-1107177249
hunn
2005-01-31 16:14
2005.09.18
Модальная форма на чистом KOL


6-1117029648
Delphi_is_cool
2005-05-25 18:00
2005.09.18
TTcpClient режим bmNonBlocking.


1-1123130748
X9
2005-08-04 08:45
2005.09.18
Бесплатные компоненты в стиле MS Office2003


11-1090511223
Максим
2004-07-22 19:47
2005.09.18
FindComponent


1-1124739442
Michael5
2005-08-22 23:37
2005.09.18
После копирования-вставки компонента он начинает криво работать!