0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VB6ユーザー必見!ActiveX版InputManコンボボックスで一歩先のUIを実現!

Last updated at Posted at 2024-12-31

ごあいさつ

こんにちは、「エイジ@フジワーランド」です
フリーでパッケージシステムの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. フォントの大きさによって高さが自動で決まってしまう

フォントを指定すると高さを自動で合わせてもらえるのは便利なのですが、調整はできないです
image.png

プロパティウィンドウで設定するとエラーになります
image.png

他のコントロールと高さが合わないのでコンボボックスに合わせたデザインにするしかないですね
image.png

2. フラットデザインにできない

高さ合わせてフォームの色変えても 3Dは固定なのでフラットデザインにできないです
image.png
※画像に検索ボタンとして使用しているコマンドボタンもフラットにできないですがイメージコントロール代用すればいいので問題ではないです

InputManのコンボボックスを使用すると…

1. フォントの大きさに関わりなく高さ設定可能

画像は AlignVerticalプロパティを 2-中央揃え に設定していますが、しっかりかゆいところに手が届いてる感じです
image.png

2. フラットデザインにできる

右のリスト開くボタンは3Dままですが…まあ入力域がフラットになるだけで画面デザインが統一感出てスッキリします
image.png

標準コンボボックスとのコーディングの違い

1. 標準コンボボックスの場合

新規フォームにコンボボックスを貼り付けます
image.png

コード例

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

実行結果
フォントサイズをコードで大きくしたので高さが自動で大きくなっています
image.png

選択リストも指定フォントで自動調整されています
image.png

InputManのコンボボックスの場合

新規フォームにInputManのコンボボックスを貼り付けます
image.png

コード例

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

実行結果
フォントサイズ変更しましたが高さは変わらずです
image.png

選択リストは自動調整されてました
image.png

サンプル

仕入先マスタをリストに設定し、選択されたらテキストボックスに選択コードをセットするサンプルです
仕入先コードを入力してEnterキーでコンボボックスをコードにあわせるコードも実装してみました

InputManのテキストボックスとコンボボックスを貼り付けます
image.png

フォームコードに以下を貼り付けてください

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

実行してみます
image.png

「1」を入力して Enter を押すとこうなります
image.png

コンボボックスのリストを開いて
image.png

仕入先名を選択すると、テキストボックスにコードが反映されます
image.png

おわりに

どれだけニーズがあるかわかりませんがVB6の知見を少しでも言語化して記事にしていきたいと思います
よければこの記事を参考にしてActiveX版InputManコンボボックスを積極的に活用してみてください
みなさんの作業効率が少しでもあがることを願います

最後まで読んできただきありがとうごいました

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?