Home > Software Tips > VBA2


Last Update 2004.01.26

VBA (Corel Applications) 研究(CDR11)

まえおき

 2002年11月27日、Corel DRAW GRAPHICS SUITE 11が届き、インストールしました。

 なぜかアンインストールがうまく行かなかったので、強引にフォルダごと消去して、窓の手でアンインストール情報を消去してからインストール。
インストール時のシリアルの入力に、最初から古い(10の)シリアルを入力して蹴られてしばらく悩むというボケをかましながら、なんとかインストール完了。

 さて、VBA関係ですが、案の定、古いものはいきなりは使えないようです。何かツールがついているのかもしれませんが、Visual Basic EditorでCDR10への参照設定を取り消してやらないとコンパイル自体ができません。

 PP11でカレンダーマクロを試したら、

出鼻を挫かれた感じで、ほかにもいろいろ問題点続出の予感です。

 あと、見ていて笑ったのが、フォルダ名などの不統一です。

 GraphicSuiteとセットで開発販売されているのに、プログラムのフォルダ名は
DRAWは「\Corel\Corel Graphics 11\Draw」、
PPは「\Corel\Corel Graphics 11\CorelPHOTO-PAINT」だし、
共有マクロライブラリも
DRAWは「[インストールパス]\Corel\Corel Graphics 11\Draw」にGMSフォルダと並んでCorelDRAW11.gmsが置かれるのに、
PPでは「C:\WINDOWS\Application Data\Corel\Graphics11\User CorelPHOTO-PAINT」にGMSフォルダと並んでCorel PHOTO-PAINT11.gmsが置かれています。

 ふつう同じプロジェクトで同じように作ったら空白の付け方や置く場所は同じようになるんじゃないかと思うのですが、個性が豊かなんでしょうか。
Corel PHOTO-PAINT11.gmsを探すのに苦労しました。DRAWでのGMSと同じ場所に同じようにGMSフォルダがあったので、余計にファイルの行方不明に思えてしまって...

 以上の他は、基本的にCDR10と同じ感じです。VBAのファイルの形式VBAのファイルの置き場を参照してください。実行の仕方も一緒です。

 研究途中なので事実誤認もあるかもしれませんし、私の環境でのみうまく[行く/行かない]というケースもあるかもしれないこと、私の書いたとおりにしてあなたのマシンがとんでもないことになっても責任を取れないことを、予めお断りしておきます。

CDR10での開発・研究はこちら

この文書の先頭に戻る ↑

* * *

DRAWで使おう

全オブジェクトの輪郭をイメージに合わせてスケール

 CDR11記念の第1弾は、ドキュメント内(現在のページ)の全てのShapeを検索して輪郭ペンの「イメージに合わせてスケール」属性をオンにするコードです。
 先日仕事でaiのデータを受け取ったのですが、これを取り込んでみると輪郭線が「イメージに合わせてスケール」しないようになっていて(aiはだまっててもなるのかどうか知りません。)、全オブジェクトの属性変更が必要になってプランを温めていた物です。ズームが追従しない全てのオブジェクトを選択していきなりこの属性を設定すると、輪郭がないオブジェクトまで輪郭がヘアラインで設定されてしまうため、輪郭を持つShapeに個別に設定する必要があります。(これこそ自動化の威力が発揮できるところですね。)

 今回はソースを貼り付けた方式で紹介します。(こちらへ)インストール方法はこちらを参照してください。

 属性を変更したい文書・ページを開いた状態で実行します。

