Curl Global Community
ComboBoxのListを「右寄せ」にしたい - Printable Version

+- Curl Global Community (http://communities.curl.com)
+-- Forum: Discussions (http://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (http://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: ComboBoxのListを「右寄せ」にしたい (/showthread.php?tid=1066)



ComboBoxのListを「右寄せ」にしたい - e.kou - 04-10-2014

ComboBox使って
値リストを「右寄せ」に表示したいのですが
ComboBoxにはhalignプロパティの提供がありません。

実現可能でしょうか。

以下、試した事項です。(2件)

① ui-objectにアクセスして、SkinnableComboBoxUIのhalignプロパティに"right"を設定する。
  <結果>
   「選択肢」「選択した値」ともに右寄せされず。
  <ソース>
   def ui = test-cbb.ui-object asa SkinnableComboBoxUI
   ui.halign = "right"

② labelプロパティにVBoxを設定し、VBoxのhalignプロパティに"right"を設定する。
  <結果>
   「選択肢」は右寄せされた。
   「選択した値」は右寄せされず。
  <ソース>
   {let modelBig GrinefaultListModel =
    {DefaultListModel
    "red", "green", "blue",
    "-",
    "teal", "purple", "orange"
    }
   }
   
   {def cmbx-length=5cm}
   
   {def cmbx=
    {ComboBox
    width = cmbx-length,
    control-appearance-changeable? = true,
    data-model = model,
    list-item-creation-proc =
    {proc {val:any}:ListItem
    {if val == "-" then
    {return
    {ListSeparator}
    }
    else
    {return
    {ListValueItem
    val,
    label = {VBox halign="right", width = cmbx-length - 0.5cm, color = val,
    {value val}}
    }
    }
    }
    }
    }
   }
   
   {Frame
    color = "black",
    cmbx
   }



RE: ComboBoxのListを「右寄せ」にしたい - blackwood - 04-10-2014

少し深いですが、グラフィック階層をたどっていくとSkinnableComboBoxTextFieldがあります。
そのhalignを"right"に設定するといいのではないでしょうか。


Code:
{curl 8.0 applet}
{curl-file-attributes character-encoding = "utf8"}

{let cb:ComboBox = {ComboBox "Antelope", "Llama", "Horse", value="Antelope" }}

{value
let ui:SkinnableComboBoxUI = cb.ui-object asa SkinnableComboBoxUI
let g1:{Iterator-of Graphic} = ui.graphical-children
let g2:any = {g1.read-one-as-any}
let g3:{Iterator-of Graphic} = g2.graphical-children
let g4:any = {g3.read-one-as-any}
let g5:{Iterator-of Graphic} = g4.graphical-children
let g6:any = {g5.read-one-as-any} ||g6がSkinnableComboBoxTextField

{set g6.halign = "right"}

cb}





RE: ComboBoxのListを「右寄せ」にしたい - e.kou - 04-10-2014

blackwoodさん

勉強になりました。
ありがとうございます。

できましたので
下記のようにまとめてみました。


{let modelBig GrinefaultListModel =
{DefaultListModel
"red", "green", "blue"
}
}

{def cbo-length = 100px}

{def cbo =
{ComboBox
width = cbo-length,
control-appearance-changeable? = true,
data-model = model,
list-item-creation-proc =
{proc {val:any}:ListItem
{return
{ListValueItem
val,
|| 選択肢の右寄せ設定
label = {VBox
halign="right",
width = cbo-length - 26px,
{value val}
}
}
}
}
}
}

|| 選択した値の右寄せ設定
{let ui:SkinnableComboBoxUI = cbo.ui-object asa SkinnableComboBoxUI}
{let g1:{Iterator-of Graphic} = ui.graphical-children}
{let g2:any = {g1.read-one-as-any}} || g2がFrame
{let g3:{Iterator-of Graphic} = g2.graphical-children}
{let g4:any = {g3.read-one-as-any}} || g4がGrid
{let g5:{Iterator-of Graphic} = g4.graphical-children}
{let g6:any = {g5.read-one-as-any}} || g6がSkinnableComboBoxTextField
{set g6.halign = "right"}

{Frame
color = "black",
cbo
}



RE: ComboBoxのListを「右寄せ」にしたい - umemura - 04-10-2014

blackwood さんのご指摘通り、SkinnableComboBoxTextField が表示されているようですね。

下記のオープンコントロールのファイルを参照したところ、
SkinnableComboBoxUI.text-field で定義されていました。

■SkinnableComboBox
C:\Program Files\Curl Corporation\Surge\9\ide\gui\controls\ui-skinnable
skinnable-list-control-uis.scurl(1500行目あたり以降)

ただ SkinnableComboBoxUI.text-field は、private 定義なので、
このフィールドに対してアクセスできる focus-object から取得すればよさそうです。

Code:
{def cbx = {ComboBox "aaa", "bbb"}}
{set (cbx.focus-object asa TextField).halign = "right"}
{value cbx}

このオープンコントロールには、いろいろなソースが公開されているので、
カスタマイズする際には参考になりますね。





RE: ComboBoxのListを「右寄せ」にしたい - e.kou - 04-10-2014

umemuraさん

これはすごい!ご指導ありがとうございます。
勉強&メモーです。