Corel FORUM Strona Główna Corel FORUM
Forum użytkowników programów firmy Corel. Grafika wektorowa, rastrowa i obróbka zdjęć cyfrowych

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj  DownloadDownload

Poprzedni temat «» Następny temat
dopasuj rozmiar strony do zaznaczonego elementu
Autor Wiadomość
michal.s 
Praktyk


Wersja CorelDRAW: x4
Pomógł: 1 raz
Dołączył: 01 Lut 2012
Posty: 66
Skąd: Poznań
Wysłany: 2 Lipiec 2012, 17:01   dopasuj rozmiar strony do zaznaczonego elementu

Dzień dobry Wszystkim.
Podczas kolejnej, setnej czynności dopasowania rozmiaru strony do zaznaczonego elementu, przypomniałem sobie, że istnieje to WSPANIAŁE Corel Forum :-) i użytkownicy którzy już kilka razy mi pomogli (może i tym razem :-) )
Czy jest możliwe przygotowanie makra, które jak pisałem wyżej dopasuje format strony do zaznaczonego elementu.
Podam przykład jak to przygotowuję dotychczas:
Zaznaczam grupę elementów o rozmiarze szerkość 250 wysokość 370 mm, zapisuję sobie wymiary na kartce (młodsi te informacje zapamiętują :-) ), następnie wchodzę w parametry strony i wprowadzam wymiary, klikam ok i mam :-)
A można to zrobić szybciej i z automatu.
Zarejestrowałem makro w Corelu X4, ale działa to tylko dla jednego rozmiaru

Kod:
Sub rozmiar_strony_1()
       ' Recorded 2012-07-02
    Dim OrigSelection As ShapeRange
    Set OrigSelection = ActiveSelectionRange
    Windows.FindWindow("Rysunek2").ActiveView.SetViewPoint 1.968504, 3.937008, 100
    With ActivePage
        .SetSize 3.937008, 7.874016
        .Orientation = cdrPortrait
        .PrintExportBackground = True
        .Bleed = 0#
        .Background = cdrPageBackgroundNone
    End With
End Sub
 
 
Martin Nez 
Doradca
Grafik?


Wersja CorelDRAW: 2019
Pomógł: 14 razy
Dołączył: 29 Sty 2011
Posty: 114
Skąd: Czmoń
Wysłany: 11 Lipiec 2012, 12:49   

Używam takiego czegoś na codzień w pracy. Mój kod poniżej...

Kod:
Sub WymiarKartki()
    Dim dblWysokoscLogo As Double
    Dim dblSzerokoscLogo As Double
    ActiveDocument.Unit = cdrMillimeter
    'ActivePage.Shapes.All.CreateSelection
    ActiveSelection.Group
    ActiveSelection.GetSize dblSzerokoscLogo, dblWysokoscLogo
   
    ActiveSelection.AlignToPageCenter cdrAlignLeft + cdrAlignRight + cdrAlignTop + cdrAlignBottom, cdrTextAlignBoundingBox
    ActiveSelection.UngroupEx
   
    ActivePage.SetSize Round(dblSzerokoscLogo + 2, 0), Round(dblWysokoscLogo + 2, 0)
   
    Dim wys As Double
    Dim szer As Double
    wys = ActivePage.SizeHeight
    szer = ActivePage.SizeWidth
End Sub


Pozdr,
MN
 
 
michal.s 
Praktyk


Wersja CorelDRAW: x4
Pomógł: 1 raz
Dołączył: 01 Lut 2012
Posty: 66
Skąd: Poznań
Wysłany: 11 Lipiec 2012, 16:04   

Martin Nez,
NIE WIEM JAK MAM TOBIE DZIĘKOWAĆ :-)
Dokładnie o to mi chodziło.
Nawet nie wiesz jak bardzo przyspieszyłeś moją pracę :-)
Jeszcze raz BARDZO TOBIE DZIĘKUJĘ :-)
 
 
Martin Nez 
Doradca
Grafik?


Wersja CorelDRAW: 2019
Pomógł: 14 razy
Dołączył: 29 Sty 2011
Posty: 114
Skąd: Czmoń
Wysłany: 12 Lipiec 2012, 05:21   

Zapomniałem usunąć "2" z linii:
Kod:
ActivePage.SetSize Round(dblSzerokoscLogo + 2, 0), Round(dblWysokoscLogo + 2, 0)

Dzięki nim możesz sobie regulować o ile mm ma być większa kartka.

Pozdr,
MN
 
 
michal.s 
Praktyk


Wersja CorelDRAW: x4
Pomógł: 1 raz
Dołączył: 01 Lut 2012
Posty: 66
Skąd: Poznań
Wysłany: 13 Lipiec 2012, 18:46   

:)
Dziękuję za informację. Teraz to dopiero jest automatyzacja :)
p.s. Osobne podziękowania dla Ciebie od moich współpracowników.
 
 
maroQ 
Doradca


Pomógł: 16 razy
Wiek: 40
Dołączył: 08 Lut 2011
Posty: 117
Skąd: Kalisz
  Wysłany: 17 Lipiec 2012, 23:21   Szaman zaszamanił :)

Martin Nez napisał/a:
Używam takiego czegoś na codzień w pracy

Po kodzie łatwo można wywnioskować, że to jest wycinek czegoś czego używasz, bo widać sporo pozostałości po różnych kombinacjach.

Posprzątałem kod i zrobiłem 2 wersje makra:
Kod:
Sub WymiarKartkiWarning()
    Dim s As Shape
    ActiveDocument.Unit = cdrMillimeter
   
    If ActiveSelectionRange.Shapes.Count > 0 Then
        Set s = ActiveSelectionRange.Group
        Call s.AlignToPageCenter(cdrAlignHCenter + cdrAlignVCenter, cdrTextAlignBoundingBox)
        Call ActivePage.SetSize(Math.Round(s.SizeWidth, 0), Math.Round(s.SizeHeight, 0))
        s.Ungroup
    Else
        MsgBox "Musisz zaznaczyć elementy odniesienia", vbInformation, "Błąd!"
    End If
End Sub

Powyżej wersja ostrzegająca o konieczności zaznaczenia wszystkich (CTRL+A) lub wybranych elementów na stronie.

Kod:
Sub WymiarKartkiAuto()
    Dim s As Shape
    Dim sr As New ShapeRange
    ActiveDocument.Unit = cdrMillimeter
   
    Call sr.AddRange(ActivePage.Shapes.All)
    Set s = sr.Group
    Call s.AlignToPageCenter(cdrAlignHCenter + cdrAlignVCenter, cdrTextAlignBoundingBox)
    Call ActivePage.SetSize(Math.Round(s.SizeWidth, 0), Math.Round(s.SizeHeight, 0))
    s.Ungroup
End Sub

Powyżej wersja automatycznie zaznaczająca wszystkie obiekty na stronie i dopasowująca wymiary do tego co wyjdzie.

Zamiast "cdrAlignLeft + cdrAlignRight + cdrAlignTop + cdrAlignBottom" wystarczy "cdrAlignHCenter + cdrAlignVCenter" co w tym konkretnym przypadku zadziała dokładnie tak samo.

Osobiście rzadko już używam VBA więc piszę Call zamiast wywoływać metodę bez nawiasów. Później jak chcę się przenieść na VB.NET to tego mi nie poprawia... wyjątek stanowi msgbox która to metoda ładnie się poprawia z automatu (przeważnie).
 
 
michal.s 
Praktyk


Wersja CorelDRAW: x4
Pomógł: 1 raz
Dołączył: 01 Lut 2012
Posty: 66
Skąd: Poznań
Wysłany: 19 Lipiec 2012, 10:25   

A czy mógłbym poprosić o lekkie zmodyfikowanie kodu :-)
A mianowicie, jeżeli rozmiar elementu jest 100/100 mm to dopasowanie strony jest dokładnie takie.
Ale jeżeli element ma wymiar 99,4/99,4 mm to wymiar strony zaokrąglony zostaje do 99/99 mm
 
 
maroQ 
Doradca


Pomógł: 16 razy
Wiek: 40
Dołączył: 08 Lut 2011
Posty: 117
Skąd: Kalisz
Wysłany: 19 Lipiec 2012, 11:55   

michal.s napisał/a:
wymiar 99,4/99,4 mm to wymiar strony zaokrąglony zostaje do 99/99 mm

Hmmm.... to właśnie pokazuje jak ograniczone jest VBA w stosunku nawet do VB6 bo nie ma tu funkcji sufit, a jest tylko zwykłe zaokrąglanie.

Kiedyś już pisałem funkcję sufit dla VBA, ale gdzieś mi zniknęła więc napisałem nową, pewnie inaczej niż poprzednio, ale ważne że działa:
Kod:
Public Function Ceiling(ByVal x As Double) As Double
    Ceiling = Int(x) + IIf(x - Int(x) > 0, 1, 0)
End Function

Funkcja dodaje 1 jeśli po przecinku jest dowolna wartość większa od 0. Tak właśnie działa funkcja sufit czyli zaokrąglanie w górę.

int(x) to poprostu funkcja podłoga z x czyli część całkowita.

Po dodaniu w kodzie wymienionej wyżej funkcji mamy:
Kod:
Sub WymiarKartkiWarning()
    Dim s As Shape
    ActiveDocument.Unit = cdrMillimeter

    If ActiveSelectionRange.Shapes.Count > 0 Then
        Set s = ActiveSelectionRange.Group
        Call s.AlignToPageCenter(cdrAlignHCenter + cdrAlignVCenter, cdrTextAlignBoundingBox)
        Call ActivePage.SetSize(Ceiling(s.SizeWidth), Ceiling(s.SizeHeight))
        s.Ungroup
    Else
        MsgBox "Musisz zaznaczyć elementy odniesienia", vbInformation, "Błąd!"
    End If
End Sub

lub
Kod:
Sub WymiarKartkiAuto()
    Dim s As Shape
    Dim sr As New ShapeRange
    ActiveDocument.Unit = cdrMillimeter
   
    Call sr.AddRange(ActivePage.Shapes.All)
    Set s = sr.Group
    Call s.AlignToPageCenter(cdrAlignHCenter + cdrAlignVCenter, cdrTextAlignBoundingBox)
    Call ActivePage.SetSize(Ceiling(s.SizeWidth), Ceiling(s.SizeHeight))
    s.Ungroup
End Sub
 
 
michal.s 
Praktyk


Wersja CorelDRAW: x4
Pomógł: 1 raz
Dołączył: 01 Lut 2012
Posty: 66
Skąd: Poznań
Wysłany: 20 Lipiec 2012, 10:31   

Co mogę robić nie tak :-(
 
 
maroQ 
Doradca


Pomógł: 16 razy
Wiek: 40
Dołączył: 08 Lut 2011
Posty: 117
Skąd: Kalisz
Wysłany: 20 Lipiec 2012, 11:35   

michal.s napisał/a:
Co mogę robić nie tak

Ech.... czytanie ze zrozumieniem....

maroQ napisał/a:
Po dodaniu w kodzie wymienionej wyżej funkcji

Czyli jak nie dopiszesz:
Kod:
Public Function Ceiling(ByVal x As Double) As Double
    Ceiling = Int(x) + IIf(x - Int(x) > 0, 1, 0)
End Function

to nie zadziała...

Innymi słowy musisz to co masz zastąpić tym:

Kod:
Public Function Ceiling(ByVal x As Double) As Double
    Ceiling = Int(x) + IIf(x - Int(x) > 0, 1, 0)
End Function

Sub WymiarKartkiAuto()
    Dim s As Shape
    Dim sr As New ShapeRange
    ActiveDocument.Unit = cdrMillimeter
   
    Call sr.AddRange(ActivePage.Shapes.All)
    Set s = sr.Group
    Call s.AlignToPageCenter(cdrAlignHCenter + cdrAlignVCenter, cdrTextAlignBoundingBox)
    Call ActivePage.SetSize(Ceiling(s.SizeWidth), Ceiling(s.SizeHeight))
    s.Ungroup
End Sub


Jak już pisałem w VBA nie ma funkcji sufit tj. Ceiling, więc specjalnie ją po to napisałem. No raczej nie pisałem tego tylko po to by zapełnić treścią posta (chociaż niektóre fora mierzą ile tekstu średnio się pisze).

Jak nie wstawisz Ceiling to dostaniesz komunikat: "Sub or Function not defined" czyli brak definicji funkcji sufit powoduje, że kompilator rozkłada ręce i mówi "pi... nie robię" (zresztą liczby pi też nie ma w VBA i trzeba z tym kombinować...) .

Klasa Math z VBA jest bardzo ograniczona w stosunku do VB6 nie mówiąc już o VB.NET czy VSTA (też VB.NET, działa od Corela X5, ale ja tego nie używam narazie skoro samo VB.NET też działa).
 
 
michal.s 
Praktyk


Wersja CorelDRAW: x4
Pomógł: 1 raz
Dołączył: 01 Lut 2012
Posty: 66
Skąd: Poznań
Wysłany: 24 Lipiec 2012, 14:34   

maroQ napisał/a:
Ech.... czytanie ze zrozumieniem....

No właśnie :-) zrozumienia to nie było, oj nie było :-)
michal.s napisał/a:
A czy mógłbym poprosić o lekkie zmodyfikowanie kodu
A mianowicie, jeżeli rozmiar elementu jest 100/100 mm to dopasowanie strony jest dokładnie takie.
Ale jeżeli element ma wymiar 99,4/99,4 mm to wymiar strony zaokrąglony zostaje do 99/99 mm

Czy jest możliwość dopasowania strony dokładnie do wybranego elementu tzn. jeżeli zaznaczony element ma rozmiar 99,35/99,35 to strona po dopasowaniu bedzia miała wymiar 99,35/99,35 mm
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Nowe zasady dotyczące cookies. Wykorzystujemy pliki cookies, aby nasz serwis lepiej spełniał Państwa oczekiwania. Można zablokować zapisywanie cookies, zmieniając ustawienia przeglądarki.
         
Strona wygenerowana w 0.15 sekundy. Zapytań do SQL: 13