Главная страница
    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.006 c
15-1211817205
Tualatin
2008-05-26 19:53
2008.07.13
ресурс


15-1211944984
Скарлет
2008-05-28 07:23
2008.07.13
От чего зависит автоматическое вставляние в uses нужных юнитов?


2-1213386637
MaryM
2008-06-13 23:50
2008.07.13
SynEdit и Delphi 2007


15-1212351902
Умище-00013
2008-06-02 00:25
2008.07.13
Как скоро анкеты заспамят?


15-1211885033
pasha_golub
2008-05-27 14:43
2008.07.13
Превратить старый ноутбук в multimedia комбайн





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