Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.07.13;
Скачать: CL | DM;

Вниз

Проблема с колонтитулами   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2008.07.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.006 c
2-1213375060
Groxel
2008-06-13 20:37
2008.07.13
DataTable и строки


10-1147935317
Mielofon
2006-05-18 10:55
2008.07.13
IStream появился в качестве параметров


2-1213435120
Kaer
2008-06-14 13:18
2008.07.13
Как избавиться от "Out of memory"?


2-1212868121
rena
2008-06-07 23:48
2008.07.13
Интерфейсы


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