ListBoxで桁をあわせるには?


バブルボ  2006-01-11 12:06:55  No: 19579  IP: 192.*.*.*

ListBox を使って桁あわせをしたいのです。
(TListBox のような動作をする)
↓このような感じ
-----------------------------------
(1234,  234)   AAA
( 234, 1234)   BBB
-----------------------------------
どうすればよいのでしょうか?
スペースの部分で大きくずれるようです。

(1234,  234)  AAAAAA
( 234, 1234)  BBBBBB
←第1部→    ←第2部→

第2部の頭だけ合わせる格好でもよいので
方法をおしえてもらえませんか?

StringGridをつかっ他のですが、TListBoxのマルチセレクト機能が使えませんでした。(連続した選択は可能でしたが、飛び飛びの選択ができなかった。)
これができればStringGridでも代用ができるのですが。

TListBox の StdCtrls.pas をコピーして、TCustomListBoxEx,TListBoxEx
を作成して、表示している部分を変更したものを作ろうと思ったのですが
コンポーネント内では表示していないみたいです。

動作するOSが不明なので、指定したFontが標準で装備していない可能性が
あり、Font指定できないのがネックとなっています。

編集 削除
横ヤリ  2006-01-11 12:14:09  No: 19580  IP: 192.*.*.*

1)MSゴシック等の等幅フォントを使う
2)Format関数等で、文字数を合わせて格納する

編集 削除
これは?  2006-01-11 12:44:28  No: 19581  IP: 192.*.*.*

TListViewではダメでしょうか?

・第一部をCaption
・第二部以降をSubItems
・CheckboxesをTrueにすれば,Captin部分にチェックボックスが出てきます

Delphi7しか触ったことないので,他の環境ではちょっとわかりませんが・・・

編集 削除
バブルボ  2006-01-11 13:47:29  No: 19582  IP: 192.*.*.*

これは?さんどうもありがとうございます。

ちょっと  TListView  を使ってみました
さわりの部分をみたところ、なんとか使えそうです。
どうもありがとうございました。


横ヤリさん、
>MSゴシック等の等幅フォントを使う
最初の質問でも記入しましたが、
<動作するOSが不明なので、指定したFontが標準で装備していない可能性が
<あり、Font指定できないのがネックとなっています。
ということで、
日本語OSだけなら問題ないのですが、
対象となるOSが各国それぞれ共通になっていないので
フォントを固定にすることができません。
すみません。

編集 削除
横ヤリ  2006-01-11 15:06:33  No: 19583  IP: 192.*.*.*

> 日本語OSだけなら問題ないのですが、
> 対象となるOSが各国それぞれ共通になっていないので
> フォントを固定にすることができません。
どっちかってぇと、OSじゃなくて多国語対応ってわけですな。
「変なこと書いてるな」なんて思いつつレスしてしまいました。
すいません。

ちなみに、D5では、TListViewをViewStyle=vsReportで使用すると、
exe名.manifest による対応も含めて、XPのビジュアルスタイル表示すると
kernel32.dllの読み込み違反が多発しています。

あとは、OwnerDraw を使い、
Canvas.TextWidth('W') とか、一番幅が広そうな一文字を基準に幅計算。
あとは、一文字ずつ、↑の計算幅で文字描画していくというのもありかと思います。


ちなみに、Font.Picth = fpFixed ではだめなんでしょうか?
> Windows は指定されたすべてのフォント特性にもっともよく一致するものを探します。
ということで、固定ピッチにならない可能性もありそうな気も・・・。

編集 削除
にしの  2006-01-11 15:12:37  No: 19584  IP: 192.*.*.*

一文字ずつ描画するなら、APIのExtTextOutWでよろしいかと。
# Unicodeで表示する必要がなければ、ExtTextOutでOKです。

編集 削除