Witam,
wymyśliłem sobie taki projekt: po otwarciu dokumentu tekstowego otwiera się okno dialogowe z miejscem do wpisania danych po zatwierdzeniu wprowadzonych danych pojawiają się one w dokumencie tekstowym. Po przesłaniu tych danych otwiera się systemowe okno dialogowe wyboru drukarki. Mimo, że skrypt odpowiadający za pojawiające się okno druku jest nagrane przez narzędzie umieszczone w OO Writer. Jedyną wadą jest to że okno z formularzem pojawia się dwa razy. Chciałbym również zmodyfikować je w ten sposób aby w oknie druku po kliknięciu drukuj lub anuluj ponownie pojawiało się moje okno z formularzem. W załączniku załączam okrojoną wersję
[SOLVED] Okno drukowania po zatwierdzeniu okna dialogowego
[SOLVED] Okno drukowania po zatwierdzeniu okna dialogowego
- Załączniki
-
- pole_tekstowe.odt
- (14.77 KiB) Pobrany 231 razy
Ostatnio zmieniony śr kwie 01, 2020 11:37 am przez krolik, łącznie zmieniany 1 raz.
OpenOffice 4.1.7, Windows 10
Re: Okno drukowania po zatwierdzeniu okna dialogowego
Dwa razy wywołujesz metodę Execute, raz przed Select Case a później w niej, usuń tą pierwszą i dialog pojawi się raz.
Nie wiem co planujesz, ale Select Case słuzy do wyboru kiedy mamy wiele opcji tu wystarczy If Then ewentualnie If Then Else. Poza tym wstaw przycisk Anuluj, wspominasz o nim a go nie ma. Tak, tak, wiem to tylko test.
Nie wiem co planujesz, ale Select Case słuzy do wyboru kiedy mamy wiele opcji tu wystarczy If Then ewentualnie If Then Else. Poza tym wstaw przycisk Anuluj, wspominasz o nim a go nie ma. Tak, tak, wiem to tylko test.
Ano, odpowiedz masz w pierwszej części, dlaczego dialog pojawia się dwa razykrolik pisze:ponownie pojawiało się moje okno z formularzem
LibreOffice 5.1.2.2 Ubuntu 16 LTS
Re: Okno drukowania po zatwierdzeniu okna dialogowego
Chociaż wydaje mi się że wywołanie dwa razy metody Execute nie jest właściwe,bo powinny być utworzone dwie instancje tego samego obiektu, ale po co. Przejdź na nowy LO, będziesz tam miał inspektora obiektów MRI i w nim sprawdź jakie metody ma obiekt Dialog, powinna tam być metoda Visible, ale nie jestem pewien. Teoretycznie wywołując Execute raz obiekt już istnieje tylko jest niewidoczny, czyli chodzi o pokazanie go.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
Re: Okno drukowania po zatwierdzeniu okna dialogowego
Właśnie po usunięciu jednego Execute okno dialogowe pojawia się raz. Ale po wpisaniu danych do okna dialogowego za pierwszym razem (po uruchomieniu dok. tekstowego) nie wszystkie wartości z pól formularza są przesyłane do kształtów (zlokalizowanych w dok. tekstowym) odbierających dane. Próbowałem umieścić polecenie wydruku w różnych miejscach np. po umieszczeniu na końcu skryptu przed Dialog.Dispose() - żadne wartości nie są przesyłane, z kolei wklejenie kodu w innym miejscu powoduje, że wartość termin nie jest przesyłana, czasem też po zmianie miejsca kodu odpowiedzialnego za drukowanie wartości pojawiają się dopiero po zamknięciu okna drukowania. Czy można w jakiś sposób to naprawić?
- Załączniki
-
- forum.odt
- (17.43 KiB) Pobrany 232 razy
OpenOffice 4.1.7, Windows 10
Re: Okno drukowania po zatwierdzeniu okna dialogowego
Po pierwsze: W złym miejscu następuje wywołanie dialogu. W twoim makrze testowym najpierw pobierasz dane z okna dialogowego a dopiero potem inicjujesz jego wywołanie i zaraz potem drukujesz. Powinno być odwrotnie - Execute daj zaraz po załadowaniu biblioteki dialogu.
Po drugie zgadzam się z @Jermorem @belstar-em:
Twój poprawiony kod :
PS. Obejrzałem twój drugi dokument, tam znowu masz troszkę pomieszaną kolejność.
W nim co prawda dialog jest wywołany w dobrym miejscu ale zaraz po nim każesz drukować dokument a następnie dopiero przechodzisz do pobierania i edytowania danych z dialogu.
Obrazowo - robisz herbatę: czyli bierzesz kubek, wlewasz wrzątek, wypijasz i wrzucasz herbatę
Poprawniej powinno być tak:
Ups, Faktycznie odwoływałem się do wcześniejszej wypowiedzi @belstar -a. Przepraszam za błąd, poprawiłem wypowiedź...
Po drugie zgadzam się z @Jermorem @belstar-em:
, z tym że ja zaproponuję abyś wynik z Execute przypisał do zmiennej.Dwa razy wywołujesz metodę Execute, raz przed Select Case a później w niej,
Twój poprawiony kod :
Kod: Zaznacz cały
Sub ramkatekst
Dim Dialog As Object 'okno dialogowe'
Dim nazwa As Object 'tekst pobrany z okna dialogowego'
DialogLibraries.LoadLibrary("Standard")
Dialog = CreateUnoDialog(DialogLibraries.Standard.form)
wynik_dialogu = Dialog.Execute()
nazwa = Dialog.GetControl("p_nazwa") 'przepisanie tekstu z pola z okna dialogowego do zmiennej'
oDoc = ThisComponent
oDrawP = oDoc.getDrawPage()
IleObj = oDrawP.getCount()
oObj1 = oDrawP.getByIndex(1) 'tu operujesz indeksami'
nazwatekst = oObj1.Name 'nazwa ramki'
sString = nazwa.Text
oObj1.String() = sString
'Formatowanie tekstu'
oObj1.setPropertyValue("CharHeight", 60) 'wielkosc czcionki'
oObj1.setPropertyValue("CharWeight", BOLD) 'porubinie czcionki'
oObj1.setPropertyValue("CharFontName", "Dosis")'nazwa czcionki'
Select Case wynik_dialogu ' zamiast Dialog.Execute() odwołaj się do zmiennej
Case 1
'Po naciśnięciu OK nastepuje wydruk strony z podanymi danymi'
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")
dispatcher.executeDispatch(document, ".uno:Print", "", 0, Array())
End Select
Dialog.dispose()
End Sub
PS. Obejrzałem twój drugi dokument, tam znowu masz troszkę pomieszaną kolejność.
W nim co prawda dialog jest wywołany w dobrym miejscu ale zaraz po nim każesz drukować dokument a następnie dopiero przechodzisz do pobierania i edytowania danych z dialogu.
Obrazowo - robisz herbatę: czyli bierzesz kubek, wlewasz wrzątek, wypijasz i wrzucasz herbatę
Poprawniej powinno być tak:
Kod: Zaznacz cały
'załdowanie obsługi dialogu
DialogLibraries.LoadLibrary("Standard")
Dialog = CreateUnoDialog(DialogLibraries.Standard.form)
If Dialog.Execute() then 'uruchomienie dialogu,
' przetwarzanie danych
'drukowanie
end if
Dialog.dispose()
Ups, Faktycznie odwoływałem się do wcześniejszej wypowiedzi @belstar -a. Przepraszam za błąd, poprawiłem wypowiedź...
Ostatnio zmieniony sob gru 21, 2019 5:06 pm przez Rafkus, łącznie zmieniany 1 raz.
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Re: Okno drukowania po zatwierdzeniu okna dialogowego
@Rafkus, zgadzasz się z @belstar. Ja nie brałem udziału w tym wątku.
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.