Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
15-1211816666
Tualatin
2008-05-26 19:44
2008.07.13
файл ресурса (где картинки jpg)


2-1213209020
slavikdr
2008-06-11 22:30
2008.07.13
Есть задачка с веб-страницами


15-1211675216
MerCus
2008-05-25 04:26
2008.07.13
TCHARTFX


15-1211789451
i
2008-05-26 12:10
2008.07.13
Перехват печати на принтере


6-1190105366
ocean
2007-09-18 12:49
2008.07.13
Как успокоить брандмауэр?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский