編集ボタンから別ウインドウを開いて編集保存する – FlyWithLua

2023年3月29日

Editボタンから右のウインドウを開き、インプットでテキスト編集、Closeで保存して閉じる。1番目のウインドウは開いたまま。そのウインドウには編集したテキストがリアルタイムに表示される。

整数だけを扱うcreate_dataref_tableのカスタムdatarefを使う

カスタムdatarefを使って2番目のウインドウを開け閉めすることができる。ここでのポイントは31行目の「and hide == false」を必ずここにも入れるということ。これを参考にしたスクリプトにはこれが無く、動きはするが不安定で開いたり、開かなったりする現象が出てので、これを入れたら問題が解決した。

--カスタムdatarefを作成、"Int"がなので整数のみを扱う。
local edit_window = create_dataref_table("FlyWithLua/edit_window", "Int")
local edit_window = 0 -- 初期設定のdataref値

local hide = false    -- 初期設定
local Input_text = ""
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
button_wnd = float_wnd_create(250, 200, 1, true)
float_wnd_set_title(button_wnd, "Edit") --最初のウインドウタイトル
float_wnd_set_imgui_builder(button_wnd, "button_window")
float_wnd_set_onclick(button_wnd, "button_on_click")

-- 最初に表示されるメインウインドウ、隠さない設定。
-- button_windowをビルド、最初に開くウインドウ、Editボタンを作成、出力テキストも表示。
function button_window(button_wnd, x, y)
  if imgui.Button("Edit", 100, 30) then
    edit_window = 1 -- ここでdataref値「1」に変更すると、2番目のウインドウを表示することになる。
  end
  imgui.TextUnformatted(Input_text) --出力テキストも表示.
end
--これが無いとウインドウをクリックするとEditボタン等の内容が表示されなくなる。
function button_on_click(button_wnd, x, y, state)
end
----------------------------------------------------------------------------------------------------------------------
-- Editボタンで開くウインドウ(開くウインドウの作成と、そのウインドウを閉じる設定になる)
----------------------------------------------------------------------------------------------------------------------
-- Editボタンにより、開け閉めするウインドウ
-- 上のEditボタンクリックでdatarefが「1」になり、hideは初期設定で「false」こなのでウインドウをビルドして表示することになる。
function edit_show_wnd()
  if edit_window == 1 and hide == false then                 --1とfalseならウインドウを作成して表示する。
    edit_wnd = float_wnd_create(250, 150, 1, true)              -- ここで最初のウインドウの作成
    float_wnd_set_title(edit_wnd, "Show Window-1")              --2番目のウインドウタイトル
    float_wnd_set_position(edit_wnd, 100, 300)
    float_wnd_set_imgui_builder(edit_wnd, "ishwwd_on_build_1")  -- ここでウインドウ内にボタン等のアイテムを作成する。
    hide = true    --これでウインド内が有効になり使えるようになる。falseならウインドウ内をクリックしても反応しないのでCloseボタンを使えない。
  end
end
do_every_draw("edit_show_wnd()")

-- ビルドされたウインドウ内に、Closeボタンとテキストを表示する。
function ishwwd_on_build_1(edit_wnd, x, y)
  if imgui.Button("Close", 100, 50) then
    edit_window = 0 -- ボタンを押したときdatarefを「0」にして、このウインドウを閉じる
  end
  local changed, Input_text_new = imgui.InputText("InputA", Input_text,18)
    if changed then 
        Input_text = Input_text_new 
    end
end
edit_wnd = nil -- 無くても動作する。メモリ上のウインドウを空にする(これにより完全に空にする)

-- Closeボタンにより、datarefが「0」になり2番目ウインドウが非表示になる。
-- ポイント、ここにも「and hide == true」を入れること。これを入れないと開け閉めが不安定になる。
function edit_hide_1_wnd()
  if edit_window == 0 and hide == true then
    if edit_wnd then
      float_wnd_destroy(edit_wnd) --ウインドウを隠す関数
      hide = false                --これでウインド内が無効になり使えなくする。
    end
  end
end
do_every_draw("edit_hide_1_wnd()")
-- do_every_drawはLuaコードを1秒ごとに計算する。do_every_draw()よりはフレームレートに影響がすくない。

define_shared_DataRefのdatarefを使う

このdatarafを登録すると数値が変わらない、下の、ボタンをクリックした状態ならdatarefは「1」になるはずだが「0」のままだが2番めのウインドウは問題無く表示される。バグ?

これを使う場合は2段階の設定が必要。

define_shared_DataRef(“FlyWithLua/Show_hide_window”, “Int”) –カスタムdatarefを作成
dataref(“ShowHideWindow”, “FlyWithLua/Show_hide_window”, “writable”)–実際の登録

-- カスタムdatarefを作成して書き込み可能に設定、初期は「0」に設定
define_shared_DataRef("FlyWithLua/Show_hide_window", "Int")    --datarefを作成登録(X-Planeの再起動が必要)
dataref("ShowHideWindow", "FlyWithLua/Show_hide_window", "writable") --書き込み可能に設定

local ShowHideWindow = 0;	-- 初期設定のdataref値。
local hide = false  -- 隠す場合はfalseで設定
local Input_A_text = ""
---------------------------------------------------------------------------------------------------
-- iメインウインドウ、最初から表示し続け、隠さない。
button_wnd = float_wnd_create(350, 150, 1, true)
float_wnd_set_title(button_wnd, "imgui Button")--最初のウインドウタイトル
float_wnd_set_imgui_builder(button_wnd, "button_demo")
float_wnd_set_onclick(button_wnd, "button_on_click")
float_wnd_set_onclose(button_wnd, "closed_demo")  --これを入れるとウインドウの赤丸を押すとX-Planeがクラッシュする。

--最初に開くウインドウ
function button_demo(button_wnd, x, y)
	if imgui.Button("Edit", 100, 50) then
        ShowHideWindow = 1  -- dataref値「1」は2番目のウインドウを表示
	end
    imgui.TextUnformatted(Input_A_text)
end
function button_on_click(button_wnd, x, y, state) end
--------------------------------------------------------------------------------------
-- 2番目の開け閉めするウインドウ
-- datarefが「1」でウインドウ作成表示、「0」で非表示にする。
function ishwwd_show_wnd()
	if ShowHideWindow == 1 and hide == false then	--1とfalseならウインドウを作成して表示する。
	    ishwwd_wnd = float_wnd_create(250, 150, 1, true)
    	float_wnd_set_title(ishwwd_wnd, "Show Window-1")	--2番目のウインドウタイトル
        float_wnd_set_position(ishwwd_wnd, 100, 300)
    	float_wnd_set_imgui_builder(ishwwd_wnd, "ishwwd_on_build")	-- ウインドウの作成
		hide = true --これでウインド内が有効になり使えるようになる。falseならウインドウ内が使えなくなる。
	end
