Yazar:Tunç Y. Olçay Eklenme: 11.06.2009 Okunma: 7005
Seviyesi: İleri
Başlangıç Notu: Bu dersi direk okumadan önce, bundan önceki VBA derslerini okuyup, anladığımızdan ve birkaç deneme yaptığımızdan emin olalım. Çünkü önceki derslerde anlatılmış olan, gms'ye; form, buton, modül vb ekleme konuları direk geçilmiş olacaktır. Bu yüzden herhangi bir kafa karışıklığı olmasını önlemek adına önceki derslerden bu zamana belli bir düzeye geldiğimize emin olalım.
Aslına bakarsanız hali hazırda CD içinde numaralandırma üzerine yazılmış bir .gms modül var. (CorelMacros.PageNumbering) Ama bu hazır gms tek bir sayfaya numaralandırma yapıyor. Bazı kitap, dergi dizgilerinde sayfa yatay konuma getirilip sayfalar iki tarafına yerleştirilir. Böylelikle bir sayfa içinde 2 sayfa oluşmuş olur ve numaralandırmanın sayfanın iki tarafına yapılması gerekebilir. Bu nedenle, bu dersimizde CorelDraw VBA'mıza tek sayfa içine nasıl çift numaralandırma yaptırabileceğimizi öğreneceğiz.
Şekilde göreceğiniz üzere bir gms yaratmış(İşaret: 1), onun altına da bir adet form (İşaret: 2 ve 2a), bir adet textbox(İşaret: 5 ? 5a), bir adet buton (İşaret: 4 ? 4a) eklemiş bulunmaktayız. Formun direk çalışmaya başlaması için bir "Main" modül yazmak da yararlı olabilir. (İşaret: 3 - 3a - 3b) Sayfa üzerine rahatça tıklamak için formumuzun ShowModal bölümünün "False" a ayarlanmış olması gerekiyordu, hatırladık mı? (İşaret: 6)
Evet kodlarımızı yazmaya başlayalım ve de açıklamalarını da karşılarına ekleyelim (' ile başlayan yerler tanımlar için, kod olarak işlemezler);
ilk bölüme dim ile başlayan tanımlamaları yazalım;
Dim collpages As Pages 'döküman içindeki sayfaları bir koleksiyon yapacağımızın tanımı
Dim p As Page 'p harfi ile sayfayı temsil edeceğiz
Dim i As Double 'numaralandırmayı double tanımlamasına göre yapacağız, i harfine numerik değer atanacak.
Dim t1 As Shape 'ilk sayfa numarası için bir nesne ataması
Dim t2 As Shape 'ikinci sayfa numarası için bir nesne atamasıDim rect1 As Shape 'ilk sayfa numarasının içine hizalanacağı yardımcı kare için nesne ataması
Dim rect2 As Shape 'ikinci sayfa numarasının içine hizalanacağı yardımcı kare için nesne ataması
Buton tıklandığında harekete geçecek olan kodları da yazalım;
ActiveDocument.Unit = cdrMillimeter 'aktif olan dökümanımızın ölçü birimi, mm yapalım... i = tncnum.TextBox1.Text 'form üzerindeki textbox'a girilen değer i'ye aktarılsın.
Set collpages = ActiveDocument.Pages 'dökümanımız içinde oluşturulmuş sayfaların tanımı, toplamı yani koleksiyon
For Each p In collpages 'koleksiyon içinde olan her sayfa için diyoruz, döngü başlıyor
Şimdi önce birinci sayfa numarası için gerekli kodları yazalım ve aşağıya kalın harflerle tanımlarını yapalım;
Set rect1 = p.ActiveLayer.CreateRectangle(0.35, 0.8, 1.2, 0.5)
?aktif katmana bir kare yarat (parantez içindeki rakamlar önemli değil, konumunu ve boyutunu inç birimi üzerinden gelişigüzel yapıyor daha sonra zaten karemizi boyutlandırıp, sayfa sol alt köşesine hizalama yaptıracağız)rect1.Fill.ApplyNoFill ?karenin içi boş olsun
rect1.SetSize 15, 12 ?enini 15mm, yüksekliğini de 12 mm olarak boyutlandırıyoruz.
rect1.Outline.SetProperties 0.003, OutlineStyles(0), CreateCMYKColor(0, 0, 0, 100), _ ?buraya konan alt çizginin "_"anlamı; satır uzayacak devam eden kodları aşağı satıra alıyorum işaretini veriyoruz.
ArrowHeads(0), ArrowHeads(0), False, False, cdrOutlineButtLineCaps, cdrOutlineMiterLineJoin, 0#, 100 ?karenin ana birimleri bu standartta yazılır.
rect1.AlignToPage cdrAlignLeft + cdrAlignBottom, cdrTextAlignBoundingBox ?şimdi kareyi sayfanın sol alt köşesine bu kodlarla hizalıyoruz. (yazılan sayfa no?su buna göre konumlandırılacak yani anladığınız üzere bu geçici kullandığımız bir konum belirleme nesnesi.;)
Set t1 = p.ActiveLayer.CreateArtisticText(10, 1, i, , , "Arial", 10, cdrTrue, cdrFalse, _
cdrNoFontLine, cdrCenterAlignment) ?yazı oluşturma kodlarını önceki derslerden biliyorsunuz, bu ilk oluşturulan yazı sayfanın sol tarafındaki numara yazısı
Oluşan yazımızı hizalama karemizin tam ortasına blokluyoruz. Konumu belli oldu, sol aşağıya yerleşti.
rect1.Delete ?Hizalama yaptığımız kareyle işimiz bitti, silinsin.
i = i + 1 ?her döngüde sayfa sayısı +1 artacak
Next p ?diğer sayfaya geçecek ve kodlar yinelenecek...
Kodların normal görünümüne bir göz atalım;
Private Sub syfnumikili_Click()
ActiveDocument.Unit = cdrMillimeter
i = tncnum.TextBox1.Text
Set collpages = ActiveDocument.Pages
For Each p In collpages
Set rect1 = p.ActiveLayer.CreateRectangle(0.35, 0.8, 1.2, 0.5): rect1.Fill.ApplyNoFill: rect1.SetSize 15, 12
rect1.Outline.SetProperties 0.003, OutlineStyles(0), CreateCMYKColor(0, 0, 0, 100), _
ArrowHeads(0), ArrowHeads(0), False, False, cdrOutlineButtLineCaps, cdrOutlineMiterLineJoin, 0#, 100
rect1.AlignToPage cdrAlignLeft + cdrAlignBottom, cdrTextAlignBoundingBox
Set t1 = p.ActiveLayer.CreateArtisticText(10, 1, i, , , "Arial", 10, cdrTrue, cdrFalse, _
cdrNoFontLine, cdrCenterAlignment)
t1.AlignToShape cdrAlignHCenter + cdrAlignVCenter, rect1, cdrTextAlignBoundingBox: rect1.Delete
i = i + 1
Set rect2 = p.ActiveLayer.CreateRectangle(0.35, 0.8, 1.2, 0.5): rect2.Fill.ApplyNoFill: rect2.SetSize 15, 12
rect2.Outline.SetProperties 0.003, OutlineStyles(0), CreateCMYKColor(0, 0, 0, 100), ArrowHeads(0), _
ArrowHeads(0), False, False, cdrOutlineButtLineCaps, cdrOutlineMiterLineJoin, 0#, 100
rect2.AlignToPage cdrAlignRight + cdrAlignBottom, cdrTextAlignBoundingBox
Set t2 = p.ActiveLayer.CreateArtisticText(10, 1, i, , , "Arial", 10, cdrTrue, cdrFalse, _
cdrNoFontLine, cdrCenterAlignment)
t2.AlignToShape cdrAlignHCenter + cdrAlignVCenter, rect2, cdrTextAlignBoundingBox: rect2.Delete
i = i + 1
Next p
End Sub
Evet sayfayı yatay konuma getirip kafamıza göre 4-5 sayfa daha ekleyelim ve kodumuzu çalıştıralım. (Sub ve End Sub blokları arasına yapıştırabilirsiniz.)
Ders için Hata Bildir | Facebook'ta Paylaş
Video dersleri izleyemiyorsanız DNS ayarları yapmalısınız. Lütfen "Video izleyemiyorum" şeklinde hata bildirmeyiniz.
DNS ayarları yapmak için tıklayın.
"CorelDraw VBA - Tek Sayfaya Çift Numaralandırma" dersi için 3 yorum var
MERABA SAYFANIZ ÇOK HARİKA HER GÜN BİR SEYLER ÖGRENİYORUM COK MERSİ
BİR RİCAM VAR 50X70 SAYFANIN İÇİNE 10X13 ABATINDA SAYFALRI COGALTARAK NASIL YERLESTİRE BİLİRİM YANLIZ COREL TÜRKCE KULLANIYORUM VE YENİ ÖGRENİYORUM SEMALARLA GÖSTERE BİLİRSENİZ COK SEVİNİRİM
ben de teşekkür ediyorum. konuyu biraz daha açabilirseniz yardımcı olmaya çalışabilirim. ilk algılamam belirttiğiniz boyutların verdiğiniz ölçülerin içinde montajlanması yönünde. örnek bir cdr dosyası ile daha fazla açıklama yapabilirseniz yardımcı olmaya çalışırım. (mail olarak gönderebilirsiniz.)
BU DERSE YORUM EKLEYİN
Üye olmadan yorum ekleyemezsiniz !
UYARI: SANALKURS.net'te yer alan materyaller ile ilgili her türlü sorumluluk hazırlayan veya gönderene aittir. Yazarlar, gönderdikleri makale ve derslerle başkalarını yanıltıcı bilgi veremezler. SANALKURS.net bilgilerin kullanımı sonucunda doğacak hata ve zararlardan sorumlu tutulamaz. SANALKURS.net'te yer alan bir makale link vermek ve kaynak göstermek şartıyla başka bir sitede yayınlanabilir. SANALKURS.net kullanıcıları ve üyeleri, üçüncü kişilerin telif hakkı sahibi bulunduğu hiçbir yazı, fotoğraf, resim vb. materyal ve ürünü kullanamazlar. SANALKURS.net kullanıcı ve yazarlarının, üçüncü kişilerin telif hakkı sahibi olduğu yazı, resim vb. ürünleri izinsiz kullanması durumunda, her türlü hukuki ve cezai sorumluluk kendilerine aittir.