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 (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