HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0624
N極リストボックス3解決


N極

リンク

2006/6/24(Sat) 15:00:44|NO.1198

リストボックスをがちゃんとしたサイズになりません。
objsize 256,192
pos 0,320
listbox Index,0,List
というスクリプトですが
リストボックスのたてサイズが192ドットにならず、184ドットで表示されてしまいます。
8ドット足りないので
objsize 256,200
に設定しても184ドットのまま表示されます。
しかし、
objsize 256,202
とすると194ドットで表示されます。
何故こうなるんでしょうか。



この記事に返信する


Kpan

リンク

2006/6/24(Sat) 18:29:39|NO.1202

リストボックス内の文字列の高さに合わせて、ボックス自体の長さが
調節されてるんではないですかね?



N極

リンク

2006/6/24(Sat) 20:36:17|NO.1203

いま確かめてみましたが確かにそうでした。
ちょうどいいようにサイズを変更してみます。

ありがとうございました。



kz3

リンク

2006/6/24(Sat) 21:40:00|NO.1204

リストボックスはデフォルトで項目がウィンドウサイズによって途中で切れないよう、
Windowsによって適切なサイズに自動調節されています。

自動調節されないようなリストボックススタイル( LBS_NOINTEGRALHEIGHT )もありますが、
listboxで配置後はウィンドウスタイルをそのように変更しても、
リサイズ等の操作では影響しないようです。

winobjを使ってオブジェクト配置時に LBS_NOINTEGRALHEIGHT スタイルを適用すれば、
自動調節されずに自由なサイズのリストボックスが出来ますが、
この場合、objprm でリストボックスの内容を変更できませんし、
> listbox p1, p2, p3
の p1 に選択項目は反映されません。
( そもそもwinobjにはそのようなパラメータはありません )

これはlistboxはHSPが提供しているので面倒を見ることができますが、
winobjはどんなオブジェクトが作成されたか知りえないからです。
( 知ろうとしないし、知ってもせいぜい名前だけしか知ることができないから )

通常winobjで作ったオブジェクトはWin32 APIやsendmsgなどを使ってコントロールします。

ただし、やろうと思えばできないことはないです。( 動作確認済み・副作用未確認 )
HSPの標準オブジェクトや、拡張プラグインで提供されるオブジェクトは
HSPOBJINFOというデータで管理されています。

listboxにはlistboxのデータ、winobjにはwinobjのデータが格納されています。
これを、winobjで作ったHSPOBJINFOをlistboxのHSPOBJINFOに変えてやります。
具体的にはダミーのlistboxを一旦作り、HSPOBJINFOをどこかに退避しておいて、
ダミーのlistboxを削除後、winobjでリストボックスを作り、
退避しておいたHSPOBJINFOをwinobjのHSPOBJINFOに上書き( ハンドルを除く )。

このようにしたwinobjで作ったリストボックスは、listbox同様に、
>listbox p1, p2, p3
p1に選択項目が反映されます。またobjprmで項目の内容を変更することもできます。

ただし副作用があるかもしれないのと、HSPOBJINFOはHSPが管理するリソースなので、
それをユーザーが書き換えるということはあまり望ましくないため、コードは載せません。



ONION software Copyright 1997-2021(c) All rights reserved.