DCL入門

【AutoCAD効率化】ダイアログのレイアウトを自由に変更!DCLでのレイアウト操作を解説

※当サイトではアフィリエイトおよびGoogle Adsenseの広告を掲載しています。

dcl-layout_eyecatch
  • ボタンを横に並べたい
  • 編集ボックスの横幅を変更したい
  • ダイアログのレイアウト例を知りたい

DCLでユーザーが使いやすいダイアログを作るためには、ボタンや編集ボックスなどのレイアウト(見た目)調整が欠かせません。しかし、DCLについて解説しているサイトは少ないため、DCLでレイアウトを操作する方法がわからずお困りではないでしょうか。

はこさん。
はこさん。

私はAutoLISPを独学で習得し、業務に役立つプログラムの作成を5年以上続けています。数行の簡単なプログラムから1000行以上の複雑なものまで、さまざまなプログラムを作成してきました。

AutoLISPってなに?という方はこちらの記事をご覧ください。
>>AutoCADを自動化したい人必見【AutoLISPを覚えるべきメリット5選】

DCLについて知りたい方はこちらの記事をご覧ください。
>>ダイアログでユーザーの入力を楽にしよう!DCLを覚えるメリット3選|表示方法も解説

この記事ではダイアログのレイアウトをDCLで操作する方法について解説します。DCLでユーザーが使いやすいダイアログを作りたい方はぜひ最後までお読みください。

タイルの並べ方を操作する関数4種

dcl-layout_image1

タイルの並べ方を操作するDCLの関数は以下の4つです。

  • column
  • row
  • boxed_column
  • boxed_row

タイル

タイルとはボタンや編集ボックスなど、ダイアログに表示される項目のこと。タイルの作り方についてはこちらの記事で解説しています。
>>DCLでダイアログボックスにタイルを表示しよう!【AutoCAD】

タイルを縦に並べる column

タイルを縦に並べたいときはcolumnを使いましょう。たとえば、編集ボックスを縦に2つ並べたダイアログのプログラムは次のようになります。

test_dcl:dialog
{
  label ="タイトル";
  
  :column
  {
    :edit_box
    {
      label = "編集ボックス1";
      key = "edit_box1";
    }
    :edit_box
    {
      label = "編集ボックス2";
      key = "edit_box2";
    }
  }
  ok_cancel;
}

表示されるダイアログは以下のとおりです。

dcl-layout_image1-1

並べ方を指定しない場合、タイルはプログラムに記述された順番で縦に並びます。並び方を指定しなくても縦に並ぶなら、columnなんて必要ないと感じるかもしれません。しかし、後述するrowなどと組み合わせれば、横並びの中で一部のタイルだけを縦並びにできるため、レイアウトを調整しやすくなります。

はこさん。
はこさん。

columnとrowを組み合わせたダイアログは使用例でご紹介するのでお楽しみに

タイルを横に並べる row

rowとはタイルを横に並べるDCLの関数のこと。ダイアログのレイアウトを調整するためには欠かせない関数の1つです。編集ボックスを横に2つ並べたダイアログのプログラムは以下のようになります。

test_dcl:dialog
{
  label ="タイトル";
  
  :row
  {
    :edit_box
    {
      label = "編集ボックス1";
      key = "edit_box1";
    }
    :edit_box
    {
      label = "編集ボックス2";
      key = "edit_box2";
    }
  }
  ok_cancel;
}

表示されるダイアログは次のとおりです。

dcl-layout_image1-2
はこさん。
はこさん。

rowの中に編集ボックスのタイルを2つ記述しているため、図のように編集ボックスは横に並びます。

枠の中でタイルを縦に並べる boxed_column

boxed_columnはタイルを縦に並べて全体を枠で囲む関数です。枠の左上にはラベルを表示させられるので、どんなタイルのグループなのかわかりやすくなります。

たとえば、縦に2つ並べた編集ボックスを枠で囲い、ラベルも表示させるプログラムは次のとおり。

