Położenie radiobutton'a

Makropolecenia i funkcje w języku Basic

Położenie radiobutton'a

Postprzez bsjhx » Pt lip 11, 2014 11:58 am

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   Rozszerz widokZwiń widok
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   Rozszerz widokZwiń widok
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
bsjhx
 
Posty: 7
Dołączył(a): Śr lip 09, 2014 12:26 pm

Re: Położenie radiobutton'a

Postprzez Jan_J » Pt lip 11, 2014 2:30 pm

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 Still (6.2) ∙ AOO 4.1.7 ∙ Python (3.7|2.7) ∙ Unicode 12 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3967
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Położenie radiobutton'a

Postprzez bsjhx » Pt lip 11, 2014 3:18 pm

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
bsjhx
 
Posty: 7
Dołączył(a): Śr lip 09, 2014 12:26 pm

Re: Położenie radiobutton'a

Postprzez belstar » So lip 12, 2014 9:14 am

https://forum.openoffice.org/pl/forum/viewtopic.php?t=1420&p=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
belstar
 
Posty: 648
Dołączył(a): Cz mar 17, 2011 9:08 am

Re: Położenie radiobutton'a

Postprzez bsjhx » Pn lip 21, 2014 12:12 pm

Znalazłem taki interfejs: http://www.openoffice.org/api/docs/common/ref/com/sun/star/awt/XWindow.html. Doszedłem do niego stąd: http://www.openoffice.org/api/docs/common/ref/com/sun/star/awt/UnoControlRadioButton.html. Czy jest możliwość, aby skorzystać z metody getPosSize() tego interfejsu, jeżeli do radioButton'a dobieram się tak:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
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
bsjhx
 
Posty: 7
Dołączył(a): Śr lip 09, 2014 12:26 pm

Re: Położenie radiobutton'a

Postprzez belstar » Wt lip 22, 2014 12:21 am

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   Rozszerz widokZwiń widok
ServiceName = "stardiv.one.form.component.RadioButton"
Załączniki
Podaj_Poz_Kotwice_Stan.ods
(16.28 KiB) Pobrane 107 razy
LibreOffice 5.1.2.2 Ubuntu 16 LTS
belstar
 
Posty: 648
Dołączył(a): Cz mar 17, 2011 9:08 am


Powrót do Basic

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość