Små illustrative eksempler

Brugerhjælp og support til makroer i LibreOffice Basic

Moderators: Lodahl, LarsBrandi

Post Reply
dp
Posts: 13
Joined: 13. Sep 2005 17:19

Små illustrative eksempler

Post by dp »

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:

Code: Select all


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
mvh
Svend Daugaard Pedersen
Lodahl
Posts: 1961
Joined: 14. Sep 2005 08:27
Location: Storkøbenhavn
Contact:

Post by Lodahl »

Her er lidt mere information: http://udk.openoffice.org/.

Det vil være en rigtog god idè at lave en samling eksempler. Dit bidrag er jo en start. Hermed en opfordig til andre om også at bidrage.
Med venlig hilsen

Leif Lodahl
Blog: https://libreofficedk.blogspot.dk
LibreOffice: http://da.libreoffice.org
ovnsmed
Posts: 1
Joined: 20. May 2015 09:20

Re: Små illustrative eksempler

Post by ovnsmed »

Her med et eksempel på et trækonsruert med sql og "for to next" samt index
En om skrivning af https://wiki.openoffice.org/wiki/Going_ ... ee_Control

Code: Select all


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
Post Reply