Thread Rating:
  • 357 Vote(s) - 2.9 Average
  • 1
  • 2
  • 3
  • 4
  • 5
ComboBoxのListを「右寄せ」にしたい
04-10-2014, 09:49 AM,
#1
Question  ComboBoxのListを「右寄せ」にしたい
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
   }
04-10-2014, 11:15 AM,
#2
RE: ComboBoxのListを「右寄せ」にしたい
少し深いですが、グラフィック階層をたどっていくと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}


04-10-2014, 11:53 AM,
#3
Music  RE: ComboBoxのListを「右寄せ」にしたい
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
}
04-10-2014, 12:34 PM, (This post was last modified: 04-10-2014, 12:37 PM by umemura.)
#4
RE: ComboBoxのListを「右寄せ」にしたい
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}

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


04-10-2014, 03:16 PM,
#5
RE: ComboBoxのListを「右寄せ」にしたい
umemuraさん

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



Forum Jump:


Users browsing this thread:
4 Guest(s)

MyBB SQL Error

MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1017 - Can't find file: 'mybb_threadviews' (errno: 2)
Query:
INSERT INTO mybb_threadviews (tid) VALUES('1066')