test_dcl:dialog
{
  label ="タイトル";
  
  :boxed_column
  {
    label = "ラベル";
    
    :edit_box
    {
      label = "編集ボックス1";
      key = "edit_box1";
    }
    :edit_box
    {
      label = "編集ボックス2";
      key = "edit_box2";
    }
  }
  ok_cancel;
}

ダイアログは以下のようになります。

dcl-layout_image1-3
はこさん。
はこさん。

枠が表示される分、ダイアログ全体のサイズが変わるので注意してください。

枠の中でタイルを横に並べる boxed_row

boxed_rowはタイルを横に並べて全体を枠で囲みます。前述したboxed_columnと同様に、枠の左上にラベルを表示させることも。

横に2つ並べた編集ボックスを枠で囲い、ラベルを表示させるプログラムは以下のとおりです。

test_dcl:dialog
{
  label ="タイトル";
  
  :boxed_row
  {
    label = "ラベル";
    
    :edit_box
    {
      label = "編集ボックス1";
      key = "edit_box1";
    }
    :edit_box
    {
      label = "編集ボックス2";
      key = "edit_box2";
    }
  }
  ok_cancel;
}

ダイアログは次のように表示されます。

dcl-layout_image1-4
はこさん。
はこさん。

ラベルがあることでどんなタイルのグループなのかわかりやすくなります。

タイルのサイズと位置を操作する属性5種

dcl-layout_image2

プログラムにタイルの属性を追加することで、タイルのサイズや位置などを操作できます。

属性

属性とは対象を詳しく表すための要素のこと。「人間」に対しては「年齢」や「性別」などが属性となります。
>>属性とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

以下の5つの属性は、タイルのレイアウトを微調整するときに役立ちます。

  • width
  • fixed_width
  • height
  • fixed_height
  • alignment

タイルの最小幅を指定する width

widthはタイルの最小幅を指定する属性です。半角1文字の幅を1として数値を指定します。

最小幅を指定するだけなので、タイルの幅が変化するわけではありません。タイルの幅を指定した値に変えたい場合は、後述するfixed_widthの属性をtrueにしてください。

たとえば、編集ボックスの最小幅を20にした場合のプログラムは次のようになります。

test_dcl:dialog
{
  label ="タイトル";

  :edit_box
  {
    label = "編集ボックス1";
    key = "edit_box1";
    width = 20;
  }
  ok_cancel;
}

編集ボックスなどラベルが左側に表示されるタイルの場合、ラベルの文字もタイルの幅としてカウントされるので注意してください。

はこさん。
はこさん。

ちなみに、widthの値が同じ場合、ラベルの文字数が多いと入力欄の幅が狭くなります。

タイルの幅を可能なかぎり広げるか指定する fixed_width

fixed_widthとはタイルの幅を可能なかぎり広げるか指定する属性のこと。falseの場合はタイルの幅は可能なかぎり広がり、trueを指定したときはタイルの幅が最小限になります。

はこさん。
はこさん。

既定はfalseなのでfixed_widthを記述しない場合、タイルの幅は可能なかぎり広がります。

編集ボックスを縦に3つ並べた、以下のダイアログで表示され方を比較してみましょう。

dcl-layout_image2-1

プログラムは以下のとおりです。

test_dcl:dialog
{
  label ="タイトル";
  
  :column
  { 
    :edit_box
    {
      label = "編集ボックス1";
      key = "edit_box1";
      width = 20;
      fixed_width = true;
    }
    :edit_box
    {
      label = "編集ボックス2";
      key = "edit_box2";
      width = 40;
    }
    :edit_box
    {
      label = "編集ボックス3";
      key = "edit_box3";
      width = 30;
    }
  }
  ok_cancel;
}

一番上の編集ボックスでは「width = 20;」「fixed_width = true;」としているため、タイルの幅は20になります。

真ん中の編集ボックスにはfixed_widthを記述していないため、規定値のfalseが適用されてタイルの幅は可能なかぎり広がります。しかし、一番上の編集ボックスよりも大きい最小幅が指定されているため、表示されるタイルの幅は40になる点に注意してください。

一番下の編集ボックスはwidthを30にしていますが、fixed_widthを記述していないのでタイルの幅は真ん中の編集ボックスと同じ40になります。

タイルの最小高さを指定する height

heightとはタイルの最小限の高さを指定する属性のこと。widthと同様に半角1文字の高さを1として数値を指定します。後述するfixed_heightをtrueにすることで、タイルの高さが指定した値になります。

リストボックスの最小高さを20にしたいときは、以下のようにプログラムを記述してください。

test_dcl:dialog
{
  label ="タイトル";
   
  :list_box
  {
    label = "リストボックス1";
    key = "list_box1";
    height = 20;
  }
  ok_cancel;
}

タイルの高さを可能なかぎり広げるか指定する fixed_height

fixed_heightはタイルの高さを可能なかぎり広げるか指定する属性です。前述したfixed_widthと同様で、falseを指定するとタイルの高さは可能なかぎり広がり、trueを指定した場合はタイルの高さが最小限になります。

はこさん。
はこさん。

fixed_widthと同じで規定はfalseです。

たとえば、高さが10と20の2つのリストボックスを横に並べる場合、プログラムは以下のように記述してください。

test_dcl:dialog
{
  label ="タイトル";

  :row
  {
    :list_box
    {
      label = "リストボックス1";
      key = "list_box1";
      height = 10;
      fixed_height = true;
    }
    :list_box
    {
      label = "リストボックス2";
      key = "list_box2";
      height = 20;
      fixed_height = true;
    }
  }
  ok_cancel;
}

ダイアログは次のように表示されます。

dcl-layout_image2-2
はこさん。
はこさん。

タイルの位置を上側に寄せたいときは後述するalignmentの属性を活用してください。

タイルの寄せ方を指定する alignment

alignmentはタイルの寄せ方を指定する属性です。中央寄せや左寄せなどタイルの位置を調整することができます。

alignmentは前述したrowやboxed_columnの直下に記述しましょう。タイル1つ1つに記述しても寄せ方は変化しません。また、columnとrowで指定できる値が異なるので注意してください。

columnまたはboxed_columnで指定できる値は次のとおりです。

内容
left左寄せ(規定)
right右寄せ
centerd中央寄せ

rowまたはboxed_rowで指定できる値は以下のとおり。

内容
top上寄せ
bottom下寄せ
centerd中央寄せ(規定)

たとえば、高さの異なる2つのリストボックスを横に並べて、高さが低い方を上寄せにする場合、プログラムは次のようになります。

test_dcl:dialog
{
  label ="タイトル";

  :row
  {
    :list_box
    {
      label = "リストボックス1";
      key = "list_box1";
      height = 10;
      fixed_height = true;
      alignment = top;
    }
    :list_box
    {
      label = "リストボックス2";
      key = "list_box2";
      height = 20;
      fixed_height = true;
    }
  }
  ok_cancel;
}

ダイアログは次のように表示されます。

dcl-layout_image2-3

タイルのレイアウト例3種

dcl-layout_image3

前述した関数や属性を組み合わせたレイアウトの例をプログラムとセットで3つご紹介します。ダイアログのレイアウトを決めるときの参考にしてください。

使用しているタイルについてはこちらの記事で解説しています。
>>DCLでダイアログボックスにタイルを表示しよう!【AutoCAD】

使用例1 編集ボックスを縦と横に並べる

boxed_columnとboxed_rowを組み合わせて編集ボックスを並べたダイアログです。

