ごあいさつ
こんにちは、「エイジ@フジワーランド」です
フリーでパッケージシステムのOEM供給やってます、最近暇なので時給でSESもやってます
パッケージはVB6でがっつり作り込んでしまっているので未だにVB6をガリガリ使ってます
さて今回はActiveX版InputMan7.0 コンボボックスの話です
ActiveX版InputManコンボボックスとは
InputManはVB2のVBX時代から人気のあるサードパーティコンポーネントですが、コンボボックスはActiveX版InputManの最終バージョンである7.0より追加されたocxのようです
それまでのバージョンになかったocxなので コンボボックスについては独自で機能拡張した自作ocxなどで使用してしまって、このocxを使用している人は少ないようです
プロパティも豊富にあるので使い込めば良さげなコントロールですが、なんせ情報が少ない…標準と使い勝手が違うためリストを作成するのもなかなか時間がかかりました
私のようにいまだにVB6使っている人は少ないとは思いますが、その少ない同志たちのお役にたてればと思い記事を書いてみました
この記事でわかること
標準コンボボックスの代替としてActiveX版InputMan7.0 コンボボックスを使う方法を簡単に解説します
豊富な機能についてはこれから使い込んで別記事を書く予定です…
標準コンボボックスの弱点
テキスト入力はInputManを使用してコンボボックスは標準のものを使っていましたが、スマホっぽい画面を作り込む必要があったので標準コンボではどうしても対応できないところがありました
1. フォントの大きさによって高さが自動で決まってしまう
フォントを指定すると高さを自動で合わせてもらえるのは便利なのですが、調整はできないです
他のコントロールと高さが合わないのでコンボボックスに合わせたデザインにするしかないですね
2. フラットデザインにできない
高さ合わせてフォームの色変えても 3Dは固定なのでフラットデザインにできないです
※画像に検索ボタンとして使用しているコマンドボタンもフラットにできないですがイメージコントロール代用すればいいので問題ではないです
InputManのコンボボックスを使用すると…
1. フォントの大きさに関わりなく高さ設定可能
画像は AlignVerticalプロパティを 2-中央揃え に設定していますが、しっかりかゆいところに手が届いてる感じです
2. フラットデザインにできる
右のリスト開くボタンは3Dままですが…まあ入力域がフラットになるだけで画面デザインが統一感出てスッキリします
標準コンボボックスとのコーディングの違い
1. 標準コンボボックスの場合
コード例
Option Explicit
Private Sub Form_Load()
With Combo1
.FontName = "Meiryo UI"
.FontSize = 24
.Clear
.AddItem "仕入先0001": .ItemData(.NewIndex) = 1
.AddItem "仕入先0002": .ItemData(.NewIndex) = 2
.AddItem "仕入先0003": .ItemData(.NewIndex) = 3
End With
End Sub
実行結果
フォントサイズをコードで大きくしたので高さが自動で大きくなっています
InputManのコンボボックスの場合
新規フォームにInputManのコンボボックスを貼り付けます
コード例
Option Explicit
Private Sub Form_Load()
With imCombo1
With .Font
.Name = "Meiryo UI"
.Size = 24
End With
With .Items
.Clear
Dim ipc As Object
.AddItem ipc, "仕入先0001", "0001"
.AddItem ipc, "仕入先0002", "0002"
.AddItem ipc, "仕入先0003", "0003"
End With
.AlignVertical = imAlignVCenter
.Text = ""
End With
End Sub
サンプル
仕入先マスタをリストに設定し、選択されたらテキストボックスに選択コードをセットするサンプルです
仕入先コードを入力してEnterキーでコンボボックスをコードにあわせるコードも実装してみました
InputManのテキストボックスとコンボボックスを貼り付けます
フォームコードに以下を貼り付けてください
Option Explicit
Private Sub Form_Load()
With imText1
With .Font
.Name = "Meiryo UI"
.Size = 24
End With
.AlignHorizontal = imAlignHCenter
.AlignVertical = imAlignVCenter
.MaxLength = 4
.HighlightText = True
.Text = ""
End With
With imCombo1
With .Font
.Name = "Meiryo UI"
.Size = 24
End With
With .Items
.Clear
Dim ipc As Object
.AddItem ipc, "山川商事", "0001"
.AddItem ipc, "毎朝新聞社", "0002"
.AddItem ipc, "帝都エレクトロニクス", "0003"
End With
.AlignVertical = imAlignVCenter
.Style = imDropDownList
End With
End Sub
Private Sub imCombo1_SelectedIndexChanged()
With imCombo1
If .SelectedIndex >= 0 Then
imText1.Text = .SelectedItem.Description
End If
End With
End Sub
Private Sub imText1_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyReturn
Call SetComboFromText(imCombo1, imText1)
End Select
End Sub
Private Sub SetComboFromText(comboBox As Control, textBox As Control)
With textBox
Dim L_CD As String
L_CD = Right(String(.MaxLength, "0") & .Text, .MaxLength)
.Text = L_CD
.SelLength = .MaxLength
End With
With comboBox
Dim L_i As Integer
For L_i = 0 To .Items.Count - 1
If .Items(L_i).Description = L_CD Then
.SelectedIndex = L_i
Exit Sub
End If
Next
End With
End Sub
仕入先名を選択すると、テキストボックスにコードが反映されます
おわりに
どれだけニーズがあるかわかりませんがVB6の知見を少しでも言語化して記事にしていきたいと思います
よければこの記事を参考にしてActiveX版InputManコンボボックスを積極的に活用してみてください
みなさんの作業効率が少しでもあがることを願います
最後まで読んできただきありがとうごいました