Writer-samowolna zamiana wielkości liter (SHIFT+F3) [SOLVED]

Nie wiesz, gdzie umieścić swój post? Pisz tutaj!
mixtur
Posty: 10
Rejestracja: czw maja 20, 2021 9:14 am

Writer-samowolna zamiana wielkości liter (SHIFT+F3) [SOLVED]

Post autor: mixtur »

cześć Forumowicze!
Sprawa jest taka: zajmuję się trochę korektą tekstu na potrzeby wrzucenia sobie książki na czytnik. I gdy potrzebuję zmienić wielkość pierwszej litery wyrazu -skrótem [shift+f3] Writer sam "psuje" mi przed chwilą poprawiony inny wyraz, na którym nawet kursor nie stoi. Co jest nie tak? Powyłączałem już wszystkie możliwe opcje autokorekty jakie znalazłem, a on wciąż mi psuje tekst. Jak sobie z tym poradzić?
dzieki serdeczne z góry!
Ostatnio zmieniony pn maja 24, 2021 9:40 am przez mixtur, łącznie zmieniany 2 razy.
Libre Office 6.4.7.2, Xubuntu 20.08
Awatar użytkownika
Jermor
Posty: 2233
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Writer - samowolna zamiana wielkości liter

Post autor: Jermor »

Skrót SHIFT+F3 powoduje cykliczną zmianę wielkości liter. W przypadku Writera wygląda na to, że jednym ze stanów jest przywrócenie oryginalnego stanu całego zdania, w którym proces zachodzi.
Należy wiedzieć o tym, że zmiana jest następnym stanem w stosunku do ostatniego zachowania procedury. Więc jeśli w tym samym zdaniu ponownie użyjesz tego skrótu, może zajść sytuacja, o jakiej napisałeś.
This command changes the contents of the selected cells to the title case, the upper case, or the lower case, cyclically. This command is meant to be called only when when one or more cells are in the whole-cell-has-focus mode. This command does not judge the current cases of the selected cells, but just apply the next case the office instance remembers: it is not that as the contents of a cell is in the upper case now, the cell will become lower case.
Dlatego moim zdaniem najlepszym rozwiązaniem będzie, gdy nagrasz sobie własne makro, przypiszesz mu skrót klawiaturowy i zaczniesz używać tego skrótu.
Takie proste makro nagrałem. Należy kliknąć wewnątrz wyrazu i je wywołać. Wewnątrz dlatego, że pierwszą akcją jest przeskok na początek wyrazu.
Zmodyfikowałem je w stosunku do pierwotnej odpowiedzi w ten sposób, że jeśli kursor będzie ustawiony przed pierwszą literą w wyrazie, to ta litera zostanie zastąpiona wielką. Wykonując makro wielokrotnie, możesz zmieniać na wielką każdą pierwszą literę kolejnych wyrazów.

Kod: Zaznacz cały

sub WL
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem --- modyfikacja dodana do pierwotnej wersji ---
rem --- Przeskocz do nastepnego wyrazu ---
dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())
rem --- Wróć na początek poprzedzającego wyrazu ---
dispatcher.executeDispatch(document, ".uno:GoToPrevWord", "", 0, Array())
rem --- Zaznacz pierwszy znak tego wyrazu ---
dim args2(1) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Count"
args2(0).Value = 1
args2(1).Name = "Select"
args2(1).Value = true
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args2())
rem --- Zamień go na wielka literę ---
dispatcher.executeDispatch(document, ".uno:ChangeCaseToTitleCase", "", 0, Array())
rem --- Przeskocz do nastepnego wyrazu ---
dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())
end sub
Ostatnio zmieniony pt maja 21, 2021 10:00 am przez Jermor, łącznie zmieniany 1 raz.
Powód: Zmodyfikowałem makro.
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
mixtur
Posty: 10
Rejestracja: czw maja 20, 2021 9:14 am

Re: Writer - samowolna zamiana wielkości liter

Post autor: mixtur »

Dzięki serdeczne.
Ostatnie dwie kwestie:
1) Czy dużo pracy by trzeba, żeby to makro działało cyklicznie, w pętli tak jak ten shift+f3, ale żeby jego działanie ograniczało się tylko do danego wyrazu - w sensie żeby kursor zostawał tak gdzie był, bez przeskakiwania do następnego wyrazu?
2) Gdybym na przyszłość chciał się sam brać za takie rzeczy - czy istnieje jakieś kompendium, podręczniki czy kursy z których można by się tego nauczyć? Widziałem kiedyś (baaaardzo dawno temu) jak w Wordzie człowiek uruchomił coś w rodzaju rejestratora - który mu zapisał kilka czynności, tak że potem mógł sobie je "odtwarzać" w razie potrzeby. Taki jakby "dyktafon", ale zapisywał nie dźwięk, a wykonane w edytorze działania. Czy w LibreOffice też jest to możliwe, czy trzeba te makra pisać "z palucha"? Dzięki serdeczne!!!!
Libre Office 6.4.7.2, Xubuntu 20.08
Awatar użytkownika
Jermor
Posty: 2233
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Writer - samowolna zamiana wielkości liter

Post autor: Jermor »

  • ad 1. Można taki efekt uzyskać, ale nie poprzez nagranie makra. Musiałoby zostać napisane przez programistę. Wracając jednak do
    ... żeby to makro działało cyklicznie, w pętli tak jak ten shift+f3
    SHIFT+F3 działa cyklicznie, ale cykl zawsze rozpoczyna się od działania następnego po ostatnio wykonanym. Jeśli cyklem jest "małe litery - pierwsza wielka - wszystkie wielkie - oryginalne zdanie" to gdy w jakimś wyrazie ustawisz "pierwsza wielka", przejdziesz do następnego wyrazu i wywołasz SHIFT+F3, wykonane zostanie działanie "wszystkie litery wielkie", bo ostatnim wykonanym było "pierwsza wielka". Kolejne naciśnięcie SHIFT+F3 wykona "oryginalne zdanie". Inaczej mówiąc SHIFT+F3 nie rozpoczyna nowego cyklu na nowym słowie.
  • ad 2. Na temat tworzenia makr nie ma zbyt wiele materiałów. W swoim serwisie (Yestok.pl) poświęciłem temu tematowi trzy opracowania, podając w nich także źródła.
    Nagrywanie makr, czyli proces, jaki opisałeś, odnosząc się do Worda, jest także możliwe w Apache OpenOffice i LibreOffice. W tych pakietach nagrywanie makr jest możliwe tylko we Writerze i w Calcu. Natomiast makra jako takie mogą być stosowane w każdym programie pakietu. Oczywiście zawsze możesz wygooglować hasło "makra w libreoffice" i znajdziesz sporo linków.
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Awatar użytkownika
Jermor
Posty: 2233
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Writer - samowolna zamiana wielkości liter

Post autor: Jermor »

No dobra. Napisałem takie makro. Wykona się tylko w dokumencie Writera. Możesz je dograć do kontenera "Moje makra", wówczas będzie działało w każdym dokumencie, który otworzysz. Pierwsze użycie makra rozpoczyna cykl "Pierwsza litera wielka -> wszystkie litery wielkie -> wszystkie litery małe".

Kod: Zaznacz cały

Global  Jermor7E5 As Integer ' Jermor7E5 zmienna globalna pamiętająca ostatnią akcję
Sub SHIFT_F3
REM Autor: Jermor, polskie forum Apache OpenOffice i LibreOffice. (2021)
Dim oVC As Object ' Kursor widzialny
Dim oTC As Object 'Kursor tekstowy
sWrite = "com.sun.star.text.TextDocument"
If Not ThisComponent.SupportsService(sWrite) Then Stop
oVC = ThisComponent.getCurrentController.getViewCursor()
oSlowo=oVC.getText()
oTC=oSlowo.createTextCursorByRange(oVC.getStart())
oTC.GoToNextWord(false)
oTC.GoToPreviousWord(true)
Select Case Jermor7E5
	Case 0, 1 ' Zamiana tylko pierwszej litery na wielką
		oTC.string=UCase(Left(oTC.string,1)) & Right(oTC.string,len(oTC.string)-1)
		Jermor7E5=2
	Case 2 ' Zamiana wszystkich liter w słowie na wielkie
		oTC.string=Ucase(oTC.string)
		Jermor7E5=3
	Case 3 'zamiana wszystkich liter w słowie na małe
		oTC.string=Lcase(oTC.string)
		Jermor7E5=1
End Select
oVC.GoLeft(1,false)
End Sub
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
mixtur
Posty: 10
Rejestracja: czw maja 20, 2021 9:14 am

Re: Writer - samowolna zamiana wielkości liter

Post autor: mixtur »

Dziękuję! Działa genialnie - o coś takiego mi chodziło, tego mi było trzeba... Dziękuje serdecznie!

Edit: 2021-05-25: Rozwala system. Jak dla mnie standardowe "cyklicznie" mogłoby nie istnieć.

Jeszcze raz BAAARDZO DZIEKUJĘ!!!!!!!!!!!

Temat do zamknięcia.
Libre Office 6.4.7.2, Xubuntu 20.08
ODPOWIEDZ