キーストン変形

 MLで話題になった凸凹壁面への文字貼り付けのための変形を実行するものです。キーストンなる言葉が使われていましたので、とりあえずキーストン変形という名前にしました。

 制御用ダイアログを持っていますので、gmsファイルの圧縮形式です。kstn.LZH(23,035byte)

 インストールファイルは、kstn.gmsです。インストール方法はこちらを参照してください。

 変形対象のオブジェクト(グループでも可)を1つだけ選択して実行します。実行ダイアログ

 aからdまでの4つのパネルの繰り返しとして、bとdのサイズを変形させます。この際に初期サイズを0にすることで特定のパネルのないパターンにも対応できます。説明図

 パターンは水平又は垂直を選択してください。垂直を選択した場合、高さはオブジェクト全体を対象とし、幅に上記パターンを適用します。

 オフセットにはa又はb(aが0のとき)の左上角の処理対象オブジェクトに対する相対位置を指定します。矢印で示した方向が正の方向になります。

 aからdの分割サイズとbとdについて変形後のサイズを入力してください。最初のパネルは必ず処理対象オブジェクトにかかる必要があります。

 対象オブジェクトサイズは参考値です。操作できません。

 設定後OKボタンをクリックすると、実行します。

処理前処理前

処理後処理後

 オリジナルのオブジェクトは残っています。また、位置決めのため、パネルの四角を生成してグループ化してあります。すみませんが、必要に応じて削除してください。作例は色を変えてありますが、コードでは変形再配置以外の処理はしていません。

言語設定

 Corel Drawでは、アジア系、ラテン系、中東系と3つのグループでフォントを別々に設定できます。(Microsoft社のWordも欧文、和文、その他で設定できますよね)。
 これまで1バイト2バイトを入り乱れさせたときにどうもうまくフォントが設定できず、バグだ!と思っていましたが、「言語」の設定が変だったことにようやく気が付きました。
 入力時としては、入力言語をIMEのON/OFFではなく、JPやUSに切り替えれば綺麗に上記設定に従ったフォントで入力されます。しかし、これがJPのままだったりすると、いくら1バイト文字であっても、JP文字として和文フォントが適用されます。
 入力してしまった文字の言語を変更するのは[テキスト]-[修辞ツール]-[言語]で切り替える必要があります。
 全体が同じでない和文、英文入り乱れている場合、一括で変更することはできないようなので、和文フォントと欧文フォントを混在させるのはかなり面倒なようです。
 このコードは、選択したオブジェクト(1つのみ)が段落テキストかアートテキストの場合、その文字を1つずつチェックし、1バイト文字の場合は言語を(US)に、それ以外は(JP)に設定します。
 これで、和文と欧文のフォント設定が反映されるようになります。

 今回はソースを貼り付けた方式で紹介します。(こちらへ)インストール方法はこちらを参照してください。

フォント一括設定

 graphics ML え~さんノビのさんのアイデアで、文字コードを判定して欧文、ひらがな、それ以外でフォントやサイズ、垂直位置を調整した文字組を実現するコードを書きました
 フォントの設定が思ったようにいかず、テキストを全部削除して1文字ずつすべての属性を設定しながら追加するという恐ろしく効率の悪い処理方法を採用しました。
 このテキスト周りの処理、ちょっとややこしすぎです。もっと素直な作りかわかりやすい説明をお願いします。>Corelさん

 今回はソースを貼り付けた方式で紹介します。(こちらへ)インストール方法はこちらを参照してください。

 設定を変更したいアートテキスト又は段落テキストを選択した状態で実行して下さい。


 文字コードに応じたフォント設定ができるようになったので、いよいよ汎用マクロです。

 制御用ダイアログを持っていますので、gmsファイルの圧縮形式です。fonts.LZH(24,238byte)(11/2 更新しました。)

 インストールファイルは、ApplyFonts.gmsです。インストール方法はこちらを参照してください。

 設定を変更したいアートテキスト又は段落テキストを選択した状態で実行します。

 起動時にシステムにインストールされているフォントを取得しダイアログのフォントリストを更新するのに時間がかかります。
スプラッシュ画面

 和文(ひらがな・カタカナ)、和文(全角英数・記号類)、和文(漢字)と欧文の4グループに分けて設定することができます。初期値はこれまでのものです。システムにその初期値のフォントがインストールされていない場合は、リストの1番目が選択されています。そのフォントが和文用かどうかを識別する方法がわからないので、4つのリストは同じものです。設定できる物かどうかは使用者が判断してください。
 垂直移動はフォントサイズの%値というCorelのテキストフォーマットの設定と同じパラメータです。
