2017-04-24 13 views
1

ユーザーが複数の可能なエントリの1つを選択するカスタムダイアログを作成しています。リストボックスを使用して、選択可能なエントリを一覧表示します。Libre Officeのカスタムダイアログボックス

各行には複数の変数がありますので、テーブルを使用してエントリを正しく整列させたいと考えています。そうする可能性はありますか?

私が持っているもの:

abcdefg hijkl  mnopq 
abcd  efghilkl mno 

答えて

0

は、固定幅のリストボックスのフォント、およびパッドスペースで文字列を使用してください:私が欲しいもの

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です。

0

はい、可能です。

新しいダイアログを作成し、下部にラベルを追加します。 新しいモジュールを作成し、次のコードを追加します。

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 

グリッドを取得する必要があります:

enter image description here

関連する問題