end
-- 下の条件になったとき、ウインドウを作成して、テキストを表示する。
function ishwwd_on_build(ishwwd_wnd, x, y)
	if imgui.Button("Close", 100, 50) then
        ShowHideWindow = 0  -- ボタンを押したときdatarefを「0」にして、このウインドウを閉じる
	end
	local changed, Input_A_text_new = imgui.InputText("InputA", Input_A_text,18)
    if changed then 
        Input_A_text = Input_A_text_new 
    end
end
ishwwd_wnd = nil	-- ウインドウは空にする(これにより完全に空にする)
do_every_draw("ishwwd_show_wnd()")

-- Closeボタンにより、datarefが「0」になり2番目ウインドウが非表示になる。
function ishwwd_hide_wnd()
	if ShowHideWindow == 0 and hide == true then
	    if ishwwd_wnd then
    	    float_wnd_destroy(ishwwd_wnd)--ウインドウを隠す
			hide = false--これでウインド内が無効になり使えなくする。しかし非表示なので無くても問題は無い。
    	end
	end
end
do_every_draw("ishwwd_hide_wnd()")
-- do_oftenはLuaコードを1秒ごとに計算する。do_every_draw()よりはフレームレートに影響がすくない。

この関数を使用すると、指定されたタイプの DataRef が存在しない場合に作成される。 存在し、タイプが異なる場合は、エラー メッセージが表示される。 同じタイプで存在する場合、このコマンドは何もしません。 shared(共有)DataRef は、他のプラグインとのやり取りに役立ちます。

つまり、3行目が本命のdatarefになるのだが、この3行目のdatarefのタイプをこの「define_shared_DataRef」で指定するということになる。

define_shared_DataRef(“DataRef name”, “DataRef type”)
a)DataRef name= DataRef の名前。 DataRef のリストを見ると追加されているはず、X-Planeの再起動により再読み込みが必要かも。
b)DataRef type= DataRef のタイプ。この型は文字列引数で、
“Int”、”Float”、”IntArray”、”FloatArray”、”Double”、または “Data” のいずれかを使用する。
その後、下のdatarefでその”FlyWithLua/Show_hide_window”を読み込んでいることにる。

このカスタムdatarefの作成はX-Planeを再起動してdatarefを読み込み直す必要がある。

define_shared_DataRefで複数のEditボタンを作成

Edit_1ボタンをクリックして編集ウインドウを開いた状態。Edit_2も同じ状態で開く。

これもdaraef値が変化しない「0」のまま、それでも何故か動作する。

-- カスタムdatarefを作成して書き込み可能に設定、初期は「0」に設定
define_shared_DataRef("FlyWithLua/edit_window_1", "Int")            --datarefを整数で作成登録(X-Planeの再起動が必要)
dataref("Edit_Window_1", "FlyWithLua/edit_window_1", "writable") --実際に使用するdataref,書き込み可能に設定
local Edit_Window_1 = 0;	-- 初期設定のdataref値。
local hide_1 = false  -- 隠す場合はfalseで設定
local Input_text_1 = ""

define_shared_DataRef("FlyWithLua/edit_window_2", "Int")
dataref("Edit_Window_2", "FlyWithLua/edit_window_2", "writable")
local Edit_Window_2 = 0;
local hide_2 = false
local Input_text_2 = ""
---------------------------------------------------------------------------------------------------
-- メインウインドウ、最初から表示し続け、隠さない。
button_wnd_1 = float_wnd_create(350, 200, 1, true)
float_wnd_set_title(button_wnd_1, "Edit_1") --最初のウインドウタイトル
float_wnd_set_imgui_builder(button_wnd_1, "button_demo_1")
float_wnd_set_onclick(button_wnd_1, "button_on_click")
float_wnd_set_onclose(button_wnd_1, "closed_demo") --これを入れるとウインドウの赤丸を押すとX-Planeがクラッシュする。

-- button_demo_1をビルド、最初に開くウインドウ、Edit_1、Edit_2のボタンを作成
function button_demo_1(button_wnd_1, x, y)
  if imgui.Button("Edit_1", 100, 50) then
    Edit_Window_1 = 1     -- dataref値「1」はEdit_1ボタンクリックで2番目のウインドウを表示
  end
  imgui.TextUnformatted(Input_text_1)

  if imgui.Button("Edit_2", 100, 50) then
    Edit_Window_2 = 1
  end
  imgui.TextUnformatted(Input_text_2)
end

function button_on_click(button_wnd_1, x, y, state)
end
--------------------------------------------------------------------------------------
-- Edit_1の開け閉めするウインドウ
-- datarefが「1」でウインドウ作成表示、「0」で非表示にする。
function edit_show_wnd_1()
  if Edit_Window_1 == 1 and hide_1 == false then                 --1とfalseならウインドウを作成して表示する。
    edit_wnd_1 = float_wnd_create(250, 150, 1, true)
    float_wnd_set_title(edit_wnd_1, "Show Window-1")              --2番目のウインドウタイトル
    float_wnd_set_position(edit_wnd_1, 100, 300)
    float_wnd_set_imgui_builder(edit_wnd_1, "ishwwd_on_build_1")  -- ウインドウの作成
    hide_1 = true                              --これでウインド内が有効になり使えるようになる。falseならウインドウ内が使えなくなる。
  end
end

-- Edit_1、下の条件になったとき、ウインドウを作成して、テキストを表示する。
function ishwwd_on_build_1(edit_wnd_1, x, y)
  if imgui.Button("Close", 100, 50) then
    Edit_Window_1 = 0     -- ボタンを押したときdatarefを「0」にして、このウインドウを閉じる
  end
  local changed, Input_text_1_new = imgui.InputText("InputA", Input_text_1, 18)
  if changed then
    Input_text_1 = Input_text_1_new
  end
end
edit_wnd_1 = nil -- ウインドウは空にする(これにより完全に空にする)
do_every_draw("edit_show_wnd_1()")

-- Edit_1、Closeボタンにより、datarefが「0」になり2番目ウインドウが非表示になる。
function edit_hide_1_wnd()
  if Edit_Window_1 == 0 and hide_1 == true then
    if edit_wnd_1 then
      float_wnd_destroy(edit_wnd_1)    --ウインドウを隠す
      hide_1 = false                     --これでウインド内が無効になり使えなくする。しかし非表示なので無くても問題は無い。
    end
  end
end
do_every_draw("edit_hide_1_wnd()")
-- do_oftenはLuaコードを1秒ごとに計算する。do_every_draw()よりはフレームレートに影響がすくない。
--------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
-- 2番目の開け閉めするウインドウ
-- datarefが「2」でウインドウ作成表示、「0」で非表示にする。
function edit_show_wnd_2()
	if Edit_Window_2 == 1 and hide_2 == false then	--2とfalseならウインドウを作成して表示する。
	    edit_wnd_2 = float_wnd_create(250, 250, 1, true)
    	float_wnd_set_title(edit_wnd_2, "Show Window-2")	--2番目のウインドウタイトル
        float_wnd_set_position(edit_wnd_2, 200, 300)
    	float_wnd_set_imgui_builder(edit_wnd_2, "edit_on_build_2")	-- ウインドウの作成
		hide_2 = true --これでウインド内が有効になり使えるようになる。falseならウインドウ内が使えなくなる。
	end
end
-- 下の条件になったとき、ウインドウを作成して、テキストを表示する。
function edit_on_build_2(edit_wnd_2, x, y)
	if imgui.Button("Close", 200, 50) then
        Edit_Window_2 = 0  -- ボタンを押したときdatarefを「0」にして、このウインドウを閉じる
	end
	local changed, Input_text_2_new = imgui.InputText("InputA", Input_text_2,28)
    if changed then 
        Input_text_2 = Input_text_2_new 
    end
end
edit_wnd_2 = nil	-- ウインドウは空にする(これにより完全に空にする)
do_every_draw("edit_show_wnd_2()")

-- Closeボタンにより、datarefが「0」になり2番目ウインドウが非表示になる。
function edit_hide_wnd_2()
	if Edit_Window_2 == 0 and hide_2 == true then
	    if edit_wnd_2 then
    	    float_wnd_destroy(edit_wnd_2)--ウインドウを隠す
			hide_2 = false--これでウインド内が無効になり使えなくする。しかし非表示なので無くても問題は無い。
    	end
	end
end
do_every_draw("edit_hide_wnd_2()")
-- do_oftenはLuaコードを1秒ごとに計算する。do_every_draw()よりはフレームレートに影響がすくない。

define_shared_DataRefで9つのEditボタンの作成

define_shared_DataRefを使ってdatarefを登録すると値が変化しない、バグなのか、変化はしないが動作はする。ということは「DataRefTool」のバグなのかもしれない。
いずれにしても問題なく動作はする。

-- カスタムdatarefを作成して書き込み可能に設定、初期は「0」に設定
define_shared_DataRef("FlyWithLua/edit_window_1", "Int")         --datarefを整数で作成登録(X-Planeの再起動が必要)
dataref("Edit_Window_1", "FlyWithLua/edit_window_1", "writable") --実際に使用するdataref,書き込み可能に設定
local Edit_Window_1 = 0;                                         -- 初期設定のdataref値。
local hide_1 = false                                             -- 隠す場合はfalseで設定
local Input_text_1 = ""
define_shared_DataRef("FlyWithLua/edit_window_2", "Int")
dataref("Edit_Window_2", "FlyWithLua/edit_window_2", "writable")
local Edit_Window_2 = 0;
local hide_2 = false
local Input_text_2 = ""
define_shared_DataRef("FlyWithLua/edit_window_3", "Int")
dataref("Edit_Window_3", "FlyWithLua/edit_window_3", "writable")
local Edit_Window_3 = 0;
local hide_3 = false
local Input_text_3 = ""
define_shared_DataRef("FlyWithLua/edit_window_4", "Int")
dataref("Edit_Window_4", "FlyWithLua/edit_window_4", "writable")
local Edit_Window_4 = 0;
local hide_4 = false
local Input_text_4 = ""
define_shared_DataRef("FlyWithLua/edit_window_5", "Int")
dataref("Edit_Window_5", "FlyWithLua/edit_window_5", "writable")
local Edit_Window_5 = 0;
local hide_5 = false
local Input_text_5 = ""
define_shared_DataRef("FlyWithLua/edit_window_6", "Int")
dataref("Edit_Window_6", "FlyWithLua/edit_window_6", "writable")
local Edit_Window_6 = 0;
local hide_6 = false
local Input_text_6 = ""
define_shared_DataRef("FlyWithLua/edit_window_7", "Int")
dataref("Edit_Window_7", "FlyWithLua/edit_window_7", "writable")
local Edit_Window_7 = 0;
local hide_7 = false
local Input_text_7 = ""
define_shared_DataRef("FlyWithLua/edit_window_8", "Int")
dataref("Edit_Window_8", "FlyWithLua/edit_window_8", "writable")
local Edit_Window_8 = 0;
local hide_8 = false
local Input_text_8 = ""
define_shared_DataRef("FlyWithLua/edit_window_9", "Int")
dataref("Edit_Window_9", "FlyWithLua/edit_window_9", "writable")
local Edit_Window_9 = 0;
local hide_9 = false
local Input_text_9 = ""
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
-- 最初に表示されるメインウインドウ、隠さない。
button_wnd_1 = float_wnd_create(300, 500, 1, true)
float_wnd_set_title(button_wnd_1, "Edit_1") --最初のウインドウタイトル
float_wnd_set_imgui_builder(button_wnd_1, "button_demo_1")
float_wnd_set_onclick(button_wnd_1, "button_on_click")
float_wnd_set_onclose(button_wnd_1, "closed_demo") --これを入れるとウインドウの赤丸を押すとX-Planeがクラッシュする。

-- button_demo_1をビルド、最初に開くウインドウ、Edit_1、Edit_2のボタンを作成
function button_demo_1(button_wnd_1, x, y)
  if imgui.Button("Edit_1", 100, 30) then
    Edit_Window_1 = 1 -- dataref値「1」はEdit_1ボタンクリックで2番目のウインドウを表示
  end
  imgui.TextUnformatted(Input_text_1)

  if imgui.Button("Edit_2", 100, 30) then
    Edit_Window_2 = 1
  end
  imgui.TextUnformatted(Input_text_2)

  if imgui.Button("Edit_3", 100, 30) then
    Edit_Window_3 = 1
  end
  imgui.TextUnformatted(Input_text_3)

  if imgui.Button("Edit_4", 100, 30) then
    Edit_Window_4 = 1
  end
  imgui.TextUnformatted(Input_text_4)

  if imgui.Button("Edit_5", 100, 30) then
    Edit_Window_5 = 1
  end
  imgui.TextUnformatted(Input_text_5)

  if imgui.Button("Edit_6", 100, 30) then
    Edit_Window_6 = 1
  end
  imgui.TextUnformatted(Input_text_6)

  if imgui.Button("Edit_7", 100, 30) then
    Edit_Window_7 = 1
  end
  imgui.TextUnformatted(Input_text_7)

  if imgui.Button("Edit_8", 100, 30) then
    Edit_Window_8 = 1
  end
  imgui.TextUnformatted(Input_text_8)

  if imgui.Button("Edit_9", 100, 30) then
    Edit_Window_9 = 1
  end
  imgui.TextUnformatted(Input_text_9)
end

function button_on_click(button_wnd_1, x, y, state)
end

----------------------------------------------------------------------------------------------------------------------
-- Edit-1ボタンで開くウインドウ(ここからはウインドウを個別に作成する必要がある)
----------------------------------------------------------------------------------------------------------------------
-- Edit_1の開け閉めするウインドウ
-- Edit_Window_1のdatarefが「1」でウインドウをビルドして表示する。
function edit_show_wnd_1()
  if Edit_Window_1 == 1 and hide_1 == false then                 --1とfalseならウインドウを作成して表示する。
    edit_wnd_1 = float_wnd_create(250, 150, 1, true)
    float_wnd_set_title(edit_wnd_1, "Show Window-1")             --2番目のウインドウタイトル
    float_wnd_set_position(edit_wnd_1, 100, 300)
    float_wnd_set_imgui_builder(edit_wnd_1, "ishwwd_on_build_1") -- ウインドウの作成
    hide_1 = true                                                --これでウインド内が有効になり使えるようになる。falseならウインドウ内が使えなくなる。
  end
end
do_every_draw("edit_show_wnd_1()")

-- ビルドされたウインドウ内に、Closeボタンとテキストを表示する。
function ishwwd_on_build_1(edit_wnd_1, x, y)
  if imgui.Button("Close", 100, 50) then
    Edit_Window_1 = 0 -- ボタンを押したときdatarefを「0」にして、このウインドウを閉じる
  end
  local changed, Input_text_1_new = imgui.InputText("InputA", Input_text_1, 18)
  if changed then
    Input_text_1 = Input_text_1_new
  end
end
edit_wnd_1 = nil -- ウインドウは空にする(これにより完全に空にする)

-- Edit_1、Closeボタンにより、datarefが「0」になり2番目ウインドウが非表示になる。
function edit_hide_1_wnd()
  if Edit_Window_1 == 0 and hide_1 == true then
    if edit_wnd_1 then
      float_wnd_destroy(edit_wnd_1) --ウインドウを隠す
      hide_1 = false                --これでウインド内が無効になり使えなくする。しかし非表示なので無くても問題は無い。
    end
  end
end
do_every_draw("edit_hide_1_wnd()")
-- do_oftenはLuaコードを1秒ごとに計算する。do_every_draw()よりはフレームレートに影響がすくない。
----------------------------------------------------------------------------------------------------------------------
-- Edit-2ボタンで開くウインドウ
----------------------------------------------------------------------------------------------------------------------
-- 2番目の開け閉めするウインドウ
-- datarefが「2」でウインドウ作成表示、「0」で非表示にする。
function edit_show_wnd_2()
  if Edit_Window_2 == 1 and hide_2 == false then               --2とfalseならウインドウを作成して表示する。
    edit_wnd_2 = float_wnd_create(250, 150, 1, true)
    float_wnd_set_title(edit_wnd_2, "Show Window-2")           --2番目のウインドウタイトル
    float_wnd_set_position(edit_wnd_2, 100, 300)
    float_wnd_set_imgui_builder(edit_wnd_2, "edit_on_build_2") -- ウインドウの作成
    hide_2 = true                                              --これでウインド内が有効になり使えるようになる。falseならウインドウ内が使えなくなる。
  end
end

do_every_draw("edit_show_wnd_2()")

-- 下の条件になったとき、ウインドウを作成して、テキストを表示する。
function edit_on_build_2(edit_wnd_2, x, y)
  if imgui.Button("Close", 200, 50) then
    Edit_Window_2 = 0 -- ボタンを押したときdatarefを「0」にして、このウインドウを閉じる
  end
  local changed, Input_text_2_new = imgui.InputText("InputA", Input_text_2, 18)
  if changed then
    Input_text_2 = Input_text_2_new
  end
end

edit_wnd_2 = nil -- ウインドウは空にする(これにより完全に空にする)

-- Closeボタンにより、datarefが「0」になり2番目ウインドウが非表示になる。
function edit_hide_wnd_2()
  if Edit_Window_2 == 0 and hide_2 == true then
    if edit_wnd_2 then
      float_wnd_destroy(edit_wnd_2) --ウインドウを隠す
      hide_2 = false                --これでウインド内が無効になり使えなくする。しかし非表示なので無くても問題は無い。
    end
  end
end

do_every_draw("edit_hide_wnd_2()")
-- do_oftenはLuaコードを1秒ごとに計算する。do_every_draw()よりはフレームレートに影響がすくない。
----------------------------------------------------------------------------------------------------------------------
-- Edit-3ボタンで開くウインドウ
----------------------------------------------------------------------------------------------------------------------
-- 3番目の開け閉めするウインドウ
-- datarefが「3」でウインドウ作成表示、「0」で非表示にする。
function edit_show_wnd_3()
  if Edit_Window_3 == 1 and hide_3 == false then              --3とfalseならウインドウを作成して表示する。
    edit_wnd_3 = float_wnd_create(250, 150, 1, true)
    float_wnd_set_title(edit_wnd_3, "Show Window-3")          --3番目のウインドウタイトル
    float_wnd_set_position(edit_wnd_3, 100, 300)
    float_wnd_set_imgui_builder(edit_wnd_3, "edit_on_build_3") -- ウインドウの作成
    hide_3 = true                                             --これでウインド内が有効になり使えるようになる。falseならウインドウ内が使えなくなる。
  end
end

do_every_draw("edit_show_wnd_3()")

-- 下の条件になったとき、ウインドウを作成して、テキストを表示する。
function edit_on_build_3(edit_wnd_3, x, y)
  if imgui.Button("Close", 200, 50) then
    Edit_Window_3 = 0 -- ボタンを押したときdatarefを「0」にして、このウインドウを閉じる
  end
  local changed, Input_text_3_new = imgui.InputText("InputA", Input_text_3, 18)
  if changed then
    Input_text_3 = Input_text_3_new
  end
end

edit_wnd_3 = nil   -- ウインドウは空にする(これにより完全に空にする)

-- Closeボタンにより、datarefが「0」になり3番目ウインドウが非表示になる。
function edit_hide_wnd_3()
  if Edit_Window_3 == 0 and hide_3 == true then
    if edit_wnd_3 then
      float_wnd_destroy(edit_wnd_3) --ウインドウを隠す
      hide_3 = false            --これでウインド内が無効になり使えなくする。しかし非表示なので無くても問題は無い。
    end
  end
end

