Czy istnieje opcja automatycznego przewijania tekstu [SOLVED
Czy istnieje opcja automatycznego przewijania tekstu [SOLVED
Chciałem nagrać na kamerę film a podczas nagrywania chciałem z ekranu czytać tekst, jednak w tracie nagrywania nie mogę podchodzić do komputera aby myszką przesuwać tekst, dlatego chciałem zapytać czy jest opcja abym nastawił sobie jakąś szybkość i tekst sam przesuwałby się, pokazując kolejne zdania i kolejne strony tekstu. Korzystam z LibreOffice. Wielkie dzięki.
Ostatnio zmieniony czw gru 19, 2019 2:49 pm przez namini, łącznie zmieniany 1 raz.
OpenOffice.org. 3.3.0. Apple - OS X
Re: Czy istnieje opcja automatycznego przewijania tekstu?
Gotowego nie ma, ale można napisać makro.
Albo czytać z innego źródła ;|
Przykład jest dość prymitywny i pewnością powinien zostać dostosowany do potrzeb, ale w tym kierunku warto dalej iść:Wstaw ten kod do narzędzia/Makro/Basic/Zarządzaj
Otwórz dokument i wywołaj Narzędzia/Makro/Basic/Uruchom/ ten właśnie kod
Więcej o ViewCursor:
https://www.openoffice.org/api/docs/com ... ursor.html
https://wiki.openoffice.org/wiki/Writer/API/View_cursor
Albo czytać z innego źródła ;|
Przykład jest dość prymitywny i pewnością powinien zostać dostosowany do potrzeb, ale w tym kierunku warto dalej iść:
Kod: Zaznacz cały
sub przewijaj()
dt = 20 ' czas w tysięcznych częściach sekundy
d = thisComponent
c = d.getCurrentController()
v = c.getViewCursor()
v.GoToStart(0)
res = true
do while (res = true)
res = v.goRight(1, 0)
rem albo res = v.goDown(1, 0)
wait(dt)
loop
end sub
Otwórz dokument i wywołaj Narzędzia/Makro/Basic/Uruchom/ ten właśnie kod
Więcej o ViewCursor:
https://www.openoffice.org/api/docs/com ... ursor.html
https://wiki.openoffice.org/wiki/Writer/API/View_cursor
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Czy istnieje opcja automatycznego przewijania tekstu?
Dziękuję Jan. Znalazłem juz inny sposób. Ciekaw byłem też czy po latach nadal forum to jest najlepsze jeśli chodzi o pomoc na jaką można liczyć. Znów mile się zaskoczyłem. Dziękuję.
OpenOffice.org. 3.3.0. Apple - OS X
Re: Czy istnieje opcja automatycznego przewijania tekstu?
Byłoby fajnie, gdybyś napisał jaki to sposób.
Nie mam Maca, ale być może jest to coś analogicznego do tego co funkcjonuje w oprogramowaniu myszy w Windows. Kliknięcie kółka na myszy (tak, można to zrobić, choć wiele osób o tym nie wie) wyzwala charakterystyczny symbol w miejscu kliknięcia, zawierający strzałki, przesunięcie myszki w wybranym kierunku rozpoczyna samodzielny proces przewijania ekranu. Odległość przesunięcia myszki decyduje o szybkości przewijania.
Co do makra zaproponowanego przez @Jan_J napisałem także takowe. Działa jednak inaczej. Zaczynając od początku dokumentu zmienia na określony czas style kolejnych akapitów . Po upływie tego czasu akapity mają przywrócony swój poprzedni styl.
Po uruchomieniu użytkownik jest proszony o podanie nazwy stylu jaki ma zostać zastosowany do prezentowania tekstu. Musi to być styl z dostępnych w Writerze np. "Nagłówek 4" albo utworzony własny. Dwa następne parametry to wartości liczbowe określające jak długo ma być wyświetlany wyróżniany tekst. Pierwszy dotyczy zmiennej długości tego czasu. Należy podać czas jaki w przybliżeniu potrzebny jest na odczytanie 10 znaków. Jeśli zostanie podany to akapit jest wyróżniany przez czas zależny od jego długości. Drugi parametr to możliwość podania stałej liczby sekund przez jaką będzie wyróżniany każdy akapit. Po podaniu parametrów przez 5 sekund nie jest wykonywana żadna akcja. Makro składa się z dwóch podprogramów "Przewijaj2" (to ten należy uruchomić) i "NextPar". Ten drugi to nagrane przeniesienie kursora do następnego akapitu. Nie potrafiłem sam tego napisać.
Aby najlepiej wykorzystać możliwości makra, warto wywoływać je przy zastosowanym widoku "Sieć Web" gdyż wtedy nie pojawiają się podziały stron oraz marginesy. Warto też przywrócić akapitom standardowe parametry. Makro nie radzi sobie z wstawionymi tabelkami, nie wyświetla ich oraz -- jeśli są -- może nie pokazać na ekranie części dokumentu, gdyż kursor "widzialny" przechodzi przez pozycje tabelki, natomiast kursor tekstowy ją pomija. Program jest trudny do zatrzymania, gdyż wykonuje się w pętli. Aby przetestować działanie warto najpierw uruchomić program ze stałym czasem np 0,5 sek. A parametr zmiennego czasu wypróbować na jakimś krótszym dokumencie.
Na sobie wypróbowałem połączenie obu parametrów, czas zmienny 0,4 oraz czas stały 2.
Oto te makra:
Nie mam Maca, ale być może jest to coś analogicznego do tego co funkcjonuje w oprogramowaniu myszy w Windows. Kliknięcie kółka na myszy (tak, można to zrobić, choć wiele osób o tym nie wie) wyzwala charakterystyczny symbol w miejscu kliknięcia, zawierający strzałki, przesunięcie myszki w wybranym kierunku rozpoczyna samodzielny proces przewijania ekranu. Odległość przesunięcia myszki decyduje o szybkości przewijania.
Co do makra zaproponowanego przez @Jan_J napisałem także takowe. Działa jednak inaczej. Zaczynając od początku dokumentu zmienia na określony czas style kolejnych akapitów . Po upływie tego czasu akapity mają przywrócony swój poprzedni styl.
Po uruchomieniu użytkownik jest proszony o podanie nazwy stylu jaki ma zostać zastosowany do prezentowania tekstu. Musi to być styl z dostępnych w Writerze np. "Nagłówek 4" albo utworzony własny. Dwa następne parametry to wartości liczbowe określające jak długo ma być wyświetlany wyróżniany tekst. Pierwszy dotyczy zmiennej długości tego czasu. Należy podać czas jaki w przybliżeniu potrzebny jest na odczytanie 10 znaków. Jeśli zostanie podany to akapit jest wyróżniany przez czas zależny od jego długości. Drugi parametr to możliwość podania stałej liczby sekund przez jaką będzie wyróżniany każdy akapit. Po podaniu parametrów przez 5 sekund nie jest wykonywana żadna akcja. Makro składa się z dwóch podprogramów "Przewijaj2" (to ten należy uruchomić) i "NextPar". Ten drugi to nagrane przeniesienie kursora do następnego akapitu. Nie potrafiłem sam tego napisać.
Aby najlepiej wykorzystać możliwości makra, warto wywoływać je przy zastosowanym widoku "Sieć Web" gdyż wtedy nie pojawiają się podziały stron oraz marginesy. Warto też przywrócić akapitom standardowe parametry. Makro nie radzi sobie z wstawionymi tabelkami, nie wyświetla ich oraz -- jeśli są -- może nie pokazać na ekranie części dokumentu, gdyż kursor "widzialny" przechodzi przez pozycje tabelki, natomiast kursor tekstowy ją pomija. Program jest trudny do zatrzymania, gdyż wykonuje się w pętli. Aby przetestować działanie warto najpierw uruchomić program ze stałym czasem np 0,5 sek. A parametr zmiennego czasu wypróbować na jakimś krótszym dokumencie.
Na sobie wypróbowałem połączenie obu parametrów, czas zmienny 0,4 oraz czas stały 2.
Oto te makra:
Kod: Zaznacz cały
Sub Przewijaj2
Dim s As String, sStyl as String
Dim oCurs as Variant, vCurs as Variant
Dim sCurStyle As String
Dim t1 as double, t2 as double
sStyl=InputBox ("Podaj nazwę stylu" , "Przewijanie", "Nagłówek 3")
t1= Cdbl(InputBox("Podaj w sekundach czas potrzebny na przeczytanie dziesięciu znaków", "Zmienny czas wyświetlania",0))
t2= Cdbl(InputBox("Podaj w sekundach wymagany czas wyświetlania akapitu", "Stały czas wyświetlania",0))
Wait(5000)
oCurs = ThisComponent.Text.CreateTextCursor()
vCurs= ThisComponent.getCurrentController.getViewCursor()
oCurs.GoToStart(False)
vCurs.GoToStart(0)
Do
If NOT oCurs.gotoEndOfParagraph(True) Then Exit Do
sCurStyle = oCurs.ParaStyleName
oCurs.ParaStyleName=sStyl
i = Len(oCurs.getstart().TextParagraph().string)
Wait((i/10*t1+t2)*1000)
oCurs.ParaStyleName=sCurStyle
NextPar() : NextPar() :vCurs.goUp(1,0)
Loop Until NOT oCurs.gotoNextParagraph(False)
End Sub
sub NextPar()
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 ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:GoToNextPara", "", 0, Array())
end sub
AOO 4.1.15, LO 24.8.2 (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.
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.
Re: Czy istnieje opcja automatycznego przewijania tekstu?
Zmodyfikowałem makro Przewijaj2 (nazwałem je Prompter) w taki sposób, że tabela występująca w tekście jest ignorowana. Jej zawartość jest tylko przewijana aż do najbliższego akapitu, od którego rozpoczyna się dalsze działanie procedury. Poprawiona wersja nadal korzysta z procedury NextPar() występującej w poprzedniej wersji.
Wystarczy w module biblioteki zastąpić makro Przewijaj2 makrem Prompter.
Dnia 19.12.2019 wstawiłem kolejną poprawioną wersję. Poprawki dotyczą wykrywania błędów, np. niepodania wartości liczbowej, albo podania nazwy stylu, który nie istnieje. Ponadto zmieniłem sposób określania tempa wyróżniania akapitów. Obecnie jest ono określane na podstawie czasu w jakim użytkownik przeczyta testowy tekst. Czas należy zmierzyć samodzielnie.
Z zaskoczeniem też przyjąłem fakt, że jedna z właściwości kursora tekstowego, Text.Paragraph(), nie jest obsługiwana w Basicu Apache OpenOffice w związku z czym to makro wywala się w tej aplikacji.
Poniżej kompletny, poprawiony zestaw makr.
Wystarczy w module biblioteki zastąpić makro Przewijaj2 makrem Prompter.
Dnia 19.12.2019 wstawiłem kolejną poprawioną wersję. Poprawki dotyczą wykrywania błędów, np. niepodania wartości liczbowej, albo podania nazwy stylu, który nie istnieje. Ponadto zmieniłem sposób określania tempa wyróżniania akapitów. Obecnie jest ono określane na podstawie czasu w jakim użytkownik przeczyta testowy tekst. Czas należy zmierzyć samodzielnie.
Z zaskoczeniem też przyjąłem fakt, że jedna z właściwości kursora tekstowego, Text.Paragraph(), nie jest obsługiwana w Basicu Apache OpenOffice w związku z czym to makro wywala się w tej aplikacji.
Poniżej kompletny, poprawiony zestaw makr.
Kod: Zaznacz cały
Sub Prompter
REM Procedura wyróżnia przez określony czas kolejne akapity dokumentu
REM wyświetlając je w wybranym stylu. Czas wyświetlania zależy od długości akapitu
REM i czasu stałego, określonego przez użytkownika.
REM Autor: Jermor, polskie forum Apache OpenOffice i LibreOffice (2019)
Dim s As String, sStyl as String
Dim oCurs as Variant, vCurs as Variant
Dim sCurStyle As String
Dim t1 as double, t2 as double
On Local Error GoTo Styles
Const test="Samolot sił powietrznych USA obserwował Koreę Północną z ogromnej wysokości." &_
" Obecność maszyny szpiegowskiej EP-3E nad Półwyspem Koreańskim została potwierdzona." & _
" Media donoszą, że armia USA obserwowała działania wojsk Kim Dzong Una."
Const komunikat1 = "Za chwilę zostanie wyświetlony przykład tekstowy złożony z 231 znaków. Przeczytaj go w tempie, w jakim " &_
"chcesz czytać swój dokument i zanotuj czas trwania tego eksperymentu."
Const Komunikat2="Ten czas, wyrażony w sekundach, podaj jako parametr do obliczenia tempa czytania w kolejnym parametrze. " &_
"Na tej podstawie program obliczy jak długo powinien wyróżniać kolejne akapity czytanego tekstu."
Const komunikat3="Pamiętaj, że jest to czas szacowany. Rzeczywisty czas potrzebny na czytanie" &_
" zależy także od składni tekstu, złożoności zdań czy stosowanej intonacji. " &_
"Dlatego będziesz mógł określić dodatkowy stały czas, który będzie dodawany do czasu zmiennego."
MsgBox (komunikat1 &chr(10) & komunikat2 & chr(10) & chr(10) & komunikat3,,"Prompt: Komunikat")
MsgBox (test,,"Prompt: Tekst przykładowy")
s = InputBox("Podaj w sekundach czas potrzebny do określenia tempa czytania", "Prompter: Zmienny czas wyświetlania",0)
If len(s)=0 Then Exit Sub
t1 = Cdbl(s)
s = InputBox("Podaj w sekundach wymagany czas wyświetlania akapitu", "Prompter: Stały czas wyświetlania",0)
If len(s)=0 Then Exit Sub
t2=Cdbl(s)
sStyl=InputBox ("Podaj nazwę stylu (rozróżniana jest wielkość liter)" & chr(10) & chr(10) &_
"Po zatwierdzeniu nazwy nastąpi 5 sekund zwłoki przed rozpoczęciem działania." , "Prompter: Sposób wyróżniania", "Nagłówek 3")
If len(sStyl)=0 Then
MsgBox ("Nie podano nazwy stylu." & chr(10) & "Działanie zostanie zakończone.",16,"Prompter: Styl wyróżnienia")
Exit Sub
End If
Wait(5000)
oCurs = ThisComponent.Text.CreateTextCursor()
vCurs= ThisComponent.getCurrentController.getViewCursor()
oCurs.GoToStart(False)
vCurs.GoToStart(0)
Do
If NOT oCurs.gotoEndOfParagraph(True) Then Exit Do
sCurStyle = oCurs.ParaStyleName
oCurs.ParaStyleName=sStyl
i = Len(oCurs.getstart().TextParagraph().string) 'Właściwość TextParagraph nie występuje w Basicu Apache OpenOffice 4.1.7
Wait((i/len(test)*t1+t2)*1000)
oCurs.ParaStyleName=sCurStyle
NextPar()
Do While NOT IsEmpty(vCurs.TextTable)
NextPar()
Loop
NextPar()
vCurs.goUp(1,0)
Loop Until NOT oCurs.gotoNextParagraph(False)
Exit Sub
Styles:
If NOT IsNumeric(s) Then
MsgBox ("Czas w sekundach." & chr(10) & "Nie wpisałeś liczby!",16,"Błąd parametrów.")
Exit Sub
End If
MsgBox ("Nie ma w systemie stylu " & sStyl,16, "Błąd parametrów.")
End Sub
sub NextPar()
rem Makro zarajestrowane przez nagrywanie
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:GoToNextPara", "", 0, Array())
end sub
Ostatnio zmieniony pt gru 20, 2019 4:21 pm przez Jermor, łącznie zmieniany 2 razy.
Powód: Poprawiłem i rozbudowałem algorytm.
Powód: Poprawiłem i rozbudowałem algorytm.
AOO 4.1.15, LO 24.8.2 (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.
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.
Re: Czy istnieje opcja automatycznego przewijania tekstu?
Dziękuję Jan. Podziwiam Twoją wiedzę.
OpenOffice.org. 3.3.0. Apple - OS X
Re: Czy istnieje opcja automatycznego przewijania tekstu?
@Jan_J != @Jermornamini pisze:Dziękuję Jan
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)