私は、列に文字列を表示するコンボボックスを描いたオーナーを持っています。何らかの理由で列指定をOnDrawItemイベントに渡すことができれば、描画ルーチンをコンボで共有することができます。これを行う自然な方法は、列幅の配列をComboBox.Tagプロパティに渡して、それを配列にキャストすることです。配列をポインタにキャストして戻す方法はありますか?
私のように列配列を定義します。
const arrWidth :array[1..4] of integer = (100,100,100,70);
とにTagプロパティを設定します。
ComboBox.Tag := integer(@arrWidth);
、その後、OnDrawItemイベントで、配列に戻ってそれをキャスト:
Widths :array of integer;
Widths := pointer(ComboBox.Tag);
配列要素はきれいに見えますが、配列の長さはわかりません。あらゆる種類のランダムな値ではずっと長いようです。
私は動的配列を使用しようとしましたが、適切な列値を取得できませんでした。
代替タスクに専用のプロパティに値を格納する子孫を書き、そしてcombo-をマップ(TDictionaryのような)連想配列内の列の幅を格納することを含みますboxインスタンスを幅の配列に変換します。 –
コメントありがとうございます。私は子孫を作ることを検討しましたが、それはあまりにも多くの努力と見なしました。おそらく、将来的にはフォームをより保守的にするでしょうが、これは15年ぶりのことです。私はコラムボックスを必要としていたので、再利用するとは思わなかったです。 –