do_every_draw("edit_hide_wnd_3()")
----------------------------------------------------------------------------------------------------------------------
-- Edit-4ボタンで開くウインドウ
----------------------------------------------------------------------------------------------------------------------
-- 4番目の開け閉めするウインドウ
-- datarefが「4」でウインドウ作成表示、「0」で非表示にする。
function edit_show_wnd_4()
  if Edit_Window_4 == 1 and hide_4 == false then              --4とfalseならウインドウを作成して表示する。
    edit_wnd_4 = float_wnd_create(250, 150, 1, true)
    float_wnd_set_title(edit_wnd_4, "Show Window-4")          --4番目のウインドウタイトル
    float_wnd_set_position(edit_wnd_4, 100, 400)
    float_wnd_set_imgui_builder(edit_wnd_4, "edit_on_build_4") -- ウインドウの作成
    hide_4 = true                                             --これでウインド内が有効になり使えるようになる。falseならウインドウ内が使えなくなる。
  end
end

do_every_draw("edit_show_wnd_4()")

-- 下の条件になったとき、ウインドウを作成して、テキストを表示する。
function edit_on_build_4(edit_wnd_4, x, y)
  if imgui.Button("Close", 200, 50) then
    Edit_Window_4 = 0 -- ボタンを押したときdatarefを「0」にして、このウインドウを閉じる
  end
  local changed, Input_text_4_new = imgui.InputText("InputA", Input_text_4, 18)
  if changed then
    Input_text_4 = Input_text_4_new
  end
end

edit_wnd_4 = nil   -- ウインドウは空にする(これにより完全に空にする)

-- Closeボタンにより、datarefが「0」になり4番目ウインドウが非表示になる。
function edit_hide_wnd_4()
  if Edit_Window_4 == 0 and hide_4 == true then
    if edit_wnd_4 then
      float_wnd_destroy(edit_wnd_4) --ウインドウを隠す
      hide_4 = false            --これでウインド内が無効になり使えなくする。しかし非表示なので無くても問題は無い。
    end
  end
end

do_every_draw("edit_hide_wnd_4()")

----------------------------------------------------------------------------------------------------------------------
-- Edit-5ボタンで開くウインドウ
----------------------------------------------------------------------------------------------------------------------
-- 5番目の開け閉めするウインドウ
-- datarefが「5」でウインドウ作成表示、「0」で非表示にする。
function edit_show_wnd_5()
  if Edit_Window_5 == 1 and hide_5 == false then              --5とfalseならウインドウを作成して表示する。
    edit_wnd_5 = float_wnd_create(250, 150, 1, true)
    float_wnd_set_title(edit_wnd_5, "Show Window-5")          --5番目のウインドウタイトル
    float_wnd_set_position(edit_wnd_5, 100, 400)
    float_wnd_set_imgui_builder(edit_wnd_5, "edit_on_build_5") -- ウインドウの作成
    hide_5 = true                                             --これでウインド内が有効になり使えるようになる。falseならウインドウ内が使えなくなる。
  end
end

do_every_draw("edit_show_wnd_5()")

-- 下の条件になったとき、ウインドウを作成して、テキストを表示する。
function edit_on_build_5(edit_wnd_5, x, y)
  if imgui.Button("Close", 200, 50) then
    Edit_Window_5 = 0 -- ボタンを押したときdatarefを「0」にして、このウインドウを閉じる
  end
  local changed, Input_text_5_new = imgui.InputText("InputA", Input_text_5, 15)
  if changed then
    Input_text_5 = Input_text_5_new
  end
end

edit_wnd_5 = nil   -- ウインドウは空にする(これにより完全に空にする)

-- Closeボタンにより、datarefが「0」になり5番目ウインドウが非表示になる。
function edit_hide_wnd_5()
  if Edit_Window_5 == 0 and hide_5 == true then
    if edit_wnd_5 then
      float_wnd_destroy(edit_wnd_5) --ウインドウを隠す
      hide_5 = false            --これでウインド内が無効になり使えなくする。しかし非表示なので無くても問題は無い。
    end
  end
end

do_every_draw("edit_hide_wnd_5()")
----------------------------------------------------------------------------------------------------------------------
-- Edit-6ボタンで開くウインドウ
----------------------------------------------------------------------------------------------------------------------
-- 6番目の開け閉めするウインドウ
-- datarefが「6」でウインドウ作成表示、「0」で非表示にする。
function edit_show_wnd_6()
  if Edit_Window_6 == 1 and hide_6 == false then              --6とfalseならウインドウを作成して表示する。
    edit_wnd_6 = float_wnd_create(250, 150, 1, true)
    float_wnd_set_title(edit_wnd_6, "Show Window-6")          --6番目のウインドウタイトル
    float_wnd_set_position(edit_wnd_6, 100, 400)
    float_wnd_set_imgui_builder(edit_wnd_6, "edit_on_build_6") -- ウインドウの作成
    hide_6 = true                                             --これでウインド内が有効になり使えるようになる。falseならウインドウ内が使えなくなる。
  end
end

do_every_draw("edit_show_wnd_6()")

-- 下の条件になったとき、ウインドウを作成して、テキストを表示する。
function edit_on_build_6(edit_wnd_6, x, y)
  if imgui.Button("Close", 200, 50) then
    Edit_Window_6 = 0 -- ボタンを押したときdatarefを「0」にして、このウインドウを閉じる
  end
  local changed, Input_text_6_new = imgui.InputText("InputA", Input_text_6, 18)
  if changed then
    Input_text_6 = Input_text_6_new
  end
end

edit_wnd_6 = nil   -- ウインドウは空にする(これにより完全に空にする)

-- Closeボタンにより、datarefが「0」になり6番目ウインドウが非表示になる。
function edit_hide_wnd_6()
  if Edit_Window_6 == 0 and hide_6 == true then
    if edit_wnd_6 then
      float_wnd_destroy(edit_wnd_6) --ウインドウを隠す
      hide_6 = false            --これでウインド内が無効になり使えなくする。しかし非表示なので無くても問題は無い。
    end
  end
end

do_every_draw("edit_hide_wnd_6()")
----------------------------------------------------------------------------------------------------------------------
-- Edit-7ボタンで開くウインドウ
----------------------------------------------------------------------------------------------------------------------
-- 7番目の開け閉めするウインドウ
-- datarefが「7」でウインドウ作成表示、「0」で非表示にする。
function edit_show_wnd_7()
  if Edit_Window_7 == 1 and hide_7 == false then              --7とfalseならウインドウを作成して表示する。
    edit_wnd_7 = float_wnd_create(250, 150, 1, true)
    float_wnd_set_title(edit_wnd_7, "Show Window-7")          --7番目のウインドウタイトル
    float_wnd_set_position(edit_wnd_7, 100, 400)
    float_wnd_set_imgui_builder(edit_wnd_7, "edit_on_build_7") -- ウインドウの作成
    hide_7 = true                                             --これでウインド内が有効になり使えるようになる。falseならウインドウ内が使えなくなる。
  end
