Zmiana właściwości przycisku z poziomu makra

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
kturendyk
Posty: 30
Rejestracja: pt sty 22, 2016 4:59 pm

Zmiana właściwości przycisku z poziomu makra

Post autor: kturendyk »

Witam ponownie.
Następna rzecz z którą narazie nie umię sobie poradzić to edycja danych przycisków z poziomu makra.
Wiem już jak dodawać przyciski ale nie mogę sobie poradzić z ich edycją (zmiana koloru, rozmiar, przypisanie do komórki, dodanie makra do przycisku)
Wszelkie porady mile widziane.
W załączniku arkusz z opisami co chcę osiągnąć.
Załączniki
przycisk hiperłącze.ods
(12.2 KiB) Pobrany 278 razy
Apache OpenOffice 4.1.4, Windows 8.1
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Zmiana właściwości przycisku z poziomu makra

Post autor: belstar »

W tych liniach masz dostęp do właściwości przycisku

Kod: Zaznacz cały

oButtonModel.Name = sName
oButtonModel.Label = sLabel
Musisz manipulować właściwościami i metodami obiektu oButtonModel (w twoim przypadku).

Przykład:

Kod: Zaznacz cały

oButtonModel.Tag = "to jest dodatkowa informacja"
Zainstaluj sobie dodatek MRI lub Xray, po odpowiednim wywołaniu go uzyskasz listę dostępnych metod i właściwości inspektorowanego obiektu. Ja preferuje ten pierwszy bo nawet kod za ciebie napisze.
Prawidłowe wywołanie inspektora:

Kod: Zaznacz cały

mri oButtonModel
Oczywiście po utworzeniu obiektu chociażby w pamięci, a i biblioteka MRI musi być załadowana, więc ma to wyglądać tak:

Kod: Zaznacz cały

oButtonModel.Name = sName
oButtonModel.Label = sLabel
mri oButtonModel
LibreOffice 5.1.2.2 Ubuntu 16 LTS
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Zmiana właściwości przycisku z poziomu makra

Post autor: belstar »

