Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.05.2025, 13:27
TiKey TiKey вне форума
Прохожий
 
Регистрация: 26.05.2025
Сообщения: 1
Версия Delphi: D7
Репутация: 10
По умолчанию ComObj или как правильно применить настройки полей для конкретного листа в WORD

Всем доброго дня!
Парни, нужна помощь – бьюсь не первый день проблема в следующем!
Задача склеивать вордовские документы, но при склейке у исходного документа ориентация листа и поля – должны быть как у источника.

Порылся в сети собрал демку, на первый взгляд казалось бы работает.
Но при переходе к следующему документу, настройка применяется КО ВСЕМУ ИСХОДНОМУ ДОКУМЕНТУ.

Кто подскажет где не прав!

Мой пример!

Код:
var
    _WordApp_, _WinDocument_, _WinDocumentRange_: OleVariant;
  Const
    _Word_Title_    = 'Word.Application';
  Function CentimetersToPoints( _Steps_: Single ): Single;
  begin
    Result := ( 28.5 * _Steps_ );
  end;
begin
  _WordApp_ := CreateOleObject( _Word_Title_ );
  _WordApp_.Visible := True;
  _WinDocument_ := _WordApp_.Documents;
  _WinDocument_.Add;

  _WinDocumentRange_ := _WordApp_.ActiveDocument.Range;
  _WordApp_.ActiveDocument.Range.Font.Color     := RGB( 250, 50, 147 ); //clred;
  _WordApp_.ActiveDocument.Range.Font.Bold      := True;
  _WordApp_.ActiveDocument.Range.Font.Underline := True;
  _WordApp_.ActiveDocument.Range.Font.Size      := 17;
  _WinDocumentRange_.InsertAfter( DateTimeToStr( NOW ) );

        _WordAPP_.ActiveDocument.Range( _StartPos_, _EndPos_ ).PageSetup.LeftMargin           := _WordAPPSRC_.Selection.PageSetup.LeftMargin    ;        _WordAPP_.ActiveDocument.Range( _StartPos_, _EndPos_ ).PageSetup.TopMargin            := _WordAPPSRC_.Selection.PageSetup.TopMargin     ;
        _WordAPP_.ActiveDocument.Range( _StartPos_, _EndPos_ ).PageSetup.RightMargin          := _WordAPPSRC_.Selection.PageSetup.RightMargin   ;
        _WordAPP_.ActiveDocument.Range( _StartPos_, _EndPos_ ).PageSetup.BottomMargin         := _WordAPPSRC_.Selection.PageSetup.BottomMargin  ;
        _WordAPP_.ActiveDocument.Range( _StartPos_, _EndPos_ ).PageSetup.Orientation          := _WordAPPSRC_.Selection.PageSetup.Orientation   ;                                            //        _WordAPP_.ActiveDocument.Range( _WordAPP_.ActiveDocument.Characters.Count - 1, _WordAPP_.ActiveDocument.Characters.Count ).PageSetup.LeftMargin   := _WordAPPSRC_.Selection.PageSetup.LeftMargin;
Админ: Пользуемся тегами при оформлении кода!

Последний раз редактировалось Admin, 26.05.2025 в 13:36.
Ответить с цитированием
  #2  
Старый 27.05.2025, 06:54
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 663
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Если проделать операцию "ручками" в MS Word, то это будет выглядеть +/- так:
1. Вставить разрыв раздела
2. Изменить параметры страниц нового раздела.
Если включить запись макроса и проделать все тоже самое ручками, то получим:
Код:
Sub Макрос1()
'
' Макрос1 Макрос
'
'
    Selection.InsertBreak Type:=wdSectionBreakNextPage
    If Selection.PageSetup.Orientation = wdOrientPortrait Then
        Selection.PageSetup.Orientation = wdOrientLandscape
    Else
        Selection.PageSetup.Orientation = wdOrientPortrait
    End If
    With Selection.PageSetup
        .LineNumbering.Active = False
        .Orientation = wdOrientLandscape
        .TopMargin = CentimetersToPoints(3)
        .BottomMargin = CentimetersToPoints(1.5)
        .LeftMargin = CentimetersToPoints(2)
        .RightMargin = CentimetersToPoints(2)
        .Gutter = CentimetersToPoints(0)
        .HeaderDistance = CentimetersToPoints(1.25)
        .FooterDistance = CentimetersToPoints(1.25)
        .PageWidth = CentimetersToPoints(41.99)
        .PageHeight = CentimetersToPoints(29.7)
        .FirstPageTray = wdPrinterDefaultBin
        .OtherPagesTray = wdPrinterDefaultBin
        .SectionStart = wdSectionNewPage
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .VerticalAlignment = wdAlignVerticalTop
        .SuppressEndnotes = False
        .MirrorMargins = False
        .TwoPagesOnOne = False
        .BookFoldPrinting = False
        .BookFoldRevPrinting = False
        .BookFoldPrintingSheets = 1
        .GutterPos = wdGutterPosLeft
    End With
End Sub
Теперь можно перевести инструкции VBA на Delphi.
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием
Этот пользователь сказал Спасибо dr. F.I.N. за это полезное сообщение:
TiKey (27.05.2025)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:13.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025