Google Reklamları =)

Hakan Özdemir

CorelDraw VBA - Tek Sayfaya Çift Numaralandırma

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)

http://img.sanalkurs.net/uploads/ders15_00.jpg

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ı

t1.AlignToShape cdrAlignHCenter + cdrAlignVCenter, rect1, cdrTextAlignBoundingBox

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.


?Aynılarını rect2 ve t2 ye göre yazıyoruz...

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 ?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.)

Sayfanın bendeki numarasız görüntüsü;

http://img.sanalkurs.net/uploads/ders15_01.jpg

Numaralandırma yapıldıktan sonraki görüntüleri?

İLK SAYFA:
http://img.sanalkurs.net/uploads/ders15x_01.jpg

SON SAYFA:
http://img.sanalkurs.net/uploads/ders15x_02.jpg

İyi çalışmalar, başarılar...
Google Reklamları =)
Tekil:67 | Çoğul:286 | Çevrimiçi:

=> Sen de ücretsiz bir internet sitesi kurmak ister misin? O zaman burayı tıkla! <=