設定ダイアログ

 設定後実行ボタンをクリックすると、実行します。

処理前処理前
 MS 明朝 12Pを96dpiで保存

処理後処理後
 設定ダイアログの値で実行し、96dpiで保存

11/2 変更事項

テキストフレームの調整

 CorelDRAWは、好きなページ数を好きな並びで面付けをするという結構高等なことができます。通常のプリンタドライバや、ワープロなどでは、せいぜいパンフレット印刷という形で4面を既成の並びでするのが精一杯です。DRAWは、何のプラグインも使わず、印刷時のレイアウトで好きなようにレイアウトできます。そうすると、小さな手帳サイズのハンドブックのようなものを手作りするのも夢ではありません。
 ところが、DTPソフトのような使い方をしようとしても段落テキストへの流し込みだけでは、機能が足りません。具体的にどんな機能が不足しているかというと...

  1.  本文を流し込む領域サイズをマスターページとして定義できない。
  2.  テキスト全部を流し込んで段落テキストを生成するには、何も選択していない状態でテキストを貼り付けるというような操作をすることになるが、この場合、ページサイズのちょっと内側(A4にプレーンテキストをペースとした場合、2.5mm内側になる。)にサイズが固定されてしまい、本文領域としては広すぎる。
  3.  2.以外の方法では、テキストを全部流し込むフレームは自動生成できない。
  4.  フォント設定などをして、余りが出ても無駄なページが残る。/足りなくなっても追加フレームは生成されない。
  5.  本文領域のサイズ変更が他のリンクフレームに反映しない。

という具合です。いくつも書きましたが、根っこは同じ原因です。で、これで頑張ろうとすると、流し込んだり、本文領域のサイズや書体等を変更するたびに眠くなるような単純作業をしないといけません。そこでVBAです。

 次のような機能があります。

 今回はソースを貼り付けた方式で紹介します。(こちらへ)インストール方法はこちらを参照してください。

 サイズ変更の基準になる段落テキスト(フレームリンクの途中のものでも可。この場合、途中から本文サイズを変更することも可能になる。)を選択した状態で実行して下さい。

 実行例のイメージです。上が実行前、下が実行後。図中黄色い部分が選択した状態にする段落フレームで、結果として変わるフレームが赤い部分です。また、これに伴って増減するページをピンクで示しています。

  1.  1ページ目に所定のサイズの段落フレームを設定し、テキスト-テキストの編集-[インポート]で本文を流し込み、実行する。必要ページが追加されて、同じサイズの本文領域がリンク状態で生成される。
    段落テキストの流し込み
  2.  てんでばらばらなリンクフレームで構成されている本文を、1ページ目の段落フレームの位置とサイズに統一する。結果として白紙ページが生まれたらページも消去される。
    段落フレームの統一
  3.  途中から本文領域を変更したくなったら、そのページの段落フレームのサイズ等を変更し、その段落フレームを選択した状態で実行すると、そのフレーム以降のフレームのみが対象に処理が実行される。
    段落フレームサイズの途中からの変更

この文書の先頭に戻る ↑

* * *

PHOTO-PAINTで使おう

調査中

この文書の先頭に戻る ↑

* * *

私の使用環境

Machine
COMPAQ PRESARIO 1928
Celeron Note
128MBメモリ
空きHD容量300MB(やばい)
1024*768 True color(24bit)
OS
Windows 98SE
他インストールアプリ(動作に影響を与えそうな感じのもの)
VB6.0(Runtime)
MS Officeはインストールしていません。以前はWordPerfect Suite 8J、Lotus Super Officeを入れていましたが、アンインストールしてしまい、現在はStarSuiteを使用しています。

この文書の先頭に戻る ↑

* * *

Return to Home