dcl-layout_image3-1
test_dcl:dialog
{
  label ="タイトル";

  :boxed_column
  {
    label = "ラベル1";
    
    :edit_box
    {
      label = "編集ボックス1";
      key = "edit_box1";
      width = 40;
      fixed_width = true;
    }
    :edit_box
    {
      label = "編集ボックス2";
      key = "edit_box2";
      width = 50;
      fixed_width = true;
    }
  }
  :boxed_row
  {
    label = "ラベル2";
    
    :edit_box
    {
      label = "編集ボックス3";
      key = "edit_box3";
    }
    :edit_box
    {
      label = "編集ボックス4";
      key = "edit_box4";
    }
  }
  ok_cancel;
}

使用例2 ラジオボタンとリストボックスを並べる

ラジオボタンとリストボックスを並べたダイアログのレイアウト例です。高さの異なるリストボックスを横に並べ、右側のリストボックスは上寄せにしています。

dcl-layout_image3-2
test_dcl:dialog
{
  label ="タイトル";

  :boxed_row
  { 
    :radio_button
    {
      label = "ラジオボタン1";
      key = "radio_button1";
    }
    :radio_button
    {
      label = "ラジオボタン2";
      key = "radio_button2";
    }
  }
  :row
  {    
    :list_box
    {
      key = "list_box1";
      width = 20;
      height = 15;
      fixed_width = true;
      fixed_height = true;
    }
    :list_box
    {
      key = "list_box2";
      width = 20;
      height = 10;
      fixed_width = true;
      fixed_height = true;
      alignment = top;
    }
  }
  ok_cancel;
}

使用例3 ラジオボタンとポップアップリストを並べる

rowとboxed_columnを組み合わせたダイアログのレイアウト例です。rowの内部にタイルを配置しているため、ポップアップリストの垂直方向の位置をboxed_columnの中央に合わせることができます。

dcl-layout_image3-3
test_dcl:dialog
{
  label ="タイトル";

  :row {
    :boxed_column
    {
      label = "ラベル1";
      
      :radio_button
      {
        label = "ラジオボタン1";
        key = "radio_button1";
      }
      :radio_button
      {
        label = "ラジオボタン2";
        key = "radio_button2";
      }
      :radio_button
      {
        label = "ラジオボタン3";
        key = "radio_button3";
      }
    }
    
    :popup_list
    {
      key = "popup_list1";
      width = 20;
      fixed_width = true;
    }
  }
  
  :row {
    :boxed_column
    {
      label = "ラベル2";
      
      :radio_button
      {
        label = "ラジオボタン4";
        key = "radio_button4";
      }
      :radio_button
      {
        label = "ラジオボタン5";
        key = "radio_button5";
      }
      :radio_button
      {
        label = "ラジオボタン6";
        key = "radio_button6";
      }
    }
    
    :popup_list
    {
      key = "popup_list2";
      width = 30;
      fixed_width = true;
    }
  }
  ok_cancel;
}

レイアウトを工夫して使いやすいダイアログを作ろう

dcl-layout_last

今回ご紹介したダイアログのレイアウトを操作する関数と属性を以下にまとめます。

関数レイアウト
columndcl-layout_image1-1
rowdcl-layout_image1-2
boxed_columndcl-layout_image1-3
boxed_rowdcl-layout_image1-4
関数内容
widthタイルの最小幅を指定する
fixed_widthタイルの幅を可能なかぎり広げるか指定する
heightタイルの最小高さを指定する
fixed_heightタイルの高さを可能なかぎり広げるか指定する
alignmentタイルの寄せ方を指定する

レイアウトはダイアログの使いやすさを左右する重要な要素です。試行錯誤して、ユーザーがストレスなく使えるダイアログを目指しましょう。

AutoLISPの基礎を書籍で学びたい方には「AutoCAD 自動化攻略読本」がおすすめ。初心者向けに解説されており、AutoLISP以外の自動化方法も学べるお得な一冊。とにかくAutoCADで楽をしたい方はぜひご覧ください。

>>【AutoLISPの教科書】AutoCAD自動化攻略読本のメリット5選|おすすめ活用法も解説

AutoCADが楽になるツールを作成します AutoCADを効率化して面倒な作業から解放されましょう!

-DCL入門

プログラム作成依頼はコチラ