end

do_every_draw("edit_show_wnd_7()")

-- 下の条件になったとき、ウインドウを作成して、テキストを表示する。
function edit_on_build_7(edit_wnd_7, x, y)
  if imgui.Button("Close", 200, 50) then
    Edit_Window_7 = 0 -- ボタンを押したときdatarefを「0」にして、このウインドウを閉じる
  end
  local changed, Input_text_7_new = imgui.InputText("InputA", Input_text_7, 18)
  if changed then
    Input_text_7 = Input_text_7_new
  end
end

edit_wnd_7 = nil   -- ウインドウは空にする(これにより完全に空にする)

-- Closeボタンにより、datarefが「0」になり7番目ウインドウが非表示になる。
function edit_hide_wnd_7()
  if Edit_Window_7 == 0 and hide_7 == true then
    if edit_wnd_7 then
      float_wnd_destroy(edit_wnd_7) --ウインドウを隠す
      hide_7 = false            --これでウインド内が無効になり使えなくする。しかし非表示なので無くても問題は無い。
    end
  end
end

do_every_draw("edit_hide_wnd_7()")
----------------------------------------------------------------------------------------------------------------------
-- Edit-8ボタンで開くウインドウ
----------------------------------------------------------------------------------------------------------------------
-- 8番目の開け閉めするウインドウ
-- datarefが「8」でウインドウ作成表示、「0」で非表示にする。
function edit_show_wnd_8()
  if Edit_Window_8 == 1 and hide_8 == false then              --8とfalseならウインドウを作成して表示する。
    edit_wnd_8 = float_wnd_create(250, 150, 1, true)
    float_wnd_set_title(edit_wnd_8, "Show Window-8")          --8番目のウインドウタイトル
    float_wnd_set_position(edit_wnd_8, 100, 400)
    float_wnd_set_imgui_builder(edit_wnd_8, "edit_on_build_8") -- ウインドウの作成
    hide_8 = true                                             --これでウインド内が有効になり使えるようになる。falseならウインドウ内が使えなくなる。
  end
end

do_every_draw("edit_show_wnd_8()")

-- 下の条件になったとき、ウインドウを作成して、テキストを表示する。
function edit_on_build_8(edit_wnd_8, x, y)
  if imgui.Button("Close", 200, 50) then
    Edit_Window_8 = 0 -- ボタンを押したときdatarefを「0」にして、このウインドウを閉じる
  end
  local changed, Input_text_8_new = imgui.InputText("InputA", Input_text_8, 18)
  if changed then
    Input_text_8 = Input_text_8_new
  end
end

edit_wnd_8 = nil   -- ウインドウは空にする(これにより完全に空にする)

-- Closeボタンにより、datarefが「0」になり8番目ウインドウが非表示になる。
function edit_hide_wnd_8()
  if Edit_Window_8 == 0 and hide_8 == true then
    if edit_wnd_8 then
      float_wnd_destroy(edit_wnd_8) --ウインドウを隠す
      --hide_8 = false            --これでウインド内が無効になり使えなくする。しかし非表示なので無くても問題は無い。
    end
  end
end

do_every_draw("edit_hide_wnd_8()")
----------------------------------------------------------------------------------------------------------------------
-- Edit-9ボタンで開くウインドウ
----------------------------------------------------------------------------------------------------------------------
-- 9番目の開け閉めするウインドウ
-- datarefが「9」でウインドウ作成表示、「0」で非表示にする。
function edit_show_wnd_9()
  if Edit_Window_9 == 1 and hide_9 == false then              --9とfalseならウインドウを作成して表示する。
    edit_wnd_9 = float_wnd_create(250, 150, 1, true)
    float_wnd_set_title(edit_wnd_9, "Show Window-9")          --9番目のウインドウタイトル
    float_wnd_set_position(edit_wnd_9, 100, 400)
    float_wnd_set_imgui_builder(edit_wnd_9, "edit_on_build_9") -- ウインドウの作成
    hide_9 = true                                             --これでウインド内が有効になり使えるようになる。falseならウインドウ内が使えなくなる。
  end
end

do_every_draw("edit_show_wnd_9()")

-- 下の条件になったとき、ウインドウを作成して、テキストを表示する。
function edit_on_build_9(edit_wnd_9, x, y)
  if imgui.Button("Close", 200, 50) then
    Edit_Window_9 = 0 -- ボタンを押したときdatarefを「0」にして、このウインドウを閉じる
  end
  local changed, Input_text_9_new = imgui.InputText("InputA", Input_text_9, 19)
  if changed then
    Input_text_9 = Input_text_9_new
  end
end

edit_wnd_9 = nil   -- ウインドウは空にする(これにより完全に空にする)

-- Closeボタンにより、datarefが「0」になり9番目ウインドウが非表示になる。
function edit_hide_wnd_9()
  if Edit_Window_9 == 0 and hide_9 == true then
    if edit_wnd_9 then
      float_wnd_destroy(edit_wnd_9) --ウインドウを隠す
      hide_9 = false            --これでウインド内が無効になり使えなくする。しかし非表示なので無くても問題は無い。
    end
  end
end

do_every_draw("edit_hide_wnd_9()")

create_dataref_tableで9つのEditボタンを作成

これだと確実にdataref値が0から1に変化する。

--配列のカスタムdatarefを作成、"IntArray"がポイント。
Edit_window = create_dataref_table("FlyWithLua/edit_window", "IntArray")
Edit_window[0] = 0 -- 初期設定のdataref値
Edit_window[1] = 0
Edit_window[2] = 0
Edit_window[3] = 0
Edit_window[4] = 0
Edit_window[5] = 0
Edit_window[6] = 0
Edit_window[7] = 0
Edit_window[8] = 0
local hide_1 = false    -- 初期設定
local Input_text_1 = ""
local hide_2 = false
local Input_text_2 = ""
local hide_3 = false
local Input_text_3 = ""
local hide_4 = false
local Input_text_4 = ""
local hide_5 = false
local Input_text_5 = ""
local hide_6 = false
local Input_text_6 = ""
local hide_7 = false
local Input_text_7 = ""
local hide_8 = false
local Input_text_8 = ""
local hide_9 = false
local Input_text_9 = ""
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
button_wnd_1 = float_wnd_create(300, 500, 1, true)
float_wnd_set_title(button_wnd_1, "Edit_1") --最初のウインドウタイトル
float_wnd_set_imgui_builder(button_wnd_1, "button_window")
float_wnd_set_onclick(button_wnd_1, "button_on_click")
float_wnd_set_onclose(button_wnd_1, "closed_demo") --これを入れるとウインドウの赤丸を押すとX-Planeがクラッシュする。

