[GELÖST] PushButton per Makro auf Höhe einer Reihe erstellen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Mephisto
**
Beiträge: 34
Registriert: Do, 08.12.2011 15:26

[GELÖST] PushButton per Makro auf Höhe einer Reihe erstellen

Beitrag von Mephisto »

Hallo zusammen!

Ich möchte einen Button via Makro hinzufügen.
Der Code von Axel Richter funktioniert auch einwandfrei (vielen Dank an der Stelle schonmal ;) )
Ich zitiere an dieser Stelle am Besten nochmal den Code:

Code: Alles auswählen

sub addButton

  oSheet = thiscomponent.sheets(0)

  oPage = oSheet.drawpage
 
  Dim aPoint As New com.sun.star.awt.Point
  Dim aSize As New com.sun.star.awt.Size
 
  aPoint.x = 10000
  aPoint.y = 10000
  aSize.Width = 10000
  aSize.Height = 1600
 
  btn = thiscomponent.createInstance("com.sun.star.drawing.ControlShape")
  oControlModel = thiscomponent.createInstance( "com.sun.star.form.component.CommandButton" )
  btn.control = oControlModel
 
  btn.Size = aSize
  btn.Position = aPoint
 
  btn.Control.Label = "Klick mich!"
 
  oPage.add(btn)
 
  oForm = btn.control.parent
 
  nIndex = oForm.Count-1 'Der Button wurde soeben eingefügt, deshalb ist es sehr wahrscheinlich, dass er das letzte Element der Controls-Liste der Form ist.
 
  Dim oEvent as new com.sun.star.script.ScriptEventDescriptor
  oEvent.ListenerType = "com.sun.star.awt.XActionListener"
  oEvent.EventMethod = "actionPerformed"
  oEvent.ScriptType = "StarBasic"
  oEvent.ScriptCode = "vnd.sun.star.script:Standard.Module1.test"
  oForm.registerScriptEvent(nIndex, oEvent)
 
  thiscomponent.currentcontroller.setformdesignmode(false)
 
end sub

sub test(oEvent)
xray oEvent
end sub

Was ich aber (noch) möchte, ist folgendes:

Ich habe ein Sheet in das eine dynamische Anzahl an Reihen eingefügt wird. Am Ende jeder Reihe soll ein Button erscheinen, der das Bearbeiten der jeweiligen Zeile ermöglichen soll.
Wie schaffe ich es also, dass

1. Der Button auf der richtigen Höhe erscheint? Ich könnte zwar "hardcoded" die y-Position festlegen, aber sobald ich die Höhe einer Zeile veränder kommt das System durcheinander und die Buttons sind nicht mehr auf der richtigen Höhe.
Ideal wäre, wenn ich quasi eine Zelle mit einem Button "füllen" könnte, dass mein Button also z.B. das Feld "A1" füllt ? (ich hoffe es ist verständlich was ich meine)

2. beim Klick des jeweiligen Buttons die Information, wo er sich befindet mit übergeben wird, sodass der Button eine Sub modifyRow(rownumber as Integer) aufrufen kann?


Wäre über Hilfe sehr dankbar!
Zuletzt geändert von Mephisto am Do, 15.12.2011 13:22, insgesamt 1-mal geändert.
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: PushButton per Makro auf Höhe einer Reihe erstellen

Beitrag von F3K Total »

Hallo,
wenn es nicht unbedingt ein Button sein muß, kannst Du auch ein Tabellenereignis nehmen um die aktuelle Zeile zu erwischen, siehe Anlage.
Gruß R
Dateianhänge
Calc_Row_Event.ods
(8.42 KiB) 107-mal heruntergeladen
Mephisto
**
Beiträge: 34
Registriert: Do, 08.12.2011 15:26

Re: PushButton per Makro auf Höhe einer Reihe erstellen

Beitrag von Mephisto »

Vielen Dank für deine Hilfe! So habe ich mir das vorgestellt (vom optischen her :-P )

Aber ich versteh nicht ganz, was du da machst.
Die Tatsache, dass bei mir beim klicken auf die Zellen nichts passiert, macht es auch nicht gerade einfacher.
Wenn ich den Code richtig lese willst du bei den spalten 0-4 die hintergrundfarbe auf RGB(247,148,30) setzten.

Aber was muss man machen, damit das makro ausgeführt wird?
Und wie füge ich die Felder via Makro in die passende Zelle ein?

(ich glaub ich steh grad bisschen auf dem Schlauch)
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: PushButton per Makro auf Höhe einer Reihe erstellen

Beitrag von F3K Total »

Hi Mephisto,
Makros läßt Du zu?
Wenn es dann nicht läuft, liegt es vielleicht an der OOo-Version.
Ich habe 3.3, und da gibt es (Rechtsklick auf den Tabellenreiter) das Menü "Tabellenereignisse". Dem Tabellenereignis "Auswahl geändert" habe ich das Makro zugeordnet, und, genau, bei mir werden die Zellen links von "klick", bei Klick auf "klick", orange eingefärbt.

Gruß R
Mephisto
**
Beiträge: 34
Registriert: Do, 08.12.2011 15:26

Re: PushButton per Makro auf Höhe einer Reihe erstellen

Beitrag von Mephisto »

Makros hab ich selbstverständlich zugelassen.
Allerdings habe ich Version 3.2. Kann gut sein dass es daran liegt.
Werde mal updaten. Melde mich dann morgen wieder. Vielen dank schonmal für die Hilfe!
Mephisto
**
Beiträge: 34
Registriert: Do, 08.12.2011 15:26

Re: PushButton per Makro auf Höhe einer Reihe erstellen

Beitrag von Mephisto »

So. Mit OOo 3.3 funktioniert es nun.
Und es ist auch genau das, was ich haben möchte.

Die Preisfrage lautet nun: wie kann ich ein Tabellenereignis via Makro hinzufügen?


Edit: Und noch eine Frage hinterher. Wie kann ich mehrere CellRanges spezifizieren? Also zum Beispiel Spalte C und Spalte E gleichzeitig? getCellRangeByName("C1:C99" , "E1:E99") funktioniert nicht ^^ Aber ich finde dazu auch nichts...

Edit2: Nach sehr langer Suche jetzt endlich das 2. Problem gelöst!

Code: Alles auswählen

Sub SelectMultipleRanges
    oRanges = thisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
    oR1 = thisComponent.Sheets(1).getCellRangeByName("D1:E124")
    oR2 = thisComponent.Sheets(1).getCellRangeByName("M1:M124")
    oRanges.addRangeAddress(oR1.RangeAddress, True)
    oRanges.addRangeAddress(oR2.RangeAddress, True)
    
    thisComponent.CurrentController.select(oRanges)
End Sub
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: PushButton per Makro auf Höhe einer Reihe erstellen

Beitrag von F3K Total »

Hi Mephisto,
Mephisto hat geschrieben:Die Preisfrage lautet nun: wie kann ich ein Tabellenereignis via Makro hinzufügen?
So zum Beispiel:

Code: Alles auswählen

sub replace_table_event
osheet=thiscomponent.sheets(0)'Tabelle 1
Dim aEventArgs(1) as new com.sun.star.beans.PropertyValue
aEventArgs(0).Name = "EventType"
aEventArgs(0).Value = "Script"
aEventArgs(1).Name = "Script"
aEventArgs(1).Value = "vnd.sun.star.script:Standard.Module1.get_row?language=Basic&location=document" 'Pfad zum Makro, es gibt auch: location=application
osheet.Events.replaceByName("OnSelect",aEventArgs)
end sub
Gruß R
Mephisto
**
Beiträge: 34
Registriert: Do, 08.12.2011 15:26

Re: PushButton per Makro auf Höhe einer Reihe erstellen

Beitrag von Mephisto »

Vielen Dank für deine Antwort.

Deinen Code werde ich in ruhe (morgen) nochmal durchkauen müssen, um wirklich zu verstehen, was du da genau machst.

Aber solange hätte ich noch eine kleine andere frage:
Ich habe über den Dialog Editor einen Dialog erzeugt. Wenn dieser ausgeführt wird, möchte ich aber weiterhin auf mein Sheet zugreifen können.
Es geht hierbei um ein Suchfenster. Man sollte z.B. in der Lage sein, während das Suchfenster offen ist durch das Dokument zu Scrollen.
An welcher Stelle muss ich da welchen Wert setzten?

(falls es relevant sein sollte der zugehörige Code)

Code: Alles auswählen

	if Dlg.Execute() = 1 THEN
			' Ich kann mir gut vorstellen, dass an dieser Stelle was in die Richtung dlg.gibHintergrundFrei() kommen muss???
			With oDescriptor
		    	.SearchString = Dlg.getControl("KeyWords").getText()
		    	.SearchWords = false           'The attributes default to False
		    	.SearchCaseSensitive =     	CBool( Dlg.getControl("CaseSensitive").getState() )
		    	.SearchRegularExpression = 	CBool( Dlg.getControl("RegEx").getState() )
		    	.SearchBackwards = 			CBool( Dlg.getControl("Backward").getState() )
		  	End With
	ELSE
		Exit sub
	END IF

  	' Find the first one
  	oFound = oRanges.findFirst(oDescriptor)
  	Do While Not IsNull(oFound)
  		thisComponent.CurrentController.select( thisComponent.Sheets(1).getCellByPosition(oFound.CellAddress.column ,oFound.CellAddress.row) )
  		
  		if Dlg.Execute() = 1 THEN
			With oDescriptor
		    	.SearchString = Dlg.getControl("KeyWords").getText()
		    	.SearchWords = false           'The attributes default to False
		    	.SearchCaseSensitive =     	CBool( Dlg.getControl("CaseSensitive").getState() )
		    	.SearchRegularExpression = 	CBool( Dlg.getControl("RegEx").getState() )
		    	.SearchBackwards = 			CBool( Dlg.getControl("Backward").getState() )
		  	End With
		ELSE
			Exit sub
		END IF
  		
    	oFound = oRanges.findNext(oFound, oDescriptor)
  	Loop
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: PushButton per Makro auf Höhe einer Reihe erstellen

Beitrag von F3K Total »

... Wenn Du keinen Ärger mit dem Moderator haben möchtest, machst Du besser einen neuen Thread für ein neues Thema auf ...
Gruß R
Mephisto
**
Beiträge: 34
Registriert: Do, 08.12.2011 15:26

Re: PushButton per Makro auf Höhe einer Reihe erstellen

Beitrag von Mephisto »

Hm ok.
Dachte es wäre eine Kleinigkeit und keinen eigenen Thread Wert. aber ok.

Was deinen vorletzten Beitrag angeht: Es hat nun geklappt :D :D :D
Hat ich viel Zei tund Nerfen gekostet, aber jetzt funktioniert es so, wie ich es haben möchte.
Vielen, vielen Dank!
Antworten