Migracja z arkusza do okna dialogu

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
pero
Posty: 13
Rejestracja: sob mar 25, 2017 11:59 pm

Migracja z arkusza do okna dialogu

Post autor: pero »

Witam! Po kliku dobrych latach znalazłem dawno robioną bazę dla obsługi pracy serwisu w OOCalc. Baza działa tak jak należy. Ale jestem zmuszony ją zmienić i dostosować do nowych potrzeb dla siebie i dla firm współpracujących aby ujednolicić procedury. Problemów mam kilka, ale najważniejszy kłopot to poniższy:
Poprzednio wszystkie formanty bazy były zamieszczone bezpośrednio w arkuszu nr 1. Teraz chcę to wszystko przenieść do okna dialogowego nr 1. Problemem jest kopiowanie zakresu. Makro ZAPIS wywołane przez przycisk ZAPIS umieszczony w arkuszu pracuje sprawnie. To samo makro wywołane przyciskiem z okna dialogowego nie kopiuje danych chociaż dokonuje zapisu.

Kod: Zaznacz cały

sub ZAPIS
'print "wiersz zlecenia - zapis 1 =" , wierszzlecenia
dim okartkaarkusza as object, oobszarzrodlowy as object, wspolrzedneklejenia as object, szu as string
if AKTYWNEZLECENIE = FALSE then
msgbox("Zlecenie NIE jest aktywne - nie mam co zapisać!",305,"Informacja systemu")
goto koniec : end if
if NOWEZLECENIE=TRUE or AKTYWNEZLECENIE=true then : goto dalej : endif
okno=msgbox("Potwiedź  zapis zlecenia !!!",305,"Informacja systemu")
if okno=2 THEN : goto koniec : end if
if AKTYWNEZLECENIE=TRUE THEN
dalej: 
'print "wiersz zlecenia: ",wierszzlecenia
oObszarZrodlowy = baza.getCellRangeByPosition(0,1,26,1).RangeAddress  
WspolzedneWklejenia = baza.getCellByPosition(0,wierszzlecenia).CellAddress
baza.CopyRange(WspolzedneWklejenia, oObszarZrodlowy)
print "przeniosłem"
'NORMA
AKTYWNEZLECENIE=false : NOWEZLECENIE=false
end if

zapisuj:
NOWYKLIENT=false
dim document   as object
dim dispatcher as object 
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array()) 
 
koniec:
'print "wiersz zapis 2 =" , wierszzlecenia
End Sub
Podobnie: wywołane kopiowania zakresów w innych procedurach zachowują się identycznie. Nie wiem jak mam to rozgryźć.
Problem drugi: List box z w arkuszu posiada możliwość zaznaczenia zakresu komórek z którego ma otrzymać dane np. Arkusz1.A1:A10. Listbox z okna dialogowego tej opcji nie ma. Wkopiowałem więc do niego cały zakres A1:A10 i jest OK, ale w poprzednim "wcieleniu" ostania pozycja występuje w listboxie jako pierwsza - i tak ma być. W listboxie z Dialogu jest na odwrót i nie mogę tego zmienić. Jak tego dokonać?
Wszytko robię obecnie w OOCalc, gdyż z LOCalc miałem problemy.
Pozdrawiam i proszę o pomoc.
Open Office 4.1.3 , Windows 10 , Libre Office
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Migracja z arkusza do okna dialogu

Post autor: belstar »

Wstaw plik z twoją bazą, oczywiście dane mogą być fikcyjne, inaczej mam zgadywankę.
Co do wstawionej procedury, jeżeli ty ją tworzyłeś to na przyszłość - najlepiej ZAPOMNIJ O INSTRUKCJI "GO TO", to zły nawyk i niepotrzebnie zaciemnia kod, procedura jest do napisania od nowa! Lepiej jest napisać oddzielną procedurę, wywołać ją w miejscu w którym masz te nieszczęsne "go to", zrobi to samo i będzie bardziej czytelne i zgodne ze standardem.
Po co aż trzy linijki kodu.

Kod: Zaznacz cały

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())
kiedy wystarczy jedna:

Kod: Zaznacz cały

ThisComponent.Store
W drugiej połowie tygodnia będę miał trochę wolnego i wtedy mogę się przyjrzeć twojemu problemowi.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
pero
Posty: 13
Rejestracja: sob mar 25, 2017 11:59 pm

Re: Migracja z arkusza do okna dialogu

Post autor: pero »

Dzięki za odpowiedź. Już wyjaśniam: GoTo kieruje do etykiety na końcu procedury aby tylko ominąć pewien fragment procedury. Więc raczej nie ma z tym problemu. Chyba, że można to zrobić bardziej elegancko. Raczej na tą część nie zwracałem uwagi. Co do zapisu: Jak wspomniałem to stare dzieje. Ale działało :D . Mam jakiś problem z komputerem bo w tej chwili w zasadzie problem z kopiowaniem nie istnieje - na drugi dzień wszystko zadziałało jak należy. Mam wrażenie, że coś miał do powiedzenia antywirus. Kopiowanie pracuje. Natomiast jak zawsze wyszły inne problemy. Trudno mi wstawić plik z całą bazą gdyż jest tego dość dużo. Tym bardziej, że zawiera jeszcze procedury ze starej wersji, które dopiero będę dołączał. Kilka lat całkowitego oderwania robi swoje. Mam np. problem z nadawaniem nazwy przycisku, jego kolorowaniem, ustawianiem programowo listboxa jako nieaktywnego. Mówię oczywiście o wersji nowej - "dialogowej". W arkuszu nie ma problemu. Jeśli mogę prosić w tej materii o fragmenty kodu, które takie operacje wykonują to będę wdzięczny. Proszę jeszcze o podpowiedź: uruchomienie dialogu oDialog.Execute() powoduje, że okno się aktywuje. Ale jak należy stosować ".Visible" jeżeli poprzednie polecenie dialog wyświetla?
Open Office 4.1.3 , Windows 10 , Libre Office
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Migracja z arkusza do okna dialogu

Post autor: belstar »

pero pisze:GoTo kieruje do etykiety na końcu procedury aby tylko ominąć pewien fragment procedury. Więc raczej nie ma z tym problemu.
To jak goto używać i jak to się odbywa to ja wiem, chodzi o to że lepiej tego nie używać kiedy masz do dyspozycji pętle, if-y, select casy i podprogramy, będzie czytelniej. Ale jak ci się tak podoba twoja sprawa.

Specjalnie dla ciebie stworzyłem przykład jak manipulować formantami na dialogu z pomocą basica
https://forum.openoffice.org/pl/forum/v ... f=4&t=4216
LibreOffice 5.1.2.2 Ubuntu 16 LTS
pero
Posty: 13
Rejestracja: sob mar 25, 2017 11:59 pm

Re: Migracja z arkusza do okna dialogu

Post autor: pero »

Serdeczne dzięki!
Doszedłem już do kilku spraw, ale okrężnie. Przykład wyjaśnia mi wiele.
Open Office 4.1.3 , Windows 10 , Libre Office
pero
Posty: 13
Rejestracja: sob mar 25, 2017 11:59 pm

Re: Migracja z arkusza do okna dialogu

Post autor: pero »

belstar pisze:
pero pisze:GoTo kieruje do etykiety na końcu procedury aby tylko ominąć pewien fragment procedury. Więc raczej nie ma z tym problemu.
To jak goto używać i jak to się odbywa to ja wiem, chodzi o to że lepiej tego nie używać kiedy masz do dyspozycji pętle, if-y, select casy i podprogramy, będzie czytelniej. Ale jak ci się tak podoba twoja sprawa.

Specjalnie dla ciebie stworzyłem przykład jak manipulować formantami na dialogu z pomocą basica
https://forum.openoffice.org/pl/forum/v ... f=4&t=4216
Mam pytanie - jak zrobić: aby ListBox1 w oknie Dialog1 wyświetlał wybraną pozycję z Lstbox1 z okna Dialog2 - Dialog2 jest wywołany przyciskiem umieszczonym w Dialog1?
Open Office 4.1.3 , Windows 10 , Libre Office
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Migracja z arkusza do okna dialogu

Post autor: belstar »

Dodałem nową wersję przykładu z odpowiedzią na twoje pytanie. Sprawdź tak jak poprzednio.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
ODPOWIEDZ