-- 最初に表示されるメインウインドウ、隠さない設定。
-- button_windowをビルド、最初に開くウインドウ、Edit_1、Edit_2のボタンを作成
function button_window(button_wnd_1, x, y)
  if imgui.Button("Edit_1", 100, 30) then
    Edit_window[0] = 1 -- dataref値「1」に変更、2番目のウインドウを表示
  end
  imgui.TextUnformatted(Input_text_1)

  if imgui.Button("Edit_2", 100, 30) then
    Edit_window[1] = 1
  end
  imgui.TextUnformatted(Input_text_2)

  if imgui.Button("Edit_3", 100, 30) then
    Edit_window[2] = 1
  end
  imgui.TextUnformatted(Input_text_3)

  if imgui.Button("Edit_4", 100, 30) then
    Edit_window[3] = 1
  end
  imgui.TextUnformatted(Input_text_4)

  if imgui.Button("Edit_5", 100, 30) then
    Edit_window[4] = 1
  end
  imgui.TextUnformatted(Input_text_5)

  if imgui.Button("Edit_6", 100, 30) then
    Edit_window[5] = 1
  end
  imgui.TextUnformatted(Input_text_6)

  if imgui.Button("Edit_7", 100, 30) then
    Edit_window[6] = 1
  end
  imgui.TextUnformatted(Input_text_7)

  if imgui.Button("Edit_8", 100, 30) then
    Edit_window[7] = 1
  end
  imgui.TextUnformatted(Input_text_8)

  if imgui.Button("Edit_9", 100, 30) then
    Edit_window[8] = 1
  end
  imgui.TextUnformatted(Input_text_9)
end

function button_on_click(button_wnd_1, x, y, state)
end

----------------------------------------------------------------------------------------------------------------------
-- Edit-1ボタンで開くウインドウ(ここからはウインドウを個別に作成する必要がある)
----------------------------------------------------------------------------------------------------------------------
-- Edit_1ボタンにより、開け閉めするウインドウ
-- Edit_window_1のdatarefが「1」になったら、このウインドウをビルドして表示する。
function edit_show_wnd_1()
  if Edit_window[0] == 1 and hide_1 == false then                 --1とfalseならウインドウを作成して表示する。
    edit_wnd_1 = float_wnd_create(250, 150, 1, true)
    float_wnd_set_title(edit_wnd_1, "Show Window-1")             --2番目のウインドウタイトル
    float_wnd_set_position(edit_wnd_1, 100, 300)
    float_wnd_set_imgui_builder(edit_wnd_1, "ishwwd_on_build_1") -- 最初のウインドウの作成
    hide_1 = true     --これでCloseボタンで閉じることができる。                                           --これでウインド内が有効になり使えるようになる。falseならウインドウ内が使えなくなる。
  end
end
do_every_draw("edit_show_wnd_1()")

-- ビルドされたウインドウ内に、Closeボタンとテキストを表示する。
function ishwwd_on_build_1(edit_wnd_1, x, y)
  if imgui.Button("Close", 100, 50) then
    Edit_window[0] = 0 -- ボタンを押したときdatarefを「0」にして、このウインドウを閉じる
  end
end
edit_wnd_1 = nil -- ウインドウは空にする(これにより完全に空にする)

-- Edit_1、Closeボタンにより、datarefが「0」になり2番目ウインドウが非表示になる。
-- ポイント、ここにも「and hide_1 == true」を入れる。これを入れないと開け閉めが不安定になる。
function edit_hide_1_wnd()
  if Edit_window[0] == 0 and hide_1 == true then
    if edit_wnd_1 then
      float_wnd_destroy(edit_wnd_1) --ウインドウを隠す
      hide_1 = false                --これでウインド内が無効になり使えなくする。
    end
  end
end
do_every_draw("edit_hide_1_wnd()")
-- do_every_drawはLuaコードを1秒ごとに計算する。do_every_draw()よりはフレームレートに影響がすくない。

----------------------------------------------------------------------------------------------------------------------
-- Edit-2ボタンで開くウインドウ
----------------------------------------------------------------------------------------------------------------------
-- 2番目の開け閉めするウインドウ
-- datarefが「2」でウインドウ作成表示、「0」で非表示にする。
function edit_show_wnd_2()
  if Edit_window[1] == 1 and hide_2 == false then    
    edit_wnd_2 = float_wnd_create(250, 150, 1, true)
    float_wnd_set_title(edit_wnd_2, "Show Window-2")   
    float_wnd_set_position(edit_wnd_2, 100, 300)
    float_wnd_set_imgui_builder(edit_wnd_2, "edit_on_build_2") 
    hide_2 = true      
  end
end
do_every_draw("edit_show_wnd_2()")

function edit_on_build_2(edit_wnd_2, x, y)
  if imgui.Button("Close", 200, 50) then
    Edit_window[1] = 0
  end
end
edit_wnd_2 = nil 

function edit_hide_wnd_2()
  if Edit_window[1] == 0 and hide_2 == true then
    if edit_wnd_2 then
      float_wnd_destroy(edit_wnd_2) 
      hide_2 = false   
    end
  end
end
do_every_draw("edit_hide_wnd_2()")
----------------------------------------------------------------------------------------------------------------------
-- Edit-3ボタンで開くウインドウ
----------------------------------------------------------------------------------------------------------------------
function edit_show_wnd_3()
  if Edit_window[2] == 1 and hide_3 == false then    
    edit_wnd_3 = float_wnd_create(250, 150, 1, true)
    float_wnd_set_title(edit_wnd_3, "Show Window-3")    
    float_wnd_set_position(edit_wnd_3, 100, 300)
    float_wnd_set_imgui_builder(edit_wnd_3, "edit_on_build_3") 
    hide_3 = true                                         
  end
end
do_every_draw("edit_show_wnd_3()")

function edit_on_build_3(edit_wnd_3, x, y)
  if imgui.Button("Close", 200, 50) then
    Edit_window[2] = 0 
  end
end
edit_wnd_3 = nil  

function edit_hide_wnd_3()
  if Edit_window[2] == 0 and hide_3 == true then
    if edit_wnd_3 then
      float_wnd_destroy(edit_wnd_3) 
      hide_3 = false        
    end
  end
end
do_every_draw("edit_hide_wnd_3()")
----------------------------------------------------------------------------------------------------------------------
-- Edit-4ボタンで開くウインドウ
----------------------------------------------------------------------------------------------------------------------
function edit_show_wnd_4()
  if Edit_window[3] == 1 and hide_4 == false then      
    edit_wnd_4 = float_wnd_create(250, 150, 1, true)
    float_wnd_set_title(edit_wnd_4, "Show Window-4")   
    float_wnd_set_position(edit_wnd_4, 100, 400)
    float_wnd_set_imgui_builder(edit_wnd_4, "edit_on_build_4") 
    hide_4 = true                                           
  end
