Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2009年05月12日] [更新 2013年11月28日] ワード操作フォームEx
   
ワード操作フォームEx
テストプログラム ReplaceStr
動作確認等 Windows 7 U64(SP1) + Delphi XE(UP1) Pro + Word 2010







文字列の置換メソッドのテスト


文字列の置換関係メソッドのテストプログラムです.コンボボックスでは選択した文字列をブックマークに代入します.


図1
実行画面
  • 右に操作用コントロールを配置
  • 文書の発行日と宛先の文字列を挿入する

リスト1
メインフォームのコード
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

uses ReplaceStrUnit;


{$R *.DFM}

//=============================================================================
//  ワード操作フォームEx(の継承フォーム)をモーダル表示
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
  //起動時に表示する文書名
  plWordFormEx2.wdfFileFullPath := '文字列操作テスト文書.doc';
  plWordFormEx2.ComboBox1.ItemIndex := -1;
  plWordFormEx2.ShowModal;
end;

end.


リスト2
ワード操作フォームEx の (継承フォームの) コード
unit ReplaceStrUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, plWordEx, Buttons, ToolWin, ComCtrls, ExtCtrls, StdCtrls, Menus;

type
  TplWordFormEx2 = class(TplWordFormEx)
    Button1: TButton;
    Button2: TButton;
    ComboBox1: TComboBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure btnFileSaveClick(Sender: TObject);
    procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
      WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  plWordFormEx2: TplWordFormEx2;

implementation

{$R *.dfm}

//=============================================================================
//  指定文字列の置換例
//  テスト文書なので終了後は変更なしに
//
//  ちらつき防止は
//  wdfWordApp.ScreenRefresh;
//  wdfWordApp.ScreenUpdating := True;
//  の組合せよりもLockWindowUpdateの方が効果的なようである,
//=============================================================================
procedure TplWordFormEx2.Button1Click(Sender: TObject);
begin
  //画面更新の停止
  LockWindowUpdate(PanelLeft.Handle);

  wdfReplaceString('文書', '帳票類');

  //画面更新の再開
  LockWindowUpdate(0);

  //保存済みにしてしまう
  wdfWordDoc.Saved := True;
end;

//=============================================================================
//  指定ブックマークの文字列置換例
//  文書にはつきものの日付の場合
//  テスト文書なので終了後は変更なしに
//=============================================================================
procedure TplWordFormEx2.Button2Click(Sender: TObject);
var
  DateStr : String;
begin
  //画面更新の停止
  LockWindowUpdate(PanelLeft.Handle);

  DateStr := FormatDateTime('yyyy"年"m"月"d"日"', Now);
  wdfReplaceBookMark('発行日',DateStr);

  //画面更新の再開
  LockWindowUpdate(0);

  //保存済みにしてしまう
  wdfWordDoc.Saved := True;
end;

//=============================================================================
//  コンボボックスでブックマークの文字列置換
//  wdfWordDoc.Saved := True; にしていないので,終了時に保存するかの確認ダイア
//  ログが表示される(終了前に保存すれば表示しない)
//=============================================================================
procedure TplWordFormEx2.ComboBox1Change(Sender: TObject);
begin
  //画面更新の停止
  LockWindowUpdate(PanelLeft.Handle);

  wdfReplaceBookMark('宛先', ComboBox1.Text);

  //画面更新の再開
  LockWindowUpdate(0);
end;

//=============================================================================
//  コンボボックスはマウスホイールに反応しないようにする
//=============================================================================
procedure TplWordFormEx2.FormMouseWheel(Sender: TObject;
  Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
  var Handled: Boolean);
begin
  if ActiveControl.Handle = ComboBox1.Handle then begin
    Handled := True;
  end;
end;

//=============================================================================
//  文書保存時の処理
//  保存ダイアログ表示前に保存文書名を加工
//=============================================================================
procedure TplWordFormEx2.btnFileSaveClick(Sender: TObject);
var
  S : String;
begin
  S := FormatDateTime('yyyy"年"mm"月"dd"日_"', Now);
  SaveDialog1.FileName := S + '文字列置換テスト文書';

  //継承元のボタンクリックを実行
  inherited;
end;

end.




マウスホイールでのスクロールを無効にする


上のコードでは,TComboBox でのマウスホイールのスクロールを無効にしています.
TComboBox では,ドロップリストを表示したい時だけ項目を選択したいためにそうしています.しかし,上のコードではドロップリストを表示しても,マウスホイールでのスクロールはできません.それを可能にするには以下のようにします.

コントロールの判定をハンドルの値で行う必要はありません.コントロールが識別できればいいので,下のコードでは省略しています.



リスト3
マウスホイールでのスクロールを無効にする
procedure TplWordFormEx2.FormMouseWheel(Sender: TObject;
  Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
  var Handled: Boolean);
begin
  if ActiveControl = ComboBox1 then begin
    Handled := not ComboBox1.DroppedDown;
  end;
end;