|
Corel FORUM
Forum użytkowników programów firmy Corel. Grafika wektorowa, rastrowa i obróbka zdjęć cyfrowych
|
Zastosowanie skryptów automatyzujących pracę w CorelDraw |
Autor |
Wiadomość |
Robsoninho
Początkujący
Dołączył: 06 Maj 2013 Posty: 6 Skąd: Piaseczno
|
Wysłany: 6 Maj 2013, 08:30 Zastosowanie skryptów automatyzujących pracę w CorelDraw
|
|
|
Siema
Mam do napisania prace na temat "Zastosowanie skryptów automatyzujących pracę w CorelDraw" jakby ktoś miał jakieś materiały na ten temat byłbym wdzięczny. Chodzi tu głównie o pokazanie zasady działania paru skryptów i ogólnie napisanie o skryptach (czyli po co sie to je). Za wszelkie dodatkowe materiały bede mega wdzieczny |
|
|
|
|
maroQ
Doradca
Pomógł: 16 razy Wiek: 40 Dołączył: 08 Lut 2011 Posty: 117 Skąd: Kalisz
|
Wysłany: 12 Lipiec 2013, 17:58
|
|
|
Robsoninho napisał/a: | Zastosowanie skryptów automatyzujących pracę w CorelDraw |
Nie wiem czy to jeszcze aktualne, ale tobie chodzi o CorelScript czy o Makra w VBA?
Na CorelScript się nie znam, na makrach owszem.
Podstawowe informacje o makrach VBA są w podręczniku Corela dołączanego do każdej instalacji (opcja podczas intalacji), ale tam są tylko podstawy. Makra VBA w Corelu pisze się podobnie jak te w Excelu czy Wordzie. Trochę inaczej niż w AutoCADzie gdzie bez książki ani rusz. Jak narazie nie ma książki do makr VBA, ale zobaczymy, jak mi starczy czasu...
Dodatkowe materiały znajdziesz na Forum CorelDraw.com lub Największe GuRu makr dla Corela: Alex Vakulenko. |
|
|
|
|
Robsoninho
Początkujący
Dołączył: 06 Maj 2013 Posty: 6 Skąd: Piaseczno
|
Wysłany: 5 Sierpień 2013, 12:24
|
|
|
Jeszcze aktualne, mam czas do wrzesnia :) Dzięki za odpowiedź i za przydatne linki.
Chodzi w tym temacie ogólnie o pojęcie skryptu metody ich tworzenia i pokazanie paru przykładów na jakiej zasadzie działają. Raczej będę pisał o Makrach w VBA bo trochę o tym wiem a o CorelScript to nic a nic, poza tym ze cos takiego istnieje. Promotor mi nie określił czy to ma być CorelScript czy Makra w VBA
Fajnie by było gdyby te wszystkie informacje z Pomocy w VBA były po polsku, co prawda znam angielski ale niestety jest podwójna robota z tłumaczeniem. Nie masz może jakiś materiałów po polsku?
I tak już bardzo dziękuje za pomoc :) |
|
|
|
|
maroQ
Doradca
Pomógł: 16 razy Wiek: 40 Dołączył: 08 Lut 2011 Posty: 117 Skąd: Kalisz
|
Wysłany: 10 Sierpień 2013, 13:49
|
|
|
Odnośnie VBA to należało by zacząć od tego co o nim wiadomo czyli od krótkiego wprowadzenia do VB i powstania VBA. Użyteczna literatura to wszystko co tyczy się VBA np. dla Excela (sporo książek po polsku). Link do heliona
Niestety dla Corela nie ma żadnej dobrej literatury z zakresu VBA. Część wiedzy można oprzeć na Corel Script i przepisywać treści na VBA lub poprostu uzmysłowić sobie, na czym polega urok VBA. Główna esencja tego zagadnienia to możliwość rozbudowy lub automatyzacji żmudnych zadań wykonywanych w Corelu czy jakiejkolwiek innej aplikacji która wspiera VBA.
Każdy program który posiada możliwość dostępu do bibliotek lub plików exe poprzez obiekty COM (activeX) umożliwia dostęp analogiczny jak w VBA, ale to przeważnie wymaga dodania tzw. referencji do programu. Dostęp tego typu umożliwia podglądanie wszystkich publicznych obiektów funkcji itp. dostępnych z poziomu obiektu utworzonego na bazie danej biblioteki.
Z punktu widzenia makr w VBA nie trzeba tworzyć obiektów typu Application ponieważ one są już utworzone i by dostać się np. do danych dotyczących aktywnego dokumentu piszesz: "ActiveDocument." gdzie "." ma znaczenie takie same jak w C++ i innych językach wyższego rzędu. Jest to dostęp do obiektów danej klasy.
Nie chcę cię zanudzać tematem, ale jak chcesz przykład to powiedz co chcesz wykonać w Corelu. Nawet na tym forum znajdziesz bardzo wiele prostych i trochę bardziej złożonych przykładów na makra. Nie używam określenia "skrypty" bo są zbyt zbliżone do "corel script" i mogą być mylące. Szczególnie, że ludzie często nie rozumieją, że dostęp przez COM nie narzuca konieczności pisania programu w Visual Basicu. Sam COM należy traktować jak most między zabawkami którymi bawi się grafik w Corelu, a całym szeregiem czarnoksięskich machin i specyfików jakich używa programista. Przykładowo Alex Vakulenko posiada makro które rysuje prawie dowolny wykres w Corelu z możliwością rysowania jak w Matlabie czyli punkt po punkcie oraz z możliwością użycia tego co jest wbudowane w Corela czyli krzywych Beziera lub innymi słowy aproksymacji 3 punktowej. Sam dla jedego klienta przeniosłem całą logikę makra do bazy danych pozostawiając jedynie to co jest naprawdę potrzebne by wyświetlać wyniki w Corelu. Również odtworzenie dowolnej krzywej zapisanej w Corelu na podstawie tabelki z bazy danych nie stanowi żadnego problemu (tych tajników nie zdradzam bo to wiedza szamańska).
Robsoninho napisał/a: | znam angielski ale niestety jest podwójna robota z tłumaczeniem |
Niestety, ale inaczej się nie da... przynajmniej na chwilę obecną.
Robsoninho napisał/a: | Nie masz może jakiś materiałów po polsku? |
Nie.
Robsoninho napisał/a: | Zastosowanie skryptów automatyzujących pracę w CorelDraw |
Masz jakiś plan pracy?
Napewno z 20 stron możesz poświęcić na wprowadzenie do VBA oraz krótki opis składni (góra kilka stron) i oczywiście drzewo zależności lub coś w tym rodzaju. Jakiego poziomu jest to praca (który stopień studiów) i jakie studia (uniwerek czy polibuda)?
Nadrzędny jest zawsze dokument, później strona, warstwa, kształt. Jeśli jest to krzywa to dalej masz: segmenty i równoważne węzły. Z segmentu możesz odwołać się do rodzica lub kolejnego/poprzedniego segmentu. Każda krzywa wie gdzie ma początek i koniec. Krzywa jest to zbiór prostych lub "krzywych beziera". Wszystko da się zamienić na krzywe... no prawie wszystko... Obrazek zamieniasz na krzywe poprzez trasowanie, ale czy efekt jest zadowalający to zależy od ilości szczegółów (w 90% przypadków są poprawki). Ja tu widzę ładne drzewa i grafy, oraz bardzo rozległe możliwości.
W Corelu jest narzędzie do rejestracji skryptów na bazie wykonywanych czynności. Niestety nie wszystko da się zarejestrować, a część operacji jest rejestrowana tak, że kod nie nadaje się do niczego (np. rozbicie krzywej lub dodanie segmentu powoduje rejestrację budowy krzywej segment po segmencie). Podobnie wygląda sprawa z rejestrację tekstu i operacji na tekście.
Ważne jest to, że nie każde podejście w makrach jest właściwe i często trzeba szukać optymalnego rozwiązania wywarzając otwarte drzwi. Tutaj wszystko rozbija się o przenośność kodu. Nie każde makro jest przenośne wstecz, ale i nie każde jest przenośne w górę. Tyle że brak przenośności w górę jest przeważnie związany z błędami które pojawiają się w Corelu. Przykładowo w Corel Draw X5 eksport do tif z makra powoduje powstawanie wielkich plików bez kompresji. Natomiast analogiczna operacja ręczna nie powoduje problemów. Również kod przeniesiony na X4 lub X6 nie powoduje problemów. Niestety, ale są tzw. bugi (z ang. bugs) które sprawiają, że dany kod może nie działać bo np. ktoś zapomniał dopiąć jakiejś funkcjonalności. Część kodu nie działa optymalnie. Przykładem było chyba wymiarowanie w Corel X3 (lub innej wersji) które działało niesamowicie wolno z makra i bardziej opłacało się kombinować jak to zrobić ręcznie.
Przy rysowaniu "z makra" używasz zasad znanych z geometrii i bardzo często przydaje się liczba pi i trygonometria. Nie wszystko musisz liczyć, nie zawsze musisz np. konwertować jednostki. Problemem jest praca w skali, ale to już zagadnienia bardziej dla Corel Designera. Makro pracujące w skali wymaga dużo więcej uwagi niż to pracujące na rysunkach 1:1. |
|
|
|
|
Robsoninho
Początkujący
Dołączył: 06 Maj 2013 Posty: 6 Skąd: Piaseczno
|
Wysłany: 12 Sierpień 2013, 10:10
|
|
|
To są studia inżynierskie na polibudzie ale praca nie jest jeszcze inżynierska tylko tzw."przejsciowa" z 6 na 7 semestr - wprowadzili to dopiero od tego roku i ma to nas przygotować do napisania inżynierki. W sumie promotor powiedział mi ze cała praca ma byc okolo 20 stronicowa, żebym znalazl i wybral sobie pare przydatnych "skryptów" i napisał na jakiej zasadzie one działają. Zaznaczył też żebym nie wchodził w tematy programowania bo to nie sa studia informatyczne tylko poligraficzne.
Co do planu pracy to mam taki dosyc ogólny i mysle ze mi akurat wyjdzie kolo 20 stron:
1. Pojęcie skryptu i makra - różnice między nimi
2. Sposoby pisania makra (rejestrowanie czynnosci i pisanie w vba)
3. Opis działania przykładowych 3 skryptow
4. Podsumowanie
Według mnie aby najlepiej pokazac zasade dzialania tych skryptow to zrobie to metoda screen + opis. Tak chyba to bedzie najbardziej czytelnie wygladac, chociaż moze sie troche zwiększyć objetosc pracy. |
|
|
|
|
maroQ
Doradca
Pomógł: 16 razy Wiek: 40 Dołączył: 08 Lut 2011 Posty: 117 Skąd: Kalisz
|
Wysłany: 12 Sierpień 2013, 22:07
|
|
|
Zerknij na książkę: "Automatyzacja CorelDraw. Skrypty" Andrzej Żak, Wydawnictwo Mikom.
To niestety są głównie Corel Script działające w Corel Draw 9. Coś tam z basica też jest, bo tak się składa, że w Corel Draw 9 wprowadzono VBA. Ta wersja jest ciekawa, bo ma rejestrator Corel Script. Kiedyś nawet próbowałem połączyć się z Corel Draw 9 z Javy i to się nawet udało (próby z nowszymi wersjami Corela nie poszły tak dobrze).
CorelScript nadal używa się w wielu narzędziach Corela np. Corel Photo Paint, gdzie można rejestrować tylko CorelScript. No ale to nie problem bo CorelScript można wywoływać z VBA, więc możliwości są całkiem spore (ale przypomina to trochę pisanie makr dla AutoCADa gdzie większość rzeczy też trzeba było wykonywać skryptem zewnętrznym).
Edytor Corel Script był niestety tylko w CDR9, w nowszych wersjach już go nie ma, ale do tego celu użyć VBA: Przykład by Shelbym (to jest metamorfoza, ale by zadziałała musisz zaznaczyć jakiś obiekt przed wywołaniem makra, zresztą w innym przypadku dostaniesz błąd który właśnie to stwierdzi.
Do screenów wgraj sobie PicPick lub HoverSnap, oba po odpowiedniej konfiguracji potrafią zapisywać screeny automatycznie. PicPick ma dodatkowo edytor screenów przypominający trochę rozbudowanego painta. Jest jeszcze takie coś jak Wink, ale osobiście średnio mi podchodzi, a przynajmniej nie do rejestracji screenów na potrzeby dokumentacji technicznej. |
|
|
|
|
chezare
Pomógł: 402 razy Dołączył: 24 Gru 2010 Posty: 4551 Skąd: Grodzisk Mazowiecki
|
Wysłany: 12 Sierpień 2013, 22:09
|
|
|
Sub test()
Dim s As String
Dim i As Integer
Dim t As Variant
t = Array(84, 111, 32, 116, 97, 107, 32, 106, _
97, 107, 98, 121, 32, 111, 112, 105, 115, 97, _
230, 32, 100, 122, 105, 97, 179, 97, 110, 105, _
101, 32, 97, 110, 97, 108, 111, 103, 111, 119, _
101, 103, 111, 32, 122, 101, 103, 97, 114, 107, _
97, 44, 32, 98, 101, 122, 32, 117, 191, 121, 119, _
97, 110, 105, 97, 32, 115, 179, 111, 119, 97, 32, _
116, 114, 121, 98, 46, 32, 68, 111, 98, 114, 101, 32, 58, 45, 41)
s = ""
For i = 0 To 84: s = s + (Chr(t(i))): Next i
MsgBox s
End Sub |
|
|
|
|
maroQ
Doradca
Pomógł: 16 razy Wiek: 40 Dołączył: 08 Lut 2011 Posty: 117 Skąd: Kalisz
|
Wysłany: 12 Sierpień 2013, 22:35
|
|
|
chezare napisał/a: | chezare |
Kod: | Sub Szt()
Dim chs(26) As Integer
Dim txd As String
Dim ech As Variant
Dim i As Integer
For i = 0 To UBound(chs) - 1
chs(i) = 97 + i
Next i
chs(UBound(chs)) = 32
ech = Array(1, 0, 17, 3, 25, 14, 26, 25, 0, 1, 0, 22, 13, 4, 26)
For i = 0 To UBound(ech)
txd = txd & Chr(chs(ech(i)))
Next i
MsgBox txd, vbInformation, Chr(58) & Chr(45) & Chr(chs(15))
End Sub |
|
|
|
|
|
chezare
Pomógł: 402 razy Dołączył: 24 Gru 2010 Posty: 4551 Skąd: Grodzisk Mazowiecki
|
Wysłany: 13 Sierpień 2013, 01:00
|
|
|
Gdybym wiedział, że w tzw. międzyczasie w temacie znajdzie się Twój tekst, to bym się nie wygłupiał |
|
|
|
|
Robsoninho
Początkujący
Dołączył: 06 Maj 2013 Posty: 6 Skąd: Piaseczno
|
Wysłany: 13 Sierpień 2013, 11:34
|
|
|
Dzieki Panowie za odpowiedzi.
Ksiażke "Automatyzacja CorelDraw. Skrypty" posiadam i przydała mi się na samym początku do zrozumienia idei tego wszystkiego. Ale tak jak napisałeś to jest w sumie tylko do Corela 9 bo tylko tam jest CorelScripts. Ale mimo wszystko przydała się.
Teraz mam do Was taką prośbę, mianowicie chciałbym połączyć przyjemne z pożytecznym. Ojciec chciałby zautomatyzować swoją pracę w Corelu poprosił mnie żebym mu napisał makro - jako że jeszcze nie za bardzo się orientuje w sprawach programowania, stąd moja prośba czy moglibyście mi pomóc to napisać. Przy okazji opisałbym działanie tego makra w swojej pracy.
Chodzi o to że jest sobie lista nazwisk w .txt i trzeba je dopasować do prostokątu o wymiarach 70mm x 16mm. Nazwiska mają być w Arialu 24pkt.
Jest możliwe zrobienie czegoś takiego?
W załączniku przesyłam efekt końcowy jak to powinno wyglądać.
nazwiska.jpg
|
Pobierz Plik ściągnięto 551 raz(y) 112.04 KB |
|
|
|
|
|
maroQ
Doradca
Pomógł: 16 razy Wiek: 40 Dołączył: 08 Lut 2011 Posty: 117 Skąd: Kalisz
|
Wysłany: 13 Sierpień 2013, 16:59
|
|
|
Robsoninho napisał/a: | Jest możliwe zrobienie czegoś takiego? |
"Oczywiście... że nie!" Jak mówił mój nauczyciel od matematyki w czasach technikum.
Kod: | Function fileOpen(ByVal filename As String) As String
'
' Otwieramy zadany plik i czytamy zawarte w nim linie
'
'Deklaracja zmiennych
Dim tmp As String
'Otwórz plik w trybie "do odczytu"
Open filename For Input As #1
'Czytaj w pętli aż do końca pliku czyli do EOF (End of File)
While Not EOF(1) 'pętla while działa dopóki warunek jest prawdziwy
'Czytaj pojedynczą linijkę z pliku
Line Input #1, tmp
'Wpisz dane na wyjście (sposób specyficzny dla VB)
fileOpen = fileOpen & tmp & vbNewLine
Wend
'Zamknij połączenie z plikiem
Close #1
End Function
Sub EtykietyNazwiskowe()
'
' Otwiera plik nazwiska.txt i umieszcza jego zawartość w Corelu
'
'Deklaracja zmiennych
Dim spl() As String, spl2() As String
Dim x As Double, y As Double
Dim w As Double, h As Double
Dim d As Integer
Dim s As Shape
Dim i As Integer
'Jednostki w mm
ActiveDocument.Unit = cdrMillimeter
'szerokosc
w = 70
'wysokosc
h = 16
'odstępy
d = 2
'czytaj dane z pliku:
tmp = fileOpen("c:\nazwiska.txt")
'zamien wynik na tablice jednowymiarowa
spl = Split(tmp, vbNewLine)
'ustaw wspolzedne poczatkowe
x = ActivePage.CenterX
y = ActivePage.TopY
'poprzez wszystkie linie wykonuj:
For i = 0 To UBound(spl) - 1
If spl(i) Like "* *" Then
'podziel tekst po znaku spacji
spl2 = Split(spl(i), " ")
'Rysuj prostokąt
Set s = ActiveLayer.CreateRectangle2(x, y, w, h)
'Rysuj napis
With ActiveLayer.CreateArtisticText(x + w / 2, y + h / 2, Left(spl2(0), 1) + ". " + spl2(1), , , "Arial", 24, , , , cdrCenterAlignment)
'wyśrodkuj napis w pionie
.AlignToShape cdrAlignVCenter, s
End With
'y niżej o wysokość prostokąta + d czyli:
y = y - h - d 'inaczej: y = y - (h + d)
End If
Next i
End Sub
|
zawartość pliku c:\nazwiska.txt
Kod: | Adam Adamczyk
Wiktoria Anuszewska
Robert Augustyniak
Kamila Bajszczak
Oliwia Baranowska
Paulina Bartnicka
Roman Biernart
Leokadia Borkowska
Barbara Burzyńska
Olaf Cacko
Zenia Cembrzyńska
Natalia Chodzińska
Magda Cudna
Maria Dąbrowska
Katarzyna Dębska
Anna Domańska
Henryk Dróżdż
Robert Drygiel
Emilia Filpczka
Zygmunt Frączkiewicz
Edward Fronc
Justyna Gadomska
Zenon Głowka |
Do zmiany liter na tzw. kapiralki służy funkcja "UCase(string)" możesz ją zastosować, ale dla zadanej treści spowoduje to, że nazwiska wyjdą poza obszar ramek. |
|
|
|
|
Robsoninho
Początkujący
Dołączył: 06 Maj 2013 Posty: 6 Skąd: Piaseczno
|
Wysłany: 13 Sierpień 2013, 20:59
|
|
|
Jesteś wielki!! Dziękuje w imieniu swoim i mojego ojca :)
Jest to duże ułatwienie i przyspieszenie pracy.
Jednak mam jeszcze pewne "wytyczne":
1. Chodzi właśnie o ten obszar ramek, bo nazwiska trafiają się większe i niestety wychodzą poza ten prostokąt.
Myślałem żeby dodać warunek jeżeli napis jest większy od 70mm to wtedy ramka ma się powiększyć o 5mm, ale niestety nic mi nie wychodzi...
2. Nazwiska powinny być w kapitałkach
3. Chciałbym żeby Corel ściągał dokładnie to co jest w notatniku bez zmiany imienia w inicjał
4. Próbowałem własnymi siłami dodać dodatkową ramkę wewnątrz tej 70mm x 16mm ale nie mogę jej w poprawny sposób wyśrodkować, ta mniejsza ma wymiary 67mm x 13mm. Przesyłam w załączniku jak chciałbym żeby to wyglądało.
Jeszcze raz wielkie dzięki, jeżeli dałbyś radę jeszcze to zrobić to nie wiem jak mam Ci dziękować.
NAZWISKA2.jpg
|
Pobierz Plik ściągnięto 529 raz(y) 79.95 KB |
|
|
|
|
|
maroQ
Doradca
Pomógł: 16 razy Wiek: 40 Dołączył: 08 Lut 2011 Posty: 117 Skąd: Kalisz
|
Wysłany: 14 Sierpień 2013, 09:37
|
|
|
Robsoninho napisał/a: | Jednak mam jeszcze pewne "wytyczne": |
Nie wiem czy wiesz czemu nazywają mnie tu "szamanem". Nie chodzi o moją wiedzę z zakresu VBA, ale o podejście do tematu. Nigdy nie daję za darmo kodu który nie wymaga poprawek. Zawsze coś trzeba pogrzebać. Staram się do tego namawiać ludzi by trochę ruszyli głową. To nie jest takie trudne.
Skoro chcesz użyć kod w swojej pracy przejściowej to jednak powinieneś go napisać samemu lub chociaż trochę zmęczyć szare komórki przy jego tworzeniu (poczytaj sobie o tym co to jest plagiat, bo to się przyda na inżynierce). Zmiany które potrzebujesz są bardzo proste i poradzisz sobie z nimi jeśli tylko zrozumiesz do czego służą instrukcje które użyłem.
Jako podpowiedź:
1. By nie ciąć imion musisz zrezygnować z podziału po spacji (split) i zamiast "kawałek napisu (left), kropka, druga część napisu", wstawiasz poprostu spl(i)
2. By uzyskać 2 ramkę używasz: ActiveLayer.CreateRectangle lub ActiveLayer.CreateRectangle2, a tam podajesz współrzędne x,y, szerokość i wysokość
Przeanalizuj kod linijka po linijce (funkcję fileOpen możesz pominąć bo tak poprostu to powinno działać) i spróbuj zrozumieć co się tam dzieje.
nazwiska2.cdr Przykładowy efekty uzyskany po dodaniu drobnych poprawek.
'Rysuj prostokąt Call ActiveLayer.CreateRectangle2(x, y, w, h) Set s = ActiveLayer.CreateRectangle2(x + 1.5, y + 1.5, w - 3, h - 3) |
Pobierz Plik ściągnięto 469 raz(y) 19.78 KB |
|
|
|
|
|
Robsoninho
Początkujący
Dołączył: 06 Maj 2013 Posty: 6 Skąd: Piaseczno
|
Wysłany: 16 Sierpień 2013, 12:21
|
|
|
Jestem nowy na tym forum więc nie wiedziałem skąd się wzięła ksywka szaman, ale już będę wiedział.
Posiedziałem trochę nad tym kodem, przeanalizowałem go i udało mi się dodać prawie wszystkie poprawki jakie chciałem: centrowanie w poziomie,litery jako kapitałki, pobieranie tekstu bez dzielenia imienia i dodanie drugiej ramki.
Ale mam problem z wielkością ramki przy dłuższych nazwiskach mianowicie nie wiem jak napisać warunek żeby one się zwiększały gdy napis jest dłuższy.
Masz jakiś pomysł na zrobienie tego? Albo jakąś podpowiedź? |
|
|
|
|
maroQ
Doradca
Pomógł: 16 razy Wiek: 40 Dołączył: 08 Lut 2011 Posty: 117 Skąd: Kalisz
|
Wysłany: 16 Sierpień 2013, 15:43
|
|
|
Robsoninho napisał/a: | nie wiedziałem skąd się wzięła ksywka szaman |
Hmmm... najlepszą definicję by dał chazare, bo to był jego pomysł moja definicja może być błędna.
Robsoninho napisał/a: | go i udało mi się dodać prawie wszystkie poprawki jakie chciałem |
Gratulacje! Na tym właśnie polega nauka. Osobiście lubię analizować obcy kod oile jest on dość prosty, bo na wielkich aplikacjach ciężko się uczyć, szczególnie jeśli występuje tam dziedziczenie, szablony i tysiące linii kodu oraz brak jest rozsądnej dokumnetacji technicznej.
Odnośnie wielkości ramki to opcje są następujące:
1. Cięcie napisu po określonej ilości znaków (nieładna metoda),
2. Zmiana czcionki na taką dla której napis się mieści,
3. Rozszerzenie ramki by napis się zmieścił,
4. Zmniejszenie szerokości napisu,
5. Proporcjonalne zmniejszenie napisu tak by dopasować go do ramki (proporcje czyli chyba szkoła podstawowa, chyba że teraz uczą tego dopiero w gimazjum).
Punkt 4 jest bardzo prosty i daje akceptowalne wyniki (zamieszczony kod do umieszczenia w with przy tworzeniu napisu):
Kod: | If .SizeWidth > w - 3 Then
.SizeWidth = w - 4
End If |
Do cięcia służy funkcja mid() podobna do substr() z php, czyli mid(napis, początek_tekstu, ilość_znaków).
W php zawsze używałem funkcji Ciach() (taką nazwę wymyśliłem bo oddawała sens działania lepiej niż anglojęzyczny odpowiednik) która dodawała trzy kropki po ucinanym napisie.
Punkt 2:
opcja 1: dodajemy napis w pętli i jeśli jest dobry to wychodzimy z pętli, a jak nie to rysujemy go z mniejszą czcionką, zapętlając do czasu aż napis jest wystarczająco mały. Ewentualnie napis zostawiamy jak jest, ale po jego wykonaniu dodajemy ramkę okalającą tekst (proste do wykonania).
opcja 2: tworzymy tablicę wielkości znaków dla naszej czcionki Arial 24 i obliczamy wielkość napisu przed jego narysowaniem.
opcja 3: najpierw tworzymy napis, pobieramy jego wielkość, a później rysujemy adekwatną ramkę.
opcja 4: wpisujemy napis w prostokątną ramkę przez co jest z nią złączony (tego nie da się zarejestrować i jest troszkę trudniejsze w wykonaniu). |
|
|
|
|
|
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
|
|
|
|
|
|
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.23 sekundy. Zapytań do SQL: 15 |
|
|