Jak w makrze wpisać zaznaczoną literę do zmiennej?

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
alfa333
Posty: 7
Rejestracja: śr gru 30, 2009 11:12 pm

Jak w makrze wpisać zaznaczoną literę do zmiennej?

Post autor: alfa333 »

Witam!
Jestem nowicjuszem jeśli chodzi o makra OOo (choć generalnie w zakresie programowania mam niejakie doświadczenie - piszę to, by respondenci wiedzieli, jak do mnie mówić). Chcę ulepszyć zrobione niedawno makro (przeznaczone głównie do Writera, ale i do Calc-a), które przestawia dwa sąsiednie znaki, te między którymi jest kursor tekstowy (w celu ręcznej korekty "czeskiego" błędu). Ma ono tę wadę, że zamazuje "bufor myszy" :o , gdyż makro to stworzyłem metodą "rejestruj makro, ShiftLeft, ^X, Right, ^V". Gdybym umiał literę, zamarkowaną przez ShiftLeft, zapisać w zmiennej zamiast w buforze myszy, to potem (po skasowaniu jej w tekście i przesunięciu kursora) mogę użyć
oText.insertString(oCursor,zmienna,FALSE) , prawda?
To ostatnie znalazłem na http://api.openoffice.org/basic/man/tut ... torial.pdf, ale mimo paru godzin szukania w nim (to 132 strony...) oraz na innych stronach OOo nie udało mi się tam znaleźć nic o pobieraniu zawartości zamarkowanego tekstu.
Osobna sprawa, że makro które mi się zarejestrowało jest chyba w innym języku, bo np. przesunięcie kursora w prawo to nie jest
oText = oDocument.Text
oCursor = oText.createTextCursor()
oCursor.goLeft(3,FALSE)

(- jak można by zrobić w oparciu o informacje z w/w tutorialu) tylko
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args3())
(pomijam poprzedzające deklaracje dla tej wersji).
Z góry dziękuję za porady (patrz "Temat") i życzę wszystkim forumowiczom udanego Sylwestra :mrgreen: i szczęśliwego Nowego Roku! ;)
Adam; OOo 3.3.0 (330m20 build9567) ; WinXP Pro SP2
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Jak w makrze wpisać zaznaczoną literę do zmiennej?

Post autor: Jan_J »

Pierwszy cytowany przez Ciebie kod korzysta z UNO API w Basicu. Drugi wykorzystuje kontrolera dokumentu OpenOffice. Ja znacznie większą sympatię mam do tego pierwszego sposobu. Jest mniej zależny od frameworka OOo, bardziej elastyczny, i łatwo przenosi się na inne języki. Natomiast rejestrator makr nie tworzy kodu w ,,gołym'' UNO, tylko gromadzi wywołania kontrolera.
Zajrzyj do zbioru przykładów AndrewMacro A. Pitonyaka, http://www.pitonyak.org/oo.php, rozdział 7. od samego początku.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
alfa333
Posty: 7
Rejestracja: śr gru 30, 2009 11:12 pm

Re: Jak w makrze wpisać zaznaczoną literę do zmiennej?

Post autor: alfa333 »

Dzięki za wyjasnienie o różnicach między dwoma "stylami" kodu. Oraz za link - ale nie do końca wiem, jak z niego skorzystać: gdy go kilknąłem, otworzyła mi się strona - spróbowałem przejść przez link "OpenOffice.org Macro document " w pierwszym akapicie, gdyż ten akapit zawiera słowo "examples" - miałem nadzieję, że to jest ów zbiór przykładów, w którym mam szukać rozdziału 7. Sciągnąłem plik "AndrewMacro.zip" (co pasowało do Twojego zalecenia "Zajrzyj do zbioru przykładów AndrewMacro"), ale pomimo rozpakowania nie mam pomysłu jak wykorzystać jego zawartość - czy rozdział 7 to "Object 7" w tym zipie?
A może chodziło o 7 akapit strony http://www.pitonyak.org/oo.php, czyli mający nagłówek "How I Find On-Line Information"? Spróbowałem z tego akapitu ściągnąć http://api.openoffice.org/docs/common/r ... ursor.html , ale nie znalazłem tam tego o co mi chodzi, tj. funkcji (metody), która zwraca zawartość zaznaczonego fragmentu tekstu Writera.
Jeśli jesteś tak miły, będę wdzięczny za dalsze wskazówki.
Adam; OOo 3.3.0 (330m20 build9567) ; WinXP Pro SP2
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Jak w makrze wpisać zaznaczoną literę do zmiennej?

Post autor: Jan_J »

Tak, chodzi mi o ,,OpenOoffice Macro Document'', http://www.pitonyak.org/AndrewMacro.odt
Chyba ściągałeś Internet Explorererm, co mądrzejszy jest od usera i autora strony, i próbuje wymusić rozszerzenie zip dla pliku odt (niby to prawda, wszak odt jest zip-em, ale co z tego?). To jest ten plik, ale ma złą nazwę. Nie rozpakowuj go. Zmień tylko rozszerzenie z zip na odt, otwórz i czytaj. I rozważ zmianę przeglądarki na lepszą, o ile moja diagnoza jest trafna.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
alfa333
Posty: 7
Rejestracja: śr gru 30, 2009 11:12 pm

Re: Jak w makrze wpisać zaznaczoną literę do zmiennej?

Post autor: alfa333 »

Miałeś rację: używałem IE, a po zmianie rozszerzenia plik się otwiera (przemądrzały IE nawet nie spytał, czy zgadzam się na zmianę rozszerzenia). Zacząłem studiować rozdział 7, ale pewnie mi trochę zejdzie zanim będe wiedział, czy juz potrafię zrobić to co chcę, zwłaszcza, że nie znam tego Basica; kiedyś pracowałem w "pierwotnym" Basicu (w latach 80-tych), zaś obiektowo - kilka lat temu w C++. Zobaczymy, czy uda mi się połączyć te doświadczenia i zdziałać coś w języku którego nie znam.

Czy można w jednym makrze łączyć komendy kontrolera dokumentu OpenOffice i komendy UNO API?

Jeśli chodzi o lepszą przeglądarkę, co proponujesz? Ale chętniej bezpłatne...

Pozdrawiam
Adam; OOo 3.3.0 (330m20 build9567) ; WinXP Pro SP2
alfa333
Posty: 7
Rejestracja: śr gru 30, 2009 11:12 pm

Re: Jak w makrze wpisać zaznaczoną literę do zmiennej?

Post autor: alfa333 »

Udało się! :D Makro zamienia mi sąsiednie znaki. Dzięki, Jan_J, za porady. I już wiem, że można w jednym makrze łączyć komendy kontrolera dokumentu OpenOffice i komendy UNO API.

Udało mi się nawet podłączenie tego makra do kombinacji klawiszy Shift-Esc. Ale niestety :cry: , nie do Alt-2 jak chciałem pierwotnie (pod tę kombinację - kojarzącą się z dzialaniem na dwóch znakach - podpiąłem sobie takie makro w prastarym Frameworku 4 firmy Ashton-Tate, który niestety rozwala się na szybkich komputerach). Dlaczego niektóre kombinacje klawiszy są niedostępne do skojarzenia z makrem (szare albo w ogóle pominięte)? Czy można ominąć ten problem? Mam na myśli wykaz, do którego wchodze z Writera przez Narzędzia/Dostosuj.../Klawiatura.

Szkoda, że makro działa jedynie w Writerze - a przydałoby się coś takiego we wszystkich aplikacjach, w których pisze się teksty (a zwłaszcza w tych, które nie mają automatycznej poprawy pisowni). Marzyłem też, że gdy napisze to makro, to będzie działało także w Calc-u, ale widzę, że linia edycji zawartości komórki to dla makra nie to samo co dokument Writera.

A czy jest w Internecie jakiś poradnik dla początkujących w pisaniu makr? Może dotyczyć Basicu, ale lepiej C++, bo widzę, że żeby porządnie opanować Basic, musiałbym sporo poczytać. Ewentualnie Java, bo to zdaje się język, który warto poznać.

Z góry dziękuję
Adam; OOo 3.3.0 (330m20 build9567) ; WinXP Pro SP2
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Jak w makrze wpisać zaznaczoną literę do zmiennej?

Post autor: Jan_J »

To się cieszę.
Kilka uwag:
  • Jeżeli się da, lepiej używać API niż dispatchera. Zawsze to jedna warstwa pośrednicząca mniej.
  • ,,Szare'' klawisze są zarezerwowane dla funkcji przewidzianych przez projektantów pakietu. Możesz ich przypisanie zmienić przez ręczną edycję pliku $HOME/.openoffice.org/3/user/config/soffice.cfg/global/accelerator/pl/current.xml albo %userprofile%\Applications Data\openoffice.org\3\user\config\soffice.cfg\global\accelerator\pl\current.xml
  • Poradnik dla początkujących? nie ma kompletnego opracowania. Ja korzystam ze wspomnianego zbioru Pitonyaka, z dokumentacji http://api.openoffice.org/ http://docs.sun.com/app/docs/doc/819-0439/, ze wsparcia na forach dyskusyjnych, i oczywiście z debuggera.
  • API dla Basica, Pythona, C++, Java, JavaScript jest w zasadzie to samo. Z tym że w przypadku Java i C++ trudno mówić o makrach; są to raczej progamy współpracujące z pakietem, albo na zasadzie klient--serwer, albo jako rozszerzenia.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
alfa333
Posty: 7
Rejestracja: śr gru 30, 2009 11:12 pm

[SOLVED]Re: Jak w makrze wpisać zaznaczoną literę do zmienne

Post autor: alfa333 »

Dzięki - te informacje na razie mi wystarczą.

Tworząć ten post dopisałem w tytule wątku [SOLVED]; jeśli to za mało, proszę o wskazówki co powinienem zrobić, by byc w zgodzie z dobrymi obyczajami.

Wszystkiego dobrego w Nowym Roku życzę wszystkim forumowiczom, a szczególnie Tobie, Jan_J.
Adam; OOo 3.3.0 (330m20 build9567) ; WinXP Pro SP2
ODPOWIEDZ