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

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

Куда пропадает кнопка? [D7, WinXP]


ищущий ответ ©   (2005-08-23 12:45:00) 

При выполнении данного кода все выполняется. Документ в 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;


Gelax   (2005-08-24 17:50:00) [1]

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


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

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


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


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

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


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

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


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

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


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

Если закоментарить этот кусок кода, то все нормально... В чем ошибка?
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;


Наверх

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