Pozostała sprawa [przypisania makra. pojawia ci się błąd bo makra o nazwie ButtonPushEvent nie masz w module1. wstaw poniższy kod a będzie działać.

Kod: Zaznacz cały

Sub ButtonPushEvent
print "to jest to" 'tu wstaw swój kod
end sub
LibreOffice 5.1.2.2 Ubuntu 16 LTS
kturendyk
Posty: 30
Rejestracja: pt sty 22, 2016 4:59 pm

Re: Zmiana właściwości przycisku z poziomu makra

Post autor: kturendyk »

Dzięki
Z dodaniem makra dałem radę i działa
Dodatek MRI zainstalowałem Wyświetla mi się jakieś okno ale ni diabła nie wiem jak to powiązać z makrem a tym bardziej jak zmienić kolor przycisku za pomocą tego dodatku.
oButtonModel.Name = sName
oButtonModel.Label = sLabel
mri oButtonModel - błąd pracy basica nie zdefiniowano procedury lub funkcji
Apache OpenOffice 4.1.4, Windows 8.1
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Zmiana właściwości przycisku z poziomu makra

Post autor: belstar »

MRI jest inspektorem obiektów, coś ja przeglądarka obiektów w Visual Basic for Application. Po uruchomieniu pokazuje okno z właściwościami, metodami inspektorowanego obiektu. W omawianym przypadku

Kod: Zaznacz cały

mri oButtonModel
pokaże ci wszystko co jest dostępne dla tego obiektu, czyli
mri.png
Załóżmy że chcesz zmienić nazwę obiektu, a nie wiesz jaką metodę czy właściwość wykorzystać:
mri1.png
Przeglądasz okienko i znajdujesz odpowiednią pozycję odpowiadającą nazwie metody lub właściwości. po dwukliku pokaże ci odpowiedni dialog do wprowadzenia nowej nazwy.
mri2.png
Gdy angielskim jesteś na bakier i wykorzystujesz ciężką do zapamiętania nazwę metody, właściwości, warto skorzystać z wygenerowanego kodu przez MRI. Wystarczy ustawić myszkę nad poziomą belką przewijania, po zmianie kursora, przeciągnąć do góry. Odsłonisz tym samym to co poniżej.
mri3.png
Wystarczy skopiować i wstawić do swojego kodu, po małych przeróbkach musi działać. Nazwa oInitialTarget reprezentuje w twoim przypadku oButtonModel.

Co do koloru przycisku, musisz wykorzystać właściwość
mri4.png
W celu ustawienia dowolnego koloru skorzystaj z funkcji RGB(), więc linia ma wyglądać tak:

Kod: Zaznacz cały

oButtonModel.BackgroundColor = RGB(155, 10, 0)
Manipulując argumentami funkcji ustawisz kolor jaki chcesz i nie tylko dostępny w palecie kolorów w OO.
kturendyk pisze:mri oButtonModel - błąd pracy basica nie zdefiniowano procedury lub funkcji
Błąd może mieć dwie przyczyny
1. Zainstalowałeś nieodpowiednią wersje MRI do swojej wersji OO
2. Biblioteka MRI nie została zainicjowana. W tym przypadku odnajdź bibliotekę na liście i ją otwórz,
mri5.png
po ukazaniu się zawartości powróć do swojego kodu wybierając ze wspominanej listy to co było poprzednio. Tym samym biblioteka MRI została załadowana. Gdy będziesz często korzystał z MRI warto załadować bibliotekę automatycznie z uruchomieniem OO

Kod: Zaznacz cały

Sub InitializeMRI()
  Globalscope.BasicLibraries.LoadLibrary("MRILib")
End Sub
Po więcej informacji udaj się https://forum.openoffice.org/en/forum/v ... 74&t=49294

Gdy wbrew podpisowi pod swoimi postami używasz LO w wersji 5, musisz odnaleźć w sieci MRI w wersji 2, choć nie pochodzi ona z oficjalnych źródeł jest w pełni sprawna.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
kturendyk
Posty: 30
Rejestracja: pt sty 22, 2016 4:59 pm

Re: Zmiana właściwości przycisku z poziomu makra

Post autor: kturendyk »

@ belstar
Witam
Za samą chęć i poświęcenie czasu jestem ci wdzięczny i wiszę ci duże piwo.
MRI u mnie działa tylko nie mogłem zlokalizować BackgroundColor, albo ten mój angielski bardzo fest kuleje.
Wczoraj próbowałem na wiele sposobów z oButtonModel i nie mogłem zatrybić (albo mój program) a dzisiaj kopiując twój wpis (oButtonModel.BackgroundColor = RGB(155, 10, 0)) wszystko działa elegancko (chyba w moim angielskim były jakieś literówki).
Dziękuję za pomoc i walczę dalej z moimi wypocinami, pewnie pytań będzie jeszcze kilka
W kodzie oButtonModel.Tag = "to jest dodatkowa informacja" nie ma żadnej reakcji

Kod: Zaznacz cały

oButtonModel = CreateUnoService("com.sun.star.form.component.CommandButton")
  oButtonModel.Name = sName
  oButtonModel.Label = sLabel
  oButtonModel.BackgroundColor = RGB(155, 10, 0)
  oButtonModel.Tag = "to jest dodatkowa informacja"
  oControlShape.setControl(oButtonModel)
  oDrawPage.add(oControlShape)
Apache OpenOffice 4.1.4, Windows 8.1
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Zmiana właściwości przycisku z poziomu makra

Post autor: belstar »

kturendyk pisze:W kodzie oButtonModel.Tag = "to jest dodatkowa informacja" nie ma żadnej reakcji
Uwierz mi, jest!
Przełączysz się w tryb projektu formularza, wybierzesz właściwości wstawionego przyciski i odnajdź na karcie ogólne pole o nazwie Dodatkowa informacja, znajdziesz w niej właśnie to co zostało tam wstawione czyli:

Kod: Zaznacz cały

"to jest dodatkowa informacja"
Możesz wstawić tam dowolny ciąg znaków.
Cytat z Helpa:
Dla każdego pola formantu można określić dodatkowe informacje lub wprowadzić opis. Dodatkowe informacje zawarte w tej właściwości mogą zostać wykorzystane przez programistę w kodzie programu. W polu tym można na przykład umieścić zmienne lub inne parametry ewaluacyjne.

Do czego to można wykorzystać? Pomysłów może być naprawdę sporo, np.
Tworzysz super grę i chcesz ograniczyć ilość kliknięć użytkownika w przycisk, a przecież informacje o ilości kliknięć musisz gdzieś przechowywać i właśnie możesz to ukryć tam. Razem z ograniczeniem dostępu do edytora basic, będzie to ukryte przed nim. Oczywiście nie jest to żadne zabezpieczenie przed fachowcami, ale zawsze jakieś. Ja przykładowo przechowuję tam zapytania sql tworząc filtry w base.

Aby unaocznić ci to zastosowanie, wklej poniższy kod podmieniając procedurę ButtonPushEvent, pamiętając o dodaniu argumentu oEv.

Kod: Zaznacz cały

Sub ButtonPushEvent(oEv)
	Dim oPrzycisk As Object
	Dim i As Integer
	
	oPrzycisk = oEv.Source.Model
	i = CInt(oPrzycisk.Tag)
	If i < 5 Then 
		i = i + 1
		oPrzycisk.Tag = CStr(i)
		MsgBox oPrzycisk.Tag & chr(13) & "Klikaj jeszcze"
	Else
		MsgBox ("Przekroczyłeś limit kliknięć", 48, "Koniec gry!")
		oPrzycisk.Enabled = False
		oPrzycisk.TextColor = RGB(0, 128, 255)
		oPrzycisk.BackgroundColor = RGB(255, 90, 0)
		oPrzycisk.Label = "Jestem niedostępny"
	End If
End Sub
edit: przeoczenie

i jeszcze w funkcji AddNewButton zamień linię

Kod: Zaznacz cały

oButtonModel.tag = "to jest dodatkowa informacja"
na

Kod: Zaznacz cały

oButtonModel.tag = "0"
LibreOffice 5.1.2.2 Ubuntu 16 LTS
kturendyk
Posty: 30
Rejestracja: pt sty 22, 2016 4:59 pm

Re: Zmiana właściwości przycisku z poziomu makra

Post autor: kturendyk »

Faktycznie wszystko działa jak należy.
Z tą dodatkową informacją myślałem że się wyświetli na ekranie, ale już wiem jak to działa.
Z ta blokadą kliknięć też mi poddałeś fajny pomysł, chyba wykorzystam go w moim arkuszu.
Jeszcze raz dzięki i walczę dalej z tymi moimi wypocinami
Apache OpenOffice 4.1.4, Windows 8.1
kturendyk
Posty: 30
Rejestracja: pt sty 22, 2016 4:59 pm

Re: Zmiana właściwości przycisku z poziomu makra

Post autor: kturendyk »

Witam
Ciąg dalszy
Jak w właściwościach przycisku na karcie ogólne za pomocą makra zmienić pole "akcja" na "otwórz dokument/stronę internetową" i poniżej w polu "Url" dodać odnośnik do innej karty Dokumentu. Te pola są tak ustawione jeżeli za pomocą kreatora utworzymy hiperłącze (a ja chciałbym to zmienić z poziomu makra). Przeszukuję internet ale jakoś nie mogę tego znależć.
Czy to będzie oButtonModel z dopiskiem? coś jak belstar napisał powyżej tylko z odpowiednim parametrem?
Pozdrawiam
Apache OpenOffice 4.1.4, Windows 8.1
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Zmiana właściwości przycisku z poziomu makra

Post autor: belstar »

Kod: Zaznacz cały

Sub OpenURL(oEv)
	'Cel w dokumencie lub ścieżka do innego pliku
	oEv.Source.getModel().getParent().getByName("Przycisk 2").TargetUrl = "#Arkusz1.A1"
	'Zmiana typu przycisku, standardowo jest com.sun.star.form.FormButtonType.PUSH
	oEv.Source.getModel().getParent().getByName("Przycisk 2").ButtonType = com.sun.star.form.FormButtonType.URL
End Sub
Więcej o typie przycisku Znajdziesz tu
LibreOffice 5.1.2.2 Ubuntu 16 LTS
kturendyk
Posty: 30
Rejestracja: pt sty 22, 2016 4:59 pm

Re: Zmiana właściwości przycisku z poziomu makra

Post autor: kturendyk »

Ok, dopasowałem to do swoich potrzeb i działa.
Właśnie brakowało mi tego .targetUrl, no i musiałem zmienić typ przycisku na formButtonType.Url
Dziękuje za pomoc i walczę dalej
Apache OpenOffice 4.1.4, Windows 8.1
ODPOWIEDZ