Jeg savner i høj grad små selvforklarende eksempler i brug af OOo-makroer. Jeg har søgt på nettet og ganske vist findes der eksempler. Men de er ofte svære at overskue da mange er pakket ned i zip-filer og ofte er det store indviklede programmer.
Hvis der er nogle der ligger inde med små illustrative eksempler, så synes jeg de skulle offentliggøre dem. Her er mit beskedne startbidrag:
REM ***** BASIC *****
REM *** Søg efter en værdi i et lodret celleområde og returnér nummer
REM *** på fundet position eller nul hvis værdi ikke findes.
REM ***
REM *** Eksempel på brug i Calc: =ROWINDEX(B1;$Ark1.A5:A330;C2)
REM *** Her er
REM *** - B1 en celle indeholdende værdien af elementet der skal findes
REM *** - $Ark1.A5:A330 området der skal søges i (her i et andet ark)
REM *** - C2 er positionen hvor søgningen starter (hvis C2 er 7, søges i om-
REM *** rådet $Ark1.A12:A330, men den returnerede position er relativ til A5).
REM ***
FUNCTION ROWINDEX(value,vector AS VARIANT,offset) AS Integer
FOR i = offset+1 TO UBound(vector)
IF vector(i,1) = value THEN
ROWINDEX = i
EXIT FUNCTION
END IF
NEXT
ROWINDEX = 0
END FUNCTION
REM *** Søg efter en værdi i et vandret celleområde og returnér nummer
REM *** på fundet position eller nul hvis værdi ikke findes.
REM ***
REM *** Eksempel på brug i Calc: =COLINDEX(B1;A5:Y5;C2)
REM *** Her er
REM *** - B1 en celle indeholdende værdien af elementet der skal findes
REM *** - A5:Y5 området der skal søges i
REM *** - C2 er positionen hvor søgningen starter (hvis C2 er 3, søges i om-
REM *** rådet D5:Y5, men den returnerede position er relativ til A5).
REM ***
FUNCTION COLINDEX(value,vector AS VARIANT,offset) AS Integer
FOR i = offset+1 TO UBound(vector,2)
IF vector(1,i) = value THEN
COLINDEX = i
EXIT FUNCTION
END IF
NEXT
COLINDEX = 0
END FUNCTION
REM ***** BASIC *****
'TreeControl
'først en tak til Björn Michaelsen og SergeMoutou fra oppen offis for en god wiki tekst.
private oTreeControlDialog as object
public oTreeControl as object
private oMutableTreeDataModel as object
private oTreeModel as object
Private oRootNode as Object, oChildNode as Object, ogNode as Object
Sub TreeControl
dim oRoot as object
dim oParent as object
dim oChild as object
Dim oTreeCtrl As object
Dim Context
Dim DB
Dim Conn
Dim Stmt
Dim Result
Dim strSQL As variant
dim iLevel as integer
DialogLibraries.loadLibrary("Standard") ' load dialog bibliotek
oTreeControlDialog = CreateUnoDialog(DialogLibraries.Standard.Dialog1) 'konstruer dialog
oTreeControlDialog.Model.Title = "ET TRÆ" ' titel på dialogen
oMutableTreeDataModel = createUnoService("com.sun.star.awt.tree.MutableTreeDataModel")
'uno service der kan konstruer et Tree
'giver roden et navn
oRoot = oMutableTreeDataModel.createNode("KATEGORIER", true) 'NAVEN RODEN
oMutableTreeDataModel.setRoot(oRoot) ' planter roden
'konstruer perent 0 til 3 med sql
Context=CreateUnoService("com.sun.star.sdb.DatabaseContext")
DB=Context.getByName("TREECONTROL")' eget navn på database kan bruges
Conn=DB.getConnection("","")
Stmt=Conn.createStatement()
strSQL="SELECT *FROM"&chr(34)&"KATEGORIER"& chr(34) ' her kunne jeg så godt tænk mig en nemmer måde at finde data på.
Result=Stmt.executeQuery(strSQL)
While Result.Next
lgl= Result.getint(1) 'id heltal
jgl =Result.getString(2)' tekst warcher
'her konstruer vi og på haenger dem.
oRoot.appendChild(oMutableTreeDataModel.createNode(lgl & chr(32) & jgl , false))'
Wend
'konstruer og påhængning i korte dele
oParent2 = oMutableTreeDataModel.createNode("4 dyr", false)' bemærk her falsk og true dander håndtag for en ny undergruppe
oRoot.appendChild(oParent2)
oParent3 = oMutableTreeDataModel.createNode("5 fisk", true)
oRoot.appendChild(oParent3)
' paa haengning af fiske grupper under fisk
for iLevel = 1 to 10
oParent3.appendChild(oMutableTreeDataModel.createNode("Fiske Gruppe" & str(iLevel), false))
next iLevel
' ind saeter en node efter index bestemelserne
oRoot.insertChildByIndex(6,oMutableTreeDataModel.createNode("Fejl", false)
'kontruer liste tl anvise extra data
Bund = oRoot() 'rod
oChild1 = oRoot.getChildAt(0) '0
oChild2 = oRoot.getChildAt(1) '1
oChild3 = oRoot.getChildAt(2) '2
Bund.datavalue = "rod"
oChild1.dataValue = "FD"
oChild2.dataValue = "flit tavle"
oChild3.dataValue = "Some data for child 1"
' bygger trae og starter dialogen
oTreeControl = oTreeControlDialog.getControl("TreeControl1")
oTreeModel = oTreeControl.Model
oTreeModel.DataModel = oMutableTreeDataModel
oTreeControlDialog.execute()
End Sub
Sub Ok
dim oNode as object
if oTreeControl.selectionCount > 0 then
oNode = oTreeControl.view.getSelection()
'finder den higligtde node og viser den
msgbox("Valgte emne " & oNode.displayValue)
'under sæger om der er extra data
if not isNull(oNode.dataValue) then
'Hviser extra data
msgbox(oNode.dataValue)
end if
' lukker dialogen
oTreeControlDialog.endExecute()
end if
End Sub
Konstruer en register database.
Dialogen skal indeholde et træ og en knap sub ok bindes til knap