LNS001 クリップボード制御

Windowsのクリップボードにアクセスするためのモジュールを追加します。




基本情報

前提スクリプト

なし

拡張タイプ

△ 開発用 (導入するだけでは特に変化しない)


説明

概要

 Windows のクリップボードにアクセスするためのモジュール Clipboard を追加します。
基本的にはクリップボードに文字列を書き込んだり、クリップボードの文字列を読み込んだりするのが目的ですが、VX Ace で編集可能なアクターやイベントといったオブジェクトも、エディタに貼り付けられる形式で書き込むことができます。

◆ メソッド

● Clipboard.get([format])

Clipboard.get(:UNICODETEXT)
format で指定された形式のデータをクリップボードから読み込み、文字列として返します。
  • format には文字列、シンボルまたは整数を指定します。
  • クリップボード形式の解析は基本的に行わないので、使う場合は適宜解析用メソッドを用意してください。
  • このスクリプトでサポートされるのは以下の形式です。
:TEXT (Shift_JIS テキスト)
:UNICODETEXT (ユニコード互換テキスト。format 省略時はこれになる)
:DIB (ビットマップデータ)
VX Ace のエディタ上のデータ(下のメソッド説明を参照)

● Clipboard.set(data[, format[, clear]])

Clipbaord.set("テスト文字列", :UNICODETEXT, true)
クリップボードに文字列 data を形式 format として書き込みます。
  • clear が省略時、または真の場合、クリップボードを一旦消去します。
  • 書き込みの成功時に true、失敗時に false を返します。

● Clipboard.get_bitmap

Clipboard.get_bitmap #=> Bitmap
クリップボードにあるビットマップデータ(DIB)を読み込み、Bitmapオブジェクトとして返します。
  • 取得に失敗した場合は nil が返ります。

● Clipboard.set_bitmap(bitmap)

Clipboard.set_bitmap(Cache.face("Actor1"))
引数で指定されたBitmapオブジェクトを、ペイントソフトなどに直接貼り付け可能なビットマップデータ(DIB)に変換してクリップボードへ書き込みます。
  • 書き込みの成功時に true、失敗時に false を返します。

● Clipboard.clear

クリップボードを消去します。成功時に true、失敗時に false を返します。

● Clipboard.is_text_format?(format)

format が文字列形式(:TEXT, :OEMTEXT, :UNICODETEXT, :DSPTEXT)の場合に true を返します。それ以外の場合には false を返します。

● Clipboard.register_format(name)

Clipboard.register_format("VXAce ACTOR")
文字列 name をクリップボード形式としてレジストリに登録します。以降はこの名前をクリップボード形式として読み書きに使えます。
  • 登録に成功すると、形式の識別番号として0xC000~0xFFFFの値が返ります。
  • すでに登録済みの形式の場合、新たな登録は行われず、登録済みの識別番号が返ります。

● Clipboard.enum_formats

レジストリに登録済みのクリップボード形式を列挙します。
  • [識別番号, 形式の名前] の配列が返ります。

● Clipboard.set_data(obj1[, obj2, ...])

Clipboard.set_data($data_actors[1], $data_enemies[1])
引数として渡されたRPGオブジェクト($data_actors[1]など)をエディタに貼り付け可能な状態でクリップボードにコピー書き込みます。
  • 書き込むオブジェクトは複数指定が可能ですが、マルチコピーに対応していない場合は最後の1つのみ書き込まれます。

  • マルチコピー対応クラス
    • RPG::Map::Encounter(マップのエンカウントリスト)
    • RPG::EventCommand(イベントコマンド)
    • RPG::MoveCommand(移動ルートのコマンド)
    • RPG::BaseItem::Feature(特徴)
    • RPG::UsableItem::Effect(使用効果)
    • エディタ上で「マルチコピー」が選択できるオブジェクト(下記)
      • RPG::Actor(アクター)
      • RPG::Class(職業)
        • RPG::Class::Learning(習得スキル)
      • RPG::Skill(スキル)
      • RPG::Item(アイテム)
      • RPG::Weapon(武器)
      • RPG::Armor(防具)
      • RPG::Enemy(敵キャラ)
        • RPG::Enemy::Action(エネミーの戦闘行動)
      • RPG::Troop(敵グループ)
      • RPG::State(ステート)
      • RPG::Animation(アニメーション)
      • RPG::Tileset(タイルセット)
      • RPG::CommonEvent(コモンイベント)

  • マルチコピー非対応クラス
    • RPG::Event、RPG::Event::Page(マップイベント、及びイベントの各ページ)
    • Troop::Page(敵グループに設定されたバトルイベントの各ページ)
    • Animation::Frame(アニメフレーム)、Animation::Timing(SEとフラッシュ)

  • 上記のどれにも該当しないデータは書き込まれません。
  • マップデータ、スクリプト、アニメーションのセルデータについてはそれぞれ別のメソッドを使う必要があります。

● Clipboard.get_data([type])

Clipboard.get_data(RPG::Actor)
エディタ上でコピーしたデータのうち、type に該当するクラスのものを返します。
  • type を省略、または nil を指定した場合、クリップボードにある VX Ace のデータを全て配列にして返します。
  • 上記「マルチコピー対応」のクラスは配列で返ってくることに注意してください。

● Clipboard.set_map(map_id)

Clipboard.set_map(1)
map_id で指定された番号のマップをエディタに貼り付け可能な状態でクリップボードに書き込みます。
  • 存在しない番号が指定された場合は何もしません。

● Clipboard.get_map

クリップボード上のマップデータを [マップ本体, マップ情報] の配列で返します。

● Clipboard.set_script(name, script[, id])

Clipboard.set_script("test", "p test\n")
スクリプト名 name、本体 script のスクリプトをエディタに貼り付け可能な状態でクリップボードに書き込みます。


更新履歴

  • 2020/12/28 新版公開(機能は旧版から変化なし)



  • こんにちは。不具合を発見したのでご報告いたします。 LNS000 組み込み拡張 LNS010 Input拡張 LNS100 プリセット拡張 LNS102 マウス操作 LNS140 マップ/キャラ拡張 の5つを導入した状態で、マップ画面でマウスカーソルをゲームウインドウの外側で大きく動かすなどすると、「 スクリプト 'LNS 140 マップ/キャラ拡張' の 980 行目で IndexError が発生しました。 index -1 too small for array; minimum: 0 」というエラーメッセージが表示され、ゲームが終了してしまいます。 スクリプトは全て最新で、内容は改変していません。 -- 2022-07-26 01:29:40
  • 確認が遅れましたが、対応修正しました。正確には「既に対応済みであったがアップロードを忘れていた」という状態でした…… -- 2022-11-01 15:39:07
  • 対応ありがとうございます!しかし LNS000, 010, 100, 102, 140 の5つを入れた状態で起動直後に「スクリプト 'LNS140 マップ/キャラ拡張' の 1719 行目で NameError が発生しました。 undefined method 'lns102_dash?' for class 'Game_Player'」と表示され、終了します。 -- 2022-12-24 16:39:35
コメント:

すべてのコメントを見る
最終更新:2020年12月28日 21:40