ユーザーが複数の可能なエントリの1つを選択するカスタムダイアログを作成しています。リストボックスを使用して、選択可能なエントリを一覧表示します。Libre Officeのカスタムダイアログボックス
各行には複数の変数がありますので、テーブルを使用してエントリを正しく整列させたいと考えています。そうする可能性はありますか?
私が持っているもの:
abcdefg hijkl mnopq
abcd efghilkl mno
ユーザーが複数の可能なエントリの1つを選択するカスタムダイアログを作成しています。リストボックスを使用して、選択可能なエントリを一覧表示します。Libre Officeのカスタムダイアログボックス
各行には複数の変数がありますので、テーブルを使用してエントリを正しく整列させたいと考えています。そうする可能性はありますか?
私が持っているもの:
abcdefg hijkl mnopq
abcd efghilkl mno
は、固定幅のリストボックスのフォント、およびパッドスペースで文字列を使用してください:私が欲しいもの
abcdefg hijkl mnopq
abcd efghijk lmno
。それらのすべてではないが、LibreOfficeの基本で働くもののBasicのパッド列へ
Sub PaddedListboxItems
oListBox.addItems(Array(
PaddedItem(Array("abcdefg", "hijkl", "mnopq")),
PaddedItem(Array("abcd", "efghijk", "lmno"))), 0)
End Sub
Function PaddedItem(item_strings As Array)
PaddedItem = PadString(item_strings(0), 10) & _
PadString(item_strings(1), 11) & item_strings(2)
End Function
Function PadString(strSource As String, lPadLen As Long)
PadString = strSource & " "
If Len(strSource) < lPadLen Then
PadString = strSource & Space(lPadLen - Len(strSource))
End If
End Function
より多くの方法は、http://www.tek-tips.com/viewthread.cfm?qid=522164です。
はい、可能です。
新しいダイアログを作成し、下部にラベルを追加します。 新しいモジュールを作成し、次のコードを追加します。
Option Explicit
Option Base 0
Dim oDialog1 As Object, oDataModel As Object, oListener As Object
Sub OpenDialog()
Dim oGrid As Object, oGridModel As Object, oColumnModel As Object, oCol As Object
Dim oLabel1 As Object, rect(3) As Integer
DialogLibraries.LoadLibrary("Standard")
oDialog1 = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
oGridModel = oDialog1.getModel().createInstance("com.sun.star.awt.grid.UnoControlGridModel")
oLabel1 = oDialog1.getModel().getByName("Label1")
rect(0) = oLabel1.getPropertyValue("PositionX")
rect(1) = 10
rect(2) = oLabel1.getPropertyValue("Width")
rect(3) = oLabel1.getPropertyValue("PositionY") - 2*rect(1)
With oGridModel
.PositionX = rect(0)
.PositionY = rect(1)
.Width = rect(2)
.Height = rect(3)
End With
oColumnModel = oGridModel.ColumnModel
oCol = oColumnModel.createColumn()
oCol.Title = "Column 1"
oColumnModel.addColumn(oCol)
oCol = oColumnModel.createColumn()
oCol.Title = "Column 2"
oColumnModel.addColumn(oCol)
oCol = oColumnModel.createColumn()
oCol.Title = "Column 3"
oColumnModel.addColumn(oCol)
oDialog1.getModel().insertByName("grid", oGridModel)
oGrid = oDialog1.getControl("grid")
oListener = (CreateUnoListener("grid_", "com.sun.star.awt.grid.XGridSelectionListener"))
oGrid.addSelectionListener(oListener)
oDataModel = oGridModel.GridDataModel
oDataModel.addRow("a", Array("abcdefg", "hijkl", "mnopq"))
oDataModel.addRow("b", Array("abcd", "efghijk", "lmno"))
oDialog1.execute()
oDialog1.dispose()
End Sub
選択した行の値を取得するには、grid_selectionChanged
イベントのリスナーを追加します。あなたはすべて正しくなかった場合はOpenDialog
を実行することにより、
Sub grid_selectionChanged(ev)
Dim oRows() As Object, oLabel1 As Object, sCells(2) As String
oRows = ev.Source.getSelectedRows()
oLabel1 = oDialog1.getModel().getByName("Label1")
sCells(0) = oDataModel.getRowData(oRows(0))(0)
sCells(1) = oDataModel.getRowData(oRows(0))(1)
sCells(2) = oDataModel.getRowData(oRows(0))(2)
oLabel1.setPropertyValue("Label", "Selected values: " + sCells(0) + "," + sCells(1) + "," + sCells(2))
End Sub
グリッドを取得する必要があります: