Położenie radiobutton'a

Makropolecenia i funkcje w języku Basic
bsjhx
Posty: 7
Rejestracja: śr lip 09, 2014 12:26 pm

Położenie radiobutton'a

Post autor: bsjhx »

Witam,

jest jakiś sposób, aby uzyskać informację nad jaką komórką arkusza znajduje się dany radiobutton? Kod nad którym pracuję:

Kod: Zaznacz cały

Sub getStatesOfForms

rem declarations

	Dim Sheet As Object
	Dim DrawPage As Object
	Dim Form As Object
	Dim Form2 As Object
	Dim Ctl As Object
	Dim I as Integer
	Dim J As Integer
	Dim Cell As Object
	Dim Cell2 As Object
	Dim testChar As Integer
	Dim Sheets As Object
	Dim Flags As Long
	Dim CellRange As Object
	Dim countSheets As Object


rem **********************************************************************

Doc = ThisComponent

For J = 0  To Doc.Sheets.Count - 1

	Sheet = Doc.Sheets.GetByIndex(J)   rem ktory index (0 - pierwszy index)
	Sheet.unProtect("")   rem zdjecie ochrony z arkusza (bez hasla)
	DrawPage = Sheet.Drawpage  
	
	
	rem usuwanie komentarzy		
	Cell = Sheet.getCellRangeByName("A1:P50")
	Flags = com.sun.star.sheet.CellFlags.ANNOTATION
	Cell.clearContents(Flags)	
	
	rem w petli do komorki o wspolrzednych (18, I) wpisuje stan danej formatki	
	If DrawPage.Count > 0 then
	Form = DrawPage.Forms.GetbyIndex(0)
		For I = 0 To DrawPage.Count - 1
			Cell2 = Sheet.getCellByPosition(12, I)   ' to bym wyrzucil
			Form2 = Form.GetbyIndex(I)	
			testChar = asc(Form2.name)
			If testChar = 67 or testChar = 79 Then rem sprawdzamy, czy pobrana formatka jest optionbuttonem lub checkboxem (kontrola kodu ASCII pierwszego znaku)
				Cell2.String = Form2.state     'w tym miejscu: pobranie informacji o tej komórce + wpisanie tam stanu
			End If
		Next I
	End If
	
Next J

End Sub

Sub hello

MsgBox "Hello!"

End Sub
To miejsce dokładnie (druga pętla for):

Kod: Zaznacz cały

If testChar = 67 or testChar = 79 Then rem sprawdzamy, czy pobrana formatka jest optionbuttonem lub checkboxem (kontrola kodu ASCII pierwszego znaku)
				Cell2.String = Form2.state     'w tym miejscu: pobranie informacji o tej komórce + wpisanie tam stanu
			End If
Pozdrawiam
OpenOffice 4 na Windows 7
Jan_J
Posty: 4557
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Położenie radiobutton'a

Post autor: Jan_J »

Pierwotna rzecz to odpowiednie zbindowanie kontrolki z komórką; wyrównanie optyczne jest wtórne.
Ja bym użył Binding jak w https://forum.openoffice.org/pl/forum/v ... f=9&t=2669, a potem martwił się, jak ustawić położenie kontrolki. Każda komórka ma pola Position oraz Size, z której możesz odczytać interesujące Cię wartości.
W drugim poście w https://forum.openoffice.org/en/forum/v ... 45&t=46391 pokazane jest, jak programowo ustawić położenie kontrolki.
JJ
LO (7.6) ∙ AOO (4.1) ∙ Python (3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
bsjhx
Posty: 7
Rejestracja: śr lip 09, 2014 12:26 pm

Re: Położenie radiobutton'a

Post autor: bsjhx »

Nie do końca o to mi chodzi:
mam formularz i muszę odczytać wartości wszystkich radiobuttonów i checkboxów. Obecnie ich stany ładuję do jednej kolumny, ale problem jest, że znajdujący się jako pierwszy na formularzu radiobutton, nie jest pierwszy w sensie logicznym (ID jest wyższe, niż innego radiobuttona). Ręczne zmiany nie wchodzą grę: dużo plików, na każdym po 33-34 arkusze (różnego typu, brak standaryzacji). Wymyśliłem więc, że będę pobierał tak jak obecnie po kolei formanty, następnie sprawdzał czy jest to radiobutton lub check box (zaimplementowane już), wykrywał nad jaką komórką on lezy -> stan ładuję do tej komórki. Da coś takiego radę robić?

PS. Formanty nie są połączone z żadnymi komórkami, cokolwiek ręcznie odpada - pełna automatyzacja
PS2. Ewentualny kod/podpowiedź w innym języku mile widziane
OpenOffice 4 na Windows 7
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Położenie radiobutton'a

Post autor: belstar »

https://forum.openoffice.org/pl/forum/v ... 5879#p5879

Wstawiłem tam plik, w którym po wprowadzeniu jakiejś litery do komórki pokazuje dokładnie nad tą komórką pole kombi do wprowadzania dalej danych, czyli kod musi określić położenie komórki. Może to ci pomoże.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
bsjhx
Posty: 7
Rejestracja: śr lip 09, 2014 12:26 pm

Re: Położenie radiobutton'a

Post autor: bsjhx »

Znalazłem taki interfejs: http://www.openoffice.org/api/docs/comm ... indow.html. Doszedłem do niego stąd: http://www.openoffice.org/api/docs/comm ... utton.html. Czy jest możliwość, aby skorzystać z metody getPosSize() tego interfejsu, jeżeli do radioButton'a dobieram się tak:

Kod: Zaznacz cały

Sub main

rem declarations
	dim doc
	Dim Sheet As Object
	Dim DrawPage As Object
	Dim Form As Object
	Dim Form2 As Object
	Dim Ctl As Object

Doc = ThisComponent
Sheet = Doc.Sheets.GetByIndex(0)
DrawPage = Sheet.Drawpage 
Form = DrawPage.Forms.GetbyIndex(0)	
Form2 = Form.Getbyindex(FormName) rem Form2 to jest moja formatka
OpenOffice 4 na Windows 7
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Położenie radiobutton'a

Post autor: belstar »

W załączniku makro podające pozycje, do jakiej komórki (arkusza) formant jest zakotwiczony i jego stan. Myślę że jest to o co ci chodzi.

Ps. Po przemyśleniu doszedłem do wniosku że jedyne czego ci potrzeba to zakotwiczenie. Wstaw sobie kod wstawiający stan formantu do zakotwiczonej komórki i to tyle, uprzednio zakotwiczając formanty do komórek czy to ręcznie czy jakimś automatem.
Makro pomija wszystkie formanty nie będące radiobuttonem, checkboxy sobie dopisz sam, podmieniając linię:

Kod: Zaznacz cały

ServiceName = "stardiv.one.form.component.RadioButton"
Załączniki
Podaj_Poz_Kotwice_Stan.ods
(16.28 KiB) Pobrany 230 razy
LibreOffice 5.1.2.2 Ubuntu 16 LTS
ODPOWIEDZ