Форум: "Corba";
Текущий архив: 2008.07.13;
Скачать: [xml.tar.bz2];
ВнизПроблема с колонтитулами Найти похожие ветки
← →
Stalko (2006-05-18 17:54) [0]Здравствуйте!
Делаю одну програмку, которая работает с Вордом через Ole. И наблюдаю чудеса на виражах.
В генерируемом документе два раздела, в каждом из которых есть нарисованные линии и TextBox-ы. Естественно, для отладки сразу сделал ворд видимым. Запускаю и вижу: все линии легли куда надо, а вот текстбоксы из второго раздела легли в первый. Пошел по шагам. Все ложиться куда надо!!
Добавил после установки каждого текстбокса по Application.ProccessMessages. Все заработало!!!
...и тут я сделал ворд невидимым... Все отработало... и что я вижу: все те же текстбоксы из второго раздела лежат снова в первом!!!
И теперь даже не понимаю, что еще делать и из-за чего такая странность?
Может кто знает, как это лечить?
← →
YurikGL © (2006-05-18 21:01) [1]Код давай...
Только сокращенный по максимуму т.е. открытие ворда, залезание в колонтитулы, работа с текстбоксами, выход из колонтитула и т.п.
← →
Stalko (2006-05-18 22:58) [2]Сильно порезаный вид, надеюсь, пока резал ничего лишнего не замочил:
procedure WordLineAdd(sect:byte;BX,BY,EX,EY,W: single);
begin
WinWord.ActiveDocument.Sections.Item(sect).Headers.Item(wdHeaderFooterPrimary).S hapes.AddLine(CentimetersToPoints(BX)/10,
WinWord.ActiveDocument.PageSetup.PageHeight-CentimetersToPoints(BY)/10,
CentimetersToPoints(EX)/10,
WinWord.ActiveDocument.PageSetup.PageHeight-CentimetersToPoints(EY)/10)
.Line.Weight:=CentimetersToPoints(W)/10;
Application.ProcessMessages;
end;
procedure WordTextAdd(sect:byte;X,Y,W,H:single;Orient:byte;S: string;FontSize: byte);
var S1: variant;
O: variant;
begin
Application.ProcessMessages;
case Orient of
0: O:= msoTextOrientationHorizontal;
1: O:= msoTextOrientationUpward;
end;
S1:=WinWord.ActiveDocument.Sections.Item(sect).Headers.Item(wdHeaderFooterPrimar y).Shapes.AddTextBox(O,
CentimetersToPoints(X-W/2)/10,
WinWord.ActiveDocument.PageSetup.PageHeight-CentimetersToPoints(Y+H/2)/10,
CentimetersToPoints(W)/10,
CentimetersToPoints(H)/10);
Application.ProcessMessages;
S1.TextFrame.TextRange.Font.Size:=10;
S1.TextFrame.TextRange.ParagraphFormat.Alignment := wdAlignParagraphCenter;
S1.Fill.Transparency := 1;
S1.TextFrame.MarginLeft := 0;
S1.TextFrame.MarginRight := 0;
S1.TextFrame.MarginTop := 0;
S1.TextFrame.MarginBottom:= 0;
S1.Line.Visible := msoFalse;
S1.TextFrame.TextRange := S;
Application.ProcessMessages;
end;
procedure WordGener;
...
begin
DocPointer:=WinWord.Documents.Add;
WinWord.Visible:=true; // то самое место :)
WinWord.ActiveWindow.ActivePane.View.SeekView := wdSeekCurrentPageHeader;
WordLineAdd(1,20,45,205,45,0.3);
WordLineAdd(1,20,40,85,40,0.3);
...
WordTextAdd(1,23,32,7,5,0,"Текст1",10);
WordTextAdd(1,32,32,10,5,0,"Текст2",10);
WinWord.ActiveWindow.ActivePane.View.SeekView := wdSeekMainDocument;
WinWord.Selection.InsertBreak(wdSectionBreakNextPage);
WinWord.ActiveWindow.ActivePane.View.SeekView := wdSeekCurrentPageHeader;
WinWord.ActiveDocument.Sections.Item(2).Headers.Item(wdHeaderFooterPrimary).Link ToPrevious := msoFalse;
WinWord.ActiveDocument.Sections.Item(2).Footers.Item(wdHeaderFooterPrimary).Link ToPrevious := msoFalse;
WinWord.ActiveWindow.ActivePane.View.SeekView := wdSeekMainDocument;
WinWord.ActiveWindow.ActivePane.View.SeekView := wdSeekCurrentPageHeader;
WinWord.ActiveDocument.Sections.Item(2).Headers.Item(wdHeaderFooterPrimary).Rang e.ShapeRange.Delete;
WinWord.ActiveDocument.Sections.Item(2).Footers.Item(wdHeaderFooterPrimary).Rang e.ShapeRange.Delete;
WinWord.ActiveWindow.ActivePane.View.SeekView := wdSeekMainDocument;
WinWord.ActiveWindow.ActivePane.View.SeekView := wdSeekCurrentPageHeader;
WordLineAdd(10,20,45,205,45,0.3);
WordLineAdd(10,20,40,85,40,0.3);
...
WordTextAdd(2,123,132,17,15,0,"Текст3",10);
WordTextAdd(2,132,132,110,15,0,"Текст4",10);
WinWord.ActiveWindow.ActivePane.View.SeekView := wdSeekMainDocument;
...
end;
← →
Stalko (2006-05-19 10:25) [3]Попробовал пройти по шагам с невидимым вордом, точнее половину AddTextBox-ов по шагам, а половину - в реальном режиме.
Так вот те, что по шагам - лежат нормально, остальные - абы как.
← →
YurikGL © (2006-05-19 21:58) [4]
> Stalko (18.05.06 22:58) [2]
А не проще создать файл шаблона в который изначально добавлены все линии и текстбоксы, поставлять его вместе с программой и в нужном месте просто копировать и открывать во ворде?
По моему, быстрее и безглючнее будет.
← →
Stalko (2006-05-19 22:15) [5]
> А не проще создать файл шаблона в который изначально добавлены
> все линии и текстбоксы, поставлять его вместе с программой
> и в нужном месте просто копировать и открывать во ворде?
>
> По моему, быстрее и безглючнее будет.
Об этом я думал изначально, однако, у меня есть свои основания так не делать... Хотя, согласен, и быстрее и надежнее...
← →
Stalko (2006-05-21 21:08) [6]Всё, сам разобрался. Может кому пригодиться: у AddTextBox есть еще необязательный параметр Anchor. Нужно им указывать на нужный диапазон и тогда все будет хорошо.
Тема закрыта.
Страницы: 1 вся ветка
Форум: "Corba";
Текущий архив: 2008.07.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c