2014-12-12 5 views
2

В приложении Word Word, когда я набираю --- и нажимаю ENTER, Word вставляет горизонтальную линию _____ (это граница только под строкой).delphi как вставить разрыв строки (граница ниже) в word ole automation

Мне нужно вставить ту же горизонтальную линию, но с помощью автоматизации delphi ole. Кто-нибудь знает как? Я пробовал:

Word := CreateOleObject('Word.Application'); 
    Word.Visible := False; 
    Doc:=Word.Documents.Add; 
    Selection:=Word.Selection; 
    Range:= Word.Selection.Range; 
    Table:= Word.ActiveDocument.Tables; 
    View:= Word.ActiveWindow.View; 
    (...) 
    Word.ActiveWindow.ActivePane.View.SeekView := 10; 
    Selection.TypeText(Text :='---'#13#10); <--- No sucess! 

Любая помощь будет приветствоваться.

ответ

3

Я думаю, что я нашел причину разницы в поведении, которую вы описываете, и несколько способов получить аналогичный эффект через автоматизацию, как вы можете получить вручную.

Когда вы вводите что-то вручную, средство AutoCorrect/AutoFormat Word выполняет «прослушивание» того, что вы набираете, и когда оно распознает то, на что оно было запрограммировано, например три дефиса подряд, оно вмешивается и принимает соответствующее действие AutoCorrect/AutoFormat.

Однако при вызове автоматизации, если вы вставляете текст (через TypeText), который был бы автоматически отформатирован при вводе вручную, AutoFormating не происходит автоматически - я думаю, это может быть из-за того, что TypeText() обходит код Word который обрабатывает ввод с клавиатуры. Макросы Word, которые вызывают TypeText(), тоже ведут себя так. Но вы может вызывать его в коде автоматизации, например:

MSWord.Selection.TypeText('Some text'); 
    MSWord.Selection.TypeText(#13#10); 

    MSWord.Selection.TypeText('---'); 
    MSWord.Selection.Range.AutoFormat; 

Я не тщательно тестируется выше других записей Автоформата, я бы ожидать, что работать с ними, так что я полагаю, это может иметь «преимущество» по сравнению с другими методами, которые вам не нужно знать о том, как на самом деле делается форматирование :-).

В качестве альтернативы, вы можете применить эффект вручную, как показано в другой ответ, или код, который я писал в моей первой попытки ответить на ваш д, а именно

Word.Selection.TypeText('Some text'); 
    Word.Selection.TypeText(#13#10); 
    Word.Selection.InlineShapes.AddHorizontalLineStandard; 
    Word.Selection.TypeText('More text'); 

Надеюсь, между этими тремя возможностями, вы Я смогу получить эффект, который вам нужен.

+0

Отличный результат! Я тестировал с '' --- '','' === '','' *** ''и многие другие, и многие, если не большинство правил автокоррекции/автоформата, работают (если они включены в настройках пользователей!). Некоторые не использовали, например. '(e)' должен указать знак евро в моей настройке, но этого не делать. Однако при вводе текста на клавиатуре. –

+0

Спасибо, @Tom. Я все еще играю с ним, но сам столкнулся с некоторыми морщинами с расширениями AutoCorrect (в списке ниже флажка «Заменить текст во время ввода» на вкладке «Автозамены») - кажется, что до тех пор, пока графический интерфейс Word сразу получит контроль после моего Selection.Autoformat * и * я затем нажимаю клавишу пробела вручную, расширенный текст заменяется на короткий код. НО я еще не нашел ничего, что мог бы сделать в коде автоматизации, который может заменить клавишу пробела и получить расширенный автотекст. Я мог бы начать свой собственный вопрос о том, что ... – MartynA

+0

MartynA, я думаю, что мы уже ответили на этот вопрос, так что было бы неплохо открыть новый специально для других вопросов, касающихся AutoCorrect/AutoFormat. Или у нас может быть более бесплатный чат на форуме Emb OleAutomation. –

2

следующее добавление рамки ниже (wdBorderBottom).

const 
    wdBorderBottom = -3; 
    wdLineStyleSingle = 1; 
    wdLineWidth075pt = 6; 
    wdColorBlack = 0; 

var 
    Border: OleVariant; 

begin 
    // ... 
    Border := Word.Selection.Borders[wdBorderBottom]; 
    Border.LineStyle := wdLineStyleSingle; 
    Border.LineWidth := wdLineWidth075pt; 
    Border.Color := wdColorBlack; 
    // ... 
end; 
+0

Спасибо @TomBrunberg: Это выглядит немного больше, чем может быть после OP. – MartynA

+0

@MartynA проще в использовании :) –

+0

Спасибо, ребята, все отлично работает!Я изучаю работу с ole automation и msword/excel, но без документации. Я использую примеры на google.com. Теперь мне нужно создать таблицы, но это еще один вопрос, который мне нужно искать раньше. – hamacker

Смежные вопросы