end
do_every_draw("edit_show_wnd_4()")

function edit_on_build_4(edit_wnd_4, x, y)
  if imgui.Button("Close", 200, 50) then
    Edit_window[3] = 0 
  end
end
edit_wnd_4 = nil 

function edit_hide_wnd_4()
  if Edit_window[3] == 0 and hide_4 == true then
    if edit_wnd_4 then
      float_wnd_destroy(edit_wnd_4) 
      hide_4 = false     
    end
  end
end
do_every_draw("edit_hide_wnd_4()")

----------------------------------------------------------------------------------------------------------------------
-- Edit-5ボタンで開くウインドウ
----------------------------------------------------------------------------------------------------------------------
function edit_show_wnd_5()
  if Edit_window[4] == 1 and hide_5 == false then    
    edit_wnd_5 = float_wnd_create(250, 150, 1, true)
    float_wnd_set_title(edit_wnd_5, "Show Window-5")      
    float_wnd_set_position(edit_wnd_5, 100, 400)
    float_wnd_set_imgui_builder(edit_wnd_5, "edit_on_build_5") 
    hide_5 = true                                    
  end
end
do_every_draw("edit_show_wnd_5()")

function edit_on_build_5(edit_wnd_5, x, y)
  if imgui.Button("Close", 200, 50) then
    Edit_window[4] = 0 
  end
end
edit_wnd_5 = nil 

function edit_hide_wnd_5()
  if Edit_window[4] == 0 and hide_5 == true then
    if edit_wnd_5 then
      float_wnd_destroy(edit_wnd_5) 
      hide_5 = false           
    end
  end
end
do_every_draw("edit_hide_wnd_5()")
----------------------------------------------------------------------------------------------------------------------
-- Edit-6ボタンで開くウインドウ
----------------------------------------------------------------------------------------------------------------------
function edit_show_wnd_6()
  if Edit_window[5] == 1 and hide_6 == false then        
    edit_wnd_6 = float_wnd_create(250, 150, 1, true)
    float_wnd_set_title(edit_wnd_6, "Show Window-6")        
    float_wnd_set_position(edit_wnd_6, 100, 400)
    float_wnd_set_imgui_builder(edit_wnd_6, "edit_on_build_6") 
    hide_6 = true                                           
  end
end
do_every_draw("edit_show_wnd_6()")

function edit_on_build_6(edit_wnd_6, x, y)
  if imgui.Button("Close", 200, 50) then
    Edit_window[5] = 0
  end
end
edit_wnd_6 = nil  

function edit_hide_wnd_6()
  if Edit_window[5] == 0 and hide_6 == true then
    if edit_wnd_6 then
      float_wnd_destroy(edit_wnd_6) 
      hide_6 = false     
    end
  end
end
do_every_draw("edit_hide_wnd_6()")
----------------------------------------------------------------------------------------------------------------------
-- Edit-7ボタンで開くウインドウ
----------------------------------------------------------------------------------------------------------------------
function edit_show_wnd_7()
  if Edit_window[6] == 1 and hide_7 == false then           
    edit_wnd_7 = float_wnd_create(250, 150, 1, true)
    float_wnd_set_title(edit_wnd_7, "Show Window-7")      
    float_wnd_set_position(edit_wnd_7, 100, 400)
    float_wnd_set_imgui_builder(edit_wnd_7, "edit_on_build_7") 
    hide_7 = true                                            
  end
end
do_every_draw("edit_show_wnd_7()")

function edit_on_build_7(edit_wnd_7, x, y)
  if imgui.Button("Close", 200, 50) then
    Edit_window[6] = 0 
  end
end
edit_wnd_7 = nil 

function edit_hide_wnd_7()
  if Edit_window[6] == 0 and hide_7 == true then
    if edit_wnd_7 then
      float_wnd_destroy(edit_wnd_7) 
      hide_7 = false  
    end
  end
end
do_every_draw("edit_hide_wnd_7()")
----------------------------------------------------------------------------------------------------------------------
-- Edit-8ボタンで開くウインドウ
----------------------------------------------------------------------------------------------------------------------
function edit_show_wnd_8()
  if Edit_window[7] == 1 and hide_8 == false then        
    edit_wnd_8 = float_wnd_create(250, 150, 1, true)
    float_wnd_set_title(edit_wnd_8, "Show Window-8")       
    float_wnd_set_position(edit_wnd_8, 100, 400)
    float_wnd_set_imgui_builder(edit_wnd_8, "edit_on_build_8") 
    hide_8 = true                                            
  end
end
do_every_draw("edit_show_wnd_8()")

function edit_on_build_8(edit_wnd_8, x, y)
  if imgui.Button("Close", 200, 50) then
    Edit_window[7] = 0
  end
end
edit_wnd_8 = nil  

function edit_hide_wnd_8()
  if Edit_window[7] == 0 and hide_8 == true then
    if edit_wnd_8 then
      float_wnd_destroy(edit_wnd_8) 
      hide_8 = false            
    end
  end
end
do_every_draw("edit_hide_wnd_8()")
----------------------------------------------------------------------------------------------------------------------
-- Edit-9ボタンで開くウインドウ
----------------------------------------------------------------------------------------------------------------------
function edit_show_wnd_9()
  if Edit_window[8] == 1 and hide_9 == false then        
    edit_wnd_9 = float_wnd_create(250, 150, 1, true)
    float_wnd_set_title(edit_wnd_9, "Show Window-9")    
    float_wnd_set_position(edit_wnd_9, 100, 400)
    float_wnd_set_imgui_builder(edit_wnd_9, "edit_on_build_9") 
    hide_9 = true                                          
  end
end
do_every_draw("edit_show_wnd_9()")

function edit_on_build_9(edit_wnd_9, x, y)
  if imgui.Button("Close", 200, 50) then
    Edit_window[8] = 0 
  end
end
edit_wnd_9 = nil   

function edit_hide_wnd_9()
  if Edit_window[8] == 0 and hide_9 == true then
    if edit_wnd_9 then
      float_wnd_destroy(edit_wnd_9) 
      hide_9 = false          
    end
  end
end
do_every_draw("edit_hide_wnd_9()")

最後にこんな書き方もある

「datatref_x」という変数のカスタムdatarefを別途作成しとおく。

if datatref_x == 1 then 
  open_window() 
end

datarefが等しく、hideの条件が合えばウインドウが作成される。

local hide = false

fuction open_window()
	if dataref_x == 1 and hide == false then
		draw_window = true
		hide = true
	end
end

fuction close_window()
	if dataref_x == 0 hide == true then
		draw_window = false
		hide = false
	end
end

do_often()
	open_window()
	close_window()
end