スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Indesignのダイアログでなく、Visual Basicのダイアログを動かしてみる。

Indesignのダイアログでなく、Visual Basicのダイアログを動かしてみる。

1.「ファイル-新しいプロジェクト」を選ぶと新しいプロジェクトダイアログが開く。テンプレートは「Windowsフォーム アプリケーション」を選び、プロジェクト名は適当に決める。
2.「プロジェクト-参照の追加」でCOMタブをクリック。Adobe Indesign CS2_J Type Library 1.0を選んでOKを押す。
3.Form1.vbにラベル1個、テキストボックス1個、ボタンを2個配置した。
3-1Form1のプロパティ
 FormBorderStyle:FixedDialog
 Size:276, 110(適当)
 Text:ルビ入力支援(ダイアログのタイトル)
 TopMost:True(ダイアログを常に手前に表示する)
3-2ラベルL_rubyのプロパティ
 (Name):L_ruby
 Location:12, 15(適当)
 Text:ルビ:
3-3テキストボックスrubyTextBoxのプロパティ
 (Name):rubyTextBox
 ImeMode:On(入力時にIMEがオンになる)
 Location:47, 12(適当)
 Size:206, 19
3-4OKボタンBT_OKのプロパティ
 (Name):BT_OK
 Location:87, 48(適当)
 Size:75, 23(適当)
 Text:OK
3-5テキストボックスクリアボタンBT_CLRのプロパティ
 (Name):BT_CLR
 Location:178, 48(適当)
 Size:75, 23(適当)
 Text:クリア
4.Form1.vbに下記のようなコードを書いた。最初に書いたソースとの違いはIndesignのGUI部分を取り払い、ルビ振りのメインルーチンをAddRubyというサブルーチンにまとめた。よって、ルビ入力後にOKボタンを押してもよいし、入力の最後にEnterキーを押してもルビ振りが実行されるようになった。

Imports System.Text.RegularExpressions ' 正規表現エンジンの使用を宣言
Public Class Form1
' OKボタンが押されたらルビ付加のメインルーチンを実行する
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_OK.Click
addRuby()
End Sub
' クリアキーでルビ入力を消去
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_CLR.Click
rubyTextBox.Text = ""
End Sub
' ルビ付加のメインルーチン
Private Sub addRuby()
Dim app As InDesign.Application
Dim mySel
app = CreateObject("InDesign.Application.CS2_J")
' ドキュメントが開いているか?
If (app.Documents.Count <> 0) Then
mySel = app.ActiveDocument.Selection
' 文字が選択されているか?
If (mySel.count = 1) Then
If (TypeOf mySel(1) Is InDesign.Character = True) Or (TypeOf mySel(1) Is InDesign.Text = True) Or (TypeOf mySel(1) Is InDesign.Word = True) Then
Dim tmpFlag As Boolean = True
' ルビ入力のテキストボックスより文字列を取り出す
Dim rubyText As String = rubyTextBox.Text
Dim re As New Regex(" | ", RegexOptions.Singleline)
' ルビ入力がない、またはルビ入力の中に全角か半角の空白がなければフラグはfalse
If (rubyText.Length = 0) Or (re.IsMatch(rubyText)) = False Then tmpFlag = False
Dim matches As MatchCollection = re.Matches(rubyText)
' フラグがtrueで、親文字の字数とルビ入力の空白で区切られた文字の個数が一致するか?
If (tmpFlag = True) And (mySel(1).characters.count = matches.Count + 1) Then
' ルビ入力を空白ごとに切り出す
Dim rubyText2 = re.Split(rubyText)
Dim i As Integer
Dim j As Integer = mySel(1).characters.Count
' 親文字1字ずつに対しモノルビでルビを振る
For i = 1 To j Step 1
mySel(1).characters(i).rubyFlag = True
mySel(1).characters(i).rubyType = 1249013859
mySel(1).characters(i).rubyString = rubyText2(i - 1)
Next i
Else
' 親文字に対しグループルビでルビを振る
rubyText = re.Replace(rubyText, "")
mySel(1).rubyFlag = True
mySel(1).rubyType = 1249011570
mySel(1).rubyString = rubyText
End If
Else
MsgBox("文字を選択してください")
End If
Else
MsgBox("文字を選択してください")
End If
Else
MsgBox("ドキュメントを開いて下さい")
End If

End Sub
Private Sub rubyTextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles rubyTextBox.KeyPress
' ルビ入力後にリターンキーが押された?
If e.KeyChar = Microsoft.VisualBasic.Chr(13) Then
Call addRuby()
End If
End Sub
【追記】
できあがったプログラムが↓になります。ブラウザにコピペしてダウンロードしてください。
http://itchang.web.fc2.com/adobeScripts/rubyShien2.lzh
適当なフォルダに解凍してお使いください。
スポンサーサイト

テーマ : ブログ - ジャンル : ブログ

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。