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

Makra - Prośba o prosty skrypt

zyzio - 6 Czerwiec 2011, 17:09
Temat postu: Prośba o prosty skrypt
Witam serdecznie wszystkich Użytkowników. Jestem pewny, że dla osób które się orientuja w WB nie będzie to wielkie wyzwanie a mianowicie chciałbym prosić o pomoc w napisaniu skryptu, który będzie odnajdywał obiekty "wymiar" i zmieniał zarówno kolor linii jak i tekstu który go tworzy na 100% magenta. W tej chwili pracuję na X5. Miałem nadzieję, że uda mi się to ogarnac recorderem ale jednak trzeba będzie napisać ręczne jak sadzę.

Z góry wielkie dzięki[/code]

chezare - 7 Czerwiec 2011, 05:49

Keyzetman, tak opisałeś zadanie, że nie wiadomo o co chodzi?
Czy WB to to samo co VBA? Jeśli się dobrze orientuję, to nie ma obiektów wymiar, prędzej wymiar jest jedną z właściwości obiektu. Później piszesz o tekście, czy ten wymiar, to wielkość fontu w napisie? Czy trzeba zmienić kolor napisów, o określonej wielkości, bo jeśli tak, to nie potrzebne do tego żadne makro.

zyzio - 7 Czerwiec 2011, 08:56

VBA to to samo pewnie źle się wyraziłem. Chodzi dokładnie o obiekt wymiarowania lecz w menadżerze obiektów widnieje jako "Wymiar". oraz tekst opisujący wartość tegoż wymiaru jak na screenie w załączeniu.
wawel - 7 Czerwiec 2011, 11:18

W Corelu dobrze dziala funkcja znajdz tam wskazujesz wymiar i program znajduje wszystkie wymiary, a potem klikasz na palecie z kolorami i wszystkie te obiekty wypelniasz hurtem takim kolorem jak chcesz. Wypelnienie dziala dla tekstu, a wypelnienie konturu dla lini wymiaru.
pozdr.

zyzio - 7 Czerwiec 2011, 11:26

Właśnie tak to robiłem jak pracowaliśmy w firmie na X3. Niestety w X5 można tym szybkim sposobem podmienić tylko kolor linii natomiast tekst trzeba zaznaczać oddzielnie :(
chezare - 7 Czerwiec 2011, 21:50

Przed chwilą napisałem, ze Corel w nowych wersjach "ulepszył" obsługę gifów, a teraz jeśli to prawda co pisze Keyzetman, "ulepszył" kolejną dobrze działającą rzecz. Odnoszę wrażenia, że każda kolejna wersja jest coraz gorsza.
maroQ - 1 Lipiec 2011, 19:57
Temat postu: Re: Prośba o prosty skrypt
keyzetman napisał/a:
będzie odnajdywał obiekty "wymiar" i zmieniał zarówno kolor linii jak i tekstu który go tworzy na 100% magenta

Nie da się tak łatwo wykryć który obiekt tekst (cdrTextShape) ma wymiar (cdrLinearDimensionShape). Należało by ułatwić programowi znalezienie tego "wymiaru" wśród "niewymiarów". Do tego celu służy makro NazwijWymiar(). Klikasz na wymiar i włączasz makro lub ręcznie nadaje nazwę "wymiar". Jak już masz nazwane wszystkie "wymiary" to teraz uruchamiasz makro KolorujWymiar() i dostajesz to czego chciałeś.

Kod:
Sub KolorujWymiar()
    Dim s As Shape
   
    For Each s In ActivePage.Shapes
        If s.Type = cdrTextShape And s.Name = "wymiar" Then
            s.Fill.ApplyUniformFill CreateCMYKColor(0, 100, 0, 0)
        End If
        If s.Type = cdrLinearDimensionShape Then
            s.Outline.SetProperties Color:=CreateCMYKColor(0, 100, 0, 0)
        End If
    Next s
End Sub

Sub NazwijWymiar()
    If ActiveShape Is Nothing Then Exit Sub
    If ActiveShape.Type <> cdrTextShape Then Exit Sub
    ActiveShape.Name = "wymiar"
End Sub


P.S. VBA to nie skrypt. Corel posiada coś takiego jak skrypty Corela które oprogramowuje się inaczej niż makra VBA więc nazwanie makra skryptem w tym przypadku jest niewłaściwe. Zresztą makro jest po części składowane jako coś w rodzaju binarki lub raczej jak .class w javie, więc nie jest to skrypt który z definicji jest otwartym kodem. Teoretycznie skryptem można nazwać kod PHP, ale tam też jest to nadużycie gdyż są 2 główne techniki pisania programików w php tj. skryptowa (jak w SSI) oraz "normalna" tj. pisanie programów tak jak w C, C++ czy VB tj. nie mieszamy kodu html z kodem php. No ale to tylko tak na marginesie.

chezare - 1 Lipiec 2011, 21:42

Nie jestem taki pewny czy kompilowany jest w jakiś sposób plik do którego zapisywane jest makro czy też kod tego makra. Obawiam się, że makro jest tłumaczone w momencie wykonywania, choć głowy nie dam.
MaroQ, muszę niestety stwierdzić, że mnie strasznie osłabiłeś tym pomysłem z nazywaniem pewnych elementów żeby im później zmienić kolor. Równie dobrze zanim uruchamiać makro można za każdym razem klikać kolorowy kwadracik :-)

Wojtek Kowalews - 2 Lipiec 2011, 21:24

Obawiam się, że obaj Panowie maroQ i chezare mają rację. Obiektowi należy nadać nazwę aby zastosować do niego makro, ale jest to mocno uciążliwe i nie opłacalne w przypadku zmiany koloru wymiarowania. Proponuję utworzenie warstwy o nazwie "wymiar" na której znajdować się będą tylko wymiary, zaś obiekty znajdować się będą na innej warstwie o nazwie np. "obiekty". Zaznaczamy warstwę "wymiar" i wszystkie znajdujące się na niej obiekty wciskamy ctrl+K, a następnie prawym i lewym klawiszem myszy wskazujemy wybrany kolor linii i wypełnienia uzyskując efekt jak w X3.
chezare - 2 Lipiec 2011, 22:26

Wymyśliłem jeszcze jeden sposób, który szybko pozwala zmienić kolor tekstu i linii wymiaru. Nie wiem czy zadziała to w X5, nie mam jak sprawdzić.
Najpierw musimy utworzyć dwa obiekty, napis i linię i nadać im odpowiednie właściwości (kolor - magenta) można wykorzystać też wcześniej utworzony i zmodyfikowany wymiar. Otworzyć zakładkę stylów (Ctrl+F5) i przeciągnąć kolejno do niej linię i napis. Dla wygody zmieniamy im nazwy żeby łatwo je było znaleźć wśród innych.
Znajdujemy tradycyjną metodą (znajdź obiekty) wszystkie wymiary i korzystamy z wcześniej przygotowanych dwóch nowych stylów. Wadą takiego rozwiązania jest to, że napis po tej operacji zostaje wyposażony w kontur.
W ogóle to rozumiem, że problem dotyczy już istniejących wymiarów, bo jeśli dopiero zamierzamy je wstawiać, to bez trudu można im właściwe kolory, grubość linii font i jego wielkość zdefiniować.

maroQ - 5 Lipiec 2011, 21:42

Wojtek Kowalews napisał/a:
Proponuję utworzenie warstwy o nazwie "wymiar" na której znajdować się będą tylko wymiary, zaś obiekty znajdować się będą na innej warstwie o nazwie np. "obiekty".


Kod:
Sub KolorujWymiar()
    Dim s As Shape
   
    For Each s In ActivePage.Shapes
        If s.Type = cdrTextShape And s.Layer.Name = "wymiar" Then
            s.Fill.ApplyUniformFill CreateCMYKColor(0, 100, 0, 0)
        End If
        If s.Type = cdrLinearDimensionShape And s.Layer.Name = "wymiar" Then
            s.Outline.SetProperties Color:=CreateCMYKColor(0, 100, 0, 0)
        End If
    Next s
End Sub


Przynajmniej jedna osoba tutaj myśli, a nie tylko naśmiewa się z innych...
Powyżej poprawione makro. Wystarczy przenieść wszystkie wymiary na warstwę wymiar lub lepiej: tam je tworzyć. Rozwiązanie bardzo przypomina AutoCADa. Nie ma jak prostota. Dzięki za pomysł.

P.S. Do osoby z którą nie koresponduję:
Cytat:
Dla wygody zmieniamy im nazwy żeby łatwo je było znaleźć wśród innych.
i kto tu kogo osłabia... Ilość ruchów do wykonania operacji zmiany nazwy: Klikamy na obiekt (jak się uda to tylko raz) i wpisujemy nazwę: 1-2 kliknięcia + napis (n znaków) >> pojedyncze kliknięcie na ikonkę NazwijWymiar lub wywołanie klawisza skrótu.
chezare - 5 Lipiec 2011, 22:17

Osoba, która ze mną nie koresponduje, obraziła się?
Najlepiej by było jak na temat tych pomysłów wypowiedziałby się autor postu. Obawiam się, że wszystkie te pomysły są na nic, bo człowiekowi chodzi o zmianę już istniejących wymiarów.
Pomysł osoby, która ze mną nie koresponduje żeby pięć razy coś klikać żeby później jednym ruchem zmienić kolor wymiaru wydaje mi się niezwykle interesujący.
W makrze brakuje istotnego elementu. Komunikatu o tym, że operacja zakończyła się sukcesem.

maroQ - 5 Lipiec 2011, 23:36

http://forum.oberonplace.com/showthread.php?t=2243
Tam jest wyjaśnienie dlaczego nie może być inaczej... ręce opadają...
Szaman napisał/a:
Nie da się tak łatwo wykryć który obiekt tekst (cdrTextShape) ma wymiar (cdrLinearDimensionShape)
Obiekt taki jak "dimension" nie istnieje, to jest poprostu "dimension" dodany do "text". Poza tym co za problem pozaznaczać wymiary i kolejno przenieść je na warstwę "wymiar"? No można to zrobić z makra, ale czynnik ludzki musi współpracować w ten lub inny sposób inaczej się nie da. W Corelu tak jest w wielu przypadkach (czasem nawet jak by się dało dla kogoś kto bardzo tupie nogami, zrobić super automatyzację, to itak ograniczenia możliwości użycia VBA w Corelu likwidują zamysł). Czynnik ludzki jest nieodzowny w Corelu. To nie jest AutoCAD i nie kosztuje tyle. Zresztą makra w CADzie to zupełnie inna bajka.
Cytat:
Komunikatu o tym, że operacja zakończyła się sukcesem

Kod:
msgbox "Operacja zakończona sukcesem", vbInformation, "chezare"
Nadmiar komunikatów to przekleństwo... nie należy maltretować użyszkodnika, chyba że tego sobie życzy... Jak dla mnie temat zakończony chyba że autor się wypowie.

chezare - 7 Lipiec 2011, 22:29

MaroQ zaczynasz rozmawiać sam ze sobą. Jeśli chodzi o mnie to bym się nad tym zastanowił :-)
maroQ - 7 Lipiec 2011, 23:05

chezare napisał/a:
Jeśli chodzi o mnie to bym się nad tym zastanowił

Nie mam czasu a na psychiatrę mnie narazie nie stać. Coś te moje mikstury się średnio sprzedają :P Może mam zbyt drogiego dostawcę specyfików.

chezare - 10 Lipiec 2011, 06:24

Jak człowiek mówi sam do siebie, to niekoniecznie od razu potrzebny mu psychiatra :-)
Nie wiem czy z pisania makr do Corela da się wyżyć? Może spróbuj pisać makra, które łatają dziury w Corelu lub robią rzeczy, których Corel sam z siebie zrobić nie potrafi? W sieci można znaleźć sporo takich wynalazków, które autorzy sprzedają po kilkadziesiąt papierów. Tylko tutaj może być problem z logistyką. Jak to sprzedawać i jak zabezpieczyć żeby ludzie nie rozdawali sobie w sieci za free?


Powered by phpBB modified by Przemo © 2003 phpBB Group