Главная страница
    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
2-1213360199
webpauk
2008-06-13 16:29
2008.07.13
Список MDI окон


15-1212012284
Житель_форума
2008-05-29 02:04
2008.07.13
Карта местности


15-1211963337
Dmitry S
2008-05-28 12:28
2008.07.13
jack128


2-1213321722
AlexanderMS
2008-06-13 05:48
2008.07.13
Включить код на C в проект, написанный на Delphi


15-1211938701
DimonS
2008-05-28 05:38
2008.07.13
Знатокам Access. Рухнула база (похоже).





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский