Strona 1 z 1

Przycisk "Drukuj"

: śr maja 15, 2024 1:31 pm
autor: Altaro
Witam, w jaki sposób mogę wywołać makro, które za pomocą przycisku, otworzy okno dialogowe drukowania, z uwzględnieniem zakresu komórek które będą wynikały ze zmiennych zawartych w makro ?
Mam na myśli to, że będzie kilka przycisków, gdzie jeden będzie drukował cały arkusz, inny tylko określoną jego część ( np tabele która znajduje się w zakresie komórek)

Re: Przycisk "Drukuj"

: śr maja 15, 2024 3:12 pm
autor: Jermor
Musisz włączyć tryb projektu (Narzędzia -> Formularze -> Tryb projektu)
Klikasz prawym przyciskiem myszy na przycisku i wybierasz z menu kontekstowego "Właściwości formantu".
Wybierasz zakładkę "Wydarzenia".
Odnajdujesz zdarzenie, jakie ma nastąpić, aby makro zostało uruchomione. Po prawej stronie znajduje się przycisk z wielokropkiem. Klikasz go.
W nowym oknie dialogowym zaznaczony jest już twój wybór zdarzenia. Klikasz przycisk "Makro" i wybierasz to, które ma zostać przypisane.
Teraz musisz wyłączyć tryb projektu, bo w przeciwnym razie każde kliknięcie przycisku zaznaczy go tylko znacznikami obiektu.

Re: Przycisk "Drukuj"

: czw maja 16, 2024 8:11 am
autor: Altaro
Źle mnie zrozumiałeś. Poszukuję metody wywołania okna druku, zadając odpowiednie parametry druku, zawarte w procedurze w makro

Re: Przycisk "Drukuj"

: czw maja 16, 2024 11:00 am
autor: Rafkus
Ale makro masz już napisane? Mógłbyś udostępnić?

Re: Przycisk "Drukuj"

: czw maja 16, 2024 11:05 am
autor: Jermor
To teraz ja nie rozumiem. Skoro masz już w makro wszystkie dane, to po co ci okno druku. Wykonaj po prostu ThisComponent.Print(Array()).

Re: Przycisk "Drukuj"

: czw maja 16, 2024 12:16 pm
autor: Altaro
Wykonuję, nie działa. Zależy mi na przycisku które uruchomi makro, które uruchomi okno dialogowe drukowania, z ustawionymi już parametrami w makrze. ( druk dwustronny, zakres komórek itp itd. )

mam na myśli uruchomienie tego okna :
3.PNG
3.PNG (22.69 KiB) Przejrzano 433 razy

Re: Przycisk "Drukuj"

: czw maja 16, 2024 3:33 pm
autor: Jermor
W poleceniu ThisComponent.Print(Array()) tablica Array reprezentuje opcje drukowania, jeśli jest pusta, to do drukowania przyjęte są ustawienia standardowe. W tej tablicy możesz ustalić opcje drukowania. Oto one
Collate -> sortowanie stron (True or False).
CopyCount -> Liczba kopii.
DuplexMode -> wykorzystuje stałe com.sun.star.view.DuplexMode. Mogą to być: UNKNOWN (0), OFF (1), LONGEDGE (2), and SHORTEDGE (3).
FileName -> Transfer do pliku zamiast do drukarki.
Pages -> Wykaz stron do drukowania, jako tekst, jaki wpisujesz w oknie drukowania, np "1-3;14".
Wait -> jeśli TRUE, drukowanie jest synchroniczne, oczekuje, aż zadanie się zakończy.
Ustawianie opcji np. tak (rozmiar tablicy zależy od ilości wprowadzanych danych):

Kod: Zaznacz cały

Dim opcje(1) as new com.sun.star.beans.PropertyValue
opcje(0).Name="CopyCount" : opcje(0).Value=3
opcje(1).Name="Pages" : opcje(1).Value="1"
a wywołanie drukowania ThisComponent.Print(opcje())
Opcje takie jak format strony ułożenie wydruku, rozmiar papieru czy nawet wybór drukarki ustala się w innym miejscu jako właściwości drukarki. Jest to także tablica zgodna z new com.sun.star.beans.PropertyValue.
W końcu obszary drukowania ustala się w samym arkuszu w taki sposób (wymiar tablicy informuje o liczbie obszarów do drukowania):

Kod: Zaznacz cały

Dim oDodruku(0) As New com.sun.star.table.CellRangeAddress
  oDodruku(0).Sheet = 0 'Pierwszy arkusz skoroszytu
  oDodruku(0).StartColumn = 0 : oDodruku(0).StartRow = 0 'komórka A1
  oDodruku(0).EndColumn = 6   : oDodruku(0).EndRow = 15   'komórka G16
...
ThisComponent.CurrentController.getActiveSheet().setPrintAreas(oDodruku())

Re: Przycisk "Drukuj"

: pt maja 17, 2024 12:46 pm
autor: Altaro
U mnie nie wyświetla tego okna druku tylko od razu drukuje z zadanymi parametrami.

Re: Przycisk "Drukuj"

: pt maja 17, 2024 12:51 pm
autor: Rafkus
Nagrane makro:

Kod: Zaznacz cały

sub drukuj
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:Print", "", 0, Array())
end sub
wywołuje okno druku