![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Куда пропадает кнопка? [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;