Basic and Dialogs - Enformatik Bölümü

Transkript

Basic and Dialogs - Enformatik Bölümü
11 OpenOffice.org Basic ve Dialogları
Bu belgede mavi olarak yazılan kısımlar tarafımdan ilave edilmiştir. İngilizce olarak bilinmesi
faydalı olan terimlerin yanına mavi yazıyla türkçesi yazılmıştır.
OpenOffice.org Basic macro ve Dialoglarını yaratmak ve düzenlemek için destek sunar.
Belgenin devamında OpenOffice.org Basic programlama ortamının kullanımını yada kısaca
Basic IDE'sini göreceğiz.
•
Kısım 11.1 OpenOffice.org Basic ve Dialogları - OpenOffice.org Basic ile ilk
adımlar OpenOffice.org Basic UNO Programları yazılması için gerekli adımları
anlatan bir kılavuzdur..
•
Kısım 11.2 OpenOffice.org Basic ve Dialogları - OpenOffice.org Basic IDE
OpenOffice.org Tümleşik Geliştirme Ortamı (IDE) bir kılavuz bölümüdür.
Aşağıdaki konuları açıklar;
•
•
•
Basic and dialog kütüphanelerini düzenlemek için kullanılan dialog
kutularını.
•
Basic IDE penceresininin işlevleri: Basic macro düzenleyici ve
debugger (hata tesbit ve giderimi) veDialog düzenleyici .
•
Olaylara makro atamasının yapılması
Kısım 11.3 OpenOffice.org Basic and Dialoglar - OpenOffice.org Basic
Features of OpenOffice.org ile tümleşik Basic programlama dilini tanımlar,
•
OpenOffice.org Basic genel dil özellikleri hakkında bilgi sunar.
•
Kısım 3.4.3 Profesyonel UNO - UNO Dili ile bağlanma OpenOffice.org Basic UNO API'si ve UNO diline nasıl
bağlanılabileceği izah edilmiştir
•
OpenOffice.org Basic'in JAVA gibi başka dillerden önemli
farklılıklarını izah eder.
•
Kısım 11.4 OpenOffice.org Basic and Dialoglar - İleri düzey kütüphane
düzenleme Basic kütüphane sisteminin Basic makroları ve dialoglarını nasıl
sakladığını ve yönettiğini izah eder. Bu kütüphanelere ve kütüphane
elemanlarına kullanıcıların uygun arabirimlerle nasıl ulaşabileceğini açıklar.
•
Kısım 11.5 OpenOffice.org Basic and Dialoglar - Dialog ve Dialog Kontrolleri ile
programlama Dialog düzenleyisinde dialog yaratmak için kullanılan araç takımı
kontrollerini açıklar. Bu kısımda çeşitli form kontrolleri ve özellikleri detaylı
olarak açıklanmıştır.
•
Kısım 11.6 OpenOffice.org Basic and Dialoglar - Dialogların çalışma anında
yaratılması UNO Dialoglarının çalışma anında dialog düzenleyici kullanmadan
nasıl yaratılacağını izah eder. Bu UNO bileşenlerinden nasıl gelişmiş formlar
yaratılabileceğini görmek açısından yararlıdır. Kısım 11.5 OpenOffice.org Basic
and Dialoglar - Dialog ve Dialog Kontrolleri ile programlama bölümünü
geliştirerek araç takımı arabirimini daha anlaşılabilir kılar.
•
Kısım 11.7 OpenOffice.org Basic and Dialoglar - Kütüphane dosyası yapısı
Basic IDE tarafından kullanılan çeşitli dosyaları ele alır.
•
Kısım 11.8 OpenOffice.org Basic and Dialoglar - Kütüphane yerleşimi Bir lokal
yada paylasımlı OpenOffice.org kurulumunda Basic kütüphanelerinin otomatik
olarak yerleşimini ele alır.
11.1 OpenOffice.org Basic ile ilk adımlar
Adım Adım Öğretici ( Tutorial )
Bu kısım Basic IDE'sini geliştiricilerin kullanmasını sağlayan bir öğreticidir. Basic IDE'sinde bir
program yazmak ve hata gidermek (debug) için gerekli adımları ve bir Basic iletişimi dizaynını
açıklar. Bütün araçlar ve seçenekler için tam bir referans 11.2 OpenOffice.org Basic and
Dialoglar - OpenOffice.org Basic IDE. kısmında Standart kütüphane içinde bir modül yaratılması
bahsinde bulunabilir.
1. Yeni bir Writer belgesi yaratın ve kaydedin, örneğin, FirstStepsBasic.odt.
2. Araçlar – Makrolar – Makroları düzenle – OpenOffice.org Basic Tıklayın.
OpenOffice.org Basic Makroları iletişim kutusu görülür. Makrodan listesi makro depolarından
gelen makro Basic kodlarını gösterir. Burda daima Makrolarım ve OpenOffice.org Makroları
container'ları depoları ve her yüklenmiş olan belge için bir basic kütüphanesi vardır.
Illustration 11.1:
Macro dialog
Yukarıdaki örnekte sadece FirstStepsBasic.odt belgesi yüklenmiş olduğu görülmektedir. Bu
nedenle, Makrolarım, OpenOffice.org Makroları ve FirstStepsBasic.odt Container'ları depoları
görülmektedir. Makrolarım ve FirstStepsBasic.odt container depolarının her ikiside Standard
olarak adlandırılan bir kütüphane içerir.OpenOffice.org Makroları container deposu openofis
kurulumuyla gelen kütüphaneleri içerir ki bunların çoğuda auto pilot'dur. Uygulamanın Standard
kütüphaneleri ve tüm açık belgelerin kütüphaneleri daima yüklenirler. İletişim
penceresinde seçilebilir durumdadırlar. Diğer kütüphaneler uygulamada kullanılmadan önce
yüklenmelidirler.
Kütüphaneler asıl Basic kaynak kodu içeren modüllere sahiptir. Şimdi ikinci adımımızda ise
kaynak kodumuz için FirstStepsBasic.odt belgemizin Standard kütüphanesinde yeni bir modül
yaratacağız.
1. Makrodan listesinde FirstStepsBasic.odt gelin.
2. Belgenin altındaki Standard'ı seçin ve yeni düğmesine basın.
OpenOffice.org Module1 adıyla yeni bir modül yaratmak isteyip istemediğinizi soran bir iletişim
kutusu çıkaracaktır.
1. Kabul etmek için tamama basın.
Basic kaynak düzenleyicisi Main adlı bir Sub (subroutine) içeren bir pencereyle açılır. Subrutin
bir program kümesindeki alt programdır işlenmesi bitince ana programa döner .
Illustration
11.2: Basic source editor window
Basic düzenleyici durum çubuğunda Main sub'ının FirstStepsBasic.Standard.Modul1 bir parçası
olduğu görülür. Şayet Basic düzenleyici menüsünde Araçlar – Makrolar – Makroları düzenle –
OpenOffice.org Basic'i seçerseniz. FirstStepsBasic.odt belgesinin Standard kütüphanesi altında
Module1 adıyla modül yaratılmış olduğunu görürsünüz.
Illustration 11.3
Şayet Makrodan liste kutusunda bir modül seçilirse, Sağdaki listede sub ve fonksiyonlar
görülür, su anda Sub main görülmektedir. Bir sub yada yada fonksiyon seçiliyken Düzenle
düğmesi tıklanırsa Basic düzenleyici pencereyi açar ve seçilmiş olan sub yada fonksiyon
gösterilir.
Bir Basic UNO program'ı yazılması ve hata giderimi ( Debugging)
Aşağıdaki kaynak kodu Basic düzenliyici penceresine girin. Bu örnek kullanıcıya bir grafik
dosyasının yerini sorar ve belgemizde imlecin bulunduğu yere ekler. Daha sonra bu örnek grafik
ekle auto pilot'u ( Sihirbaz )olarak geliştirilecektir.(BasicAndDialogs/FirstStepsBasic.odt)
Sub Main
' Grafik dosyasını kullanıcıya sor _ işareti satırın devam etmekte olduğunu gösterir
sGraphicUrl = InputBox("Please enter the URL of a graphic file","Import Graphics","file:///")
if sGraphicURL = "" then ' Kullanıcı iptal'e bastı
exit sub
endif
' document modeline ulaşım için
oDoc = ThisComponent
' Dökumanının metin servisine ulaşmak
oText = oDoc.getText()
'Belge servis sağlayıcı grafik nesnesi örneği oluştur.
' create an instance of a graphic object using the document service factory
oGraphicObject = oDoc.createInstance("com.sun.star.text.GraphicObject")
' Grafik URL adresini ayarla
oGraphicObject.GraphicURL = sGraphicURL
' Şu anki imleç konumunu getir ve ondan bir metin imleci yarat
oViewCursor = oDoc.getCurrentController().getViewCursor()
oCursor = oText.createTextCursorByRange(oViewCursor.getStart())
' Şu anki imleç konumuna grafiği ekle
oText.insertTextContent(oCursor.getStart(), oGraphicObject, false)
End Sub
Şayet bir kelime için yardım istiyorsanız metin imleci kelimenin üzerinde iken F1 tuşuna basın.
OpenOffice.org online yardımı Basic dili için yardım desteği içerir.
oDoc = ThisComponent ile başlayan satır ile document modeline ulaşılır, ve biz OpenOffice.org
Basic UNO tümleşimini kullanırız. ThisComponent Basic kodundan bir Document modeline
ulaşım için kullanılan kestirme yoldur. Daha önceden FirstStepsBasic.odt belgesinde module1'i
yaratmış olduğumuz için Basic kodu FirstStepsBasic.odt belgesi içine gömülmüştür.Makrolarım
deposunda global bir kütüphane değildir, ve dolayısıyla Thiscomponent FirstStepsBasic.odt
document modelini temsil eder.
Document kütüphanelerinin dışında şu anki belgeyi getirmek için ThisComponent
veya StarDesktop.CurrentComponent yöntemini kullanın. Şayet açık olan bir
belgeye ulaşmak istiyorsanız şu anki belge olmasa dahi StarDesktop.Components
üzerinde bileşenleri enumarate yapmalısınız ( sıralamak listelemek )yinelemelisiniz. Bu
bileşenlerin URL özelliklerinin kontrolü için aşağıdakine benzer bir kod lazımdır :
oComps = StarDesktop.Components
oCompsEnum = oComps.createEnumeration()
while oCompsEnum.hasMoreElements()
oComp = oCompsEnum.nextElement()
' Sadece URL özelliği olan bileşenler not all desktop components are
necessarily models with a URL
if HasUnoInterfaces(oComp, "com.sun.star.frame.XModel") then
print oComp.getURL()
endif
wend
Programın debug edilmesi için imleci oDoc = ThisComponent satırına getirin ve makro
çubuğunda Breakpoint ikonunu ( Kesme noktası ) tıklayın.
Makro çalıştır ikonunu yüklü olan modülün ilk sub'ını çalıştırır. ve uygulama ilk
breakpoint'de durur.
Single Step ( İçine bas) ikonu ile program adımlama modu ile yürütülür.
Makrolar ikonu ile ilk makrodan başka bir makroda yürütülebilir. Bunun için;
OpenOffice.org Basic Makrolar iletişiminde isteğiniz modüldeki istenilen makroyu
seçtikten sonra çalıştır düğmesine basın .
Debug sırasında Basic değişkenlerinin değerlerini izlemek için Basic düzenleyici İzle alanında
bir değişken ismi girin ve enter tuşuna basın. Ya da fare imleci ile değişkenin üzerine
gelindiğinde ipucu olarak o değişkenin değeri görülebilir. Örneğimizde sGraphicUrl and
oGraphicObject değişkenlerini izlemeye alıyoruz:
Illustration 11.4
Artık Çalışma anında OpenOffice.org 2.0 Basic debugger ile UNO nesnelerinide incelemek
mümkündür.
Kullanıcı ara birimi ile bir Sub çağrılması
Bir Makro özelleştirilmiş ikonlarla, menü girişi ile, klavye kısayolları ile resim gibi belge
nesneleri ile veya belge olaylarıyla gibi yöntemlerle çalıştıtılabilir.Tüm bu girişlerin ayarlanması
Makro iletişimindeki Ata butonuna basarak Özelleştir iletişiminde düzenlenebilir. Ya da Araçlar Özelleştir menü komutuyla ayarlanabilir.
Main Sub'ına araç çubuğu ikonu atamak için, Araçlar - Özelleştir yoluyla açılan özelleştir
iletişiminde Araç çubukları sekmesini açın Araç çubukları sekmesi aşağıdaki görünür:
Illustration 11.5
Araç çubukları sekmesinde Ekle düğmesine basın. Komutekle iletişimi ortaya çıkar Kategori
listesinde OpenOffice.org Makrolarını seçerek FirstStepsBasic.odt listesini genişletin.
FirstStepsBasic.Standard.Module1 seçildiğinde komullar listesi Sub Main için bir Main girişini
gösterir. Ekle düğmesine basarak araç çubuğuna eklersiniz..
Artık belgemizde örnek makromuzu çalıştırabiliriz.
Kısım 11.2.3 OpenOffice.org Basic and Dialoglar - OpenOffice.org Basic IDE - GUI olaylarına
makro atanması Kullanıcı arabiriminde makronuzun ulaşılabilir olması için diğer seçenekleri
açıklar..
Basit bir Dialog
Dialog Yaratılması
Basic IDE'sinde bir iletişim kutusu yaratmak için, Basic kaynak kodu düzenleyicisinde pencere
altında bulunan Module1 sekmesi üzerinde sağ tıklayın ve Ekle - Basic İletişimi 'ni Dialog1 adlı
yeni bir pencer açar:
Illustration 11.6
Formumuza komut düğmesi, seçenek düğmesi gibi kontrol elemanlarının ilavesi için
iletişim dizayn araçlarına ihtiyaç duyarız. Kontrol ekle ikonuna tıklayarak açılır pencerede
kontrolleri görüp seçebiliriz. Eğer araç kutusu pencere başlığından tutulup çalışma
alanına sürüklenirse pencere daima açık olarak kalır.
İlk örnekte olduğu gibi sadece basit bir girdi kutusuyla çalışan iletişim yerine iletişimi bir dosyayı
seçmek için kullanıcıya daha kullanışlı bir şekle getirebiliriz. Ekstra olarak kullanıcı resim
ekledikten sonra resimin nereye sabitleneceğini kontrol edebilir. Bunun için iki adımlı bir sihirbaz
iletişimi yaratacağız.
Araç kutusu penceresinde Dosya seçimi ikonunu seçin. Form üzerinde sol tıklayıp
sürükleyerek dosya seçimi öğesinin yerini ve boyutlarını belirleyin.
Özellikler ikonu özellikler iletişimini görüntüler böylece kontrolleri düzenleyebilir, ayrıca
iletişim sırasında meydana gelen olaylar için gerekli olan kodları yazabiliriz.
Sonra, << Back ve Next >> Düğmelerini iletişim adımları arasında gezilebilmesi için
ekleyin, ve bir Finish ve Cancel düğmesi ekleyin. Düğme ikonunu seçin ve sol fare
düğmesini kullanarak düğme boyutunu ayarlayın. Düğmeler CommandButton1 gibi
öntanımlı metinlerle etiketlenmiştir. Şayet özellikler iletişim penceresi açılmaz ise yeni
oluşturulmuş olan düğmeyi çift tıklayarak açabilirsiniz. yeni etiket alanında düğme
etiketlerini girin. İsim alanı kontrolün program tarafından bilinen adıdır ve görüntülenen isim
ile alakası yoktur aynı şekilde Back ve next tuşlarını adlandırın. and name the dialog step
buttons Back and Next . << Back düğmesi için etkin özelliğini evet olarak ayarlayın. Basic
dilinde çalışma zamanında nesne.enabled=false olarak ulaşılır. düğme etiketini değitirmek
için CommandButton1.label="Cancel" tekniği kullanılır.
Etiket aracını kullanarak bir etiket ekleyin.. "Select Graphics File" gibi.
Şimdi form aşağıdaki örnekteki gibi görünür:
Illustration 11.7
Formu Araç kutusunda bulunan Test kip açık/kapalı ikonu ile test edebilirsiniz. Testiniz
bittiği zaman Formun kapat düğmesine basarak yada form başlığında kapata basarak
kapatabilirsiniz.
İletişimi düzenlemek için; örneğin etiketi klikleyin kontrolün dış sınırında yeşil tutamaklar oluşur
böylece kontrolü taşıyabilir veya etiketini değiştirebilirsiniz. Yeşil tutamaklarla kontrolü yeniden
boyutlandırabilirsiniz. Özellikler iletişim penceresi iletişimin başka özelliklerini de ayarlamaya
yarar. ileşimi bu buradn boyutlandırabilr. konumlandırabilirsiniz.
Olay yönetimi (Adding Event Handlers)
Şimdi formu açmak ve düğmelere işlev kazandırmak için gerekli kodları yazacağız.
createUnoDialog() nesnesinin execute() metodunu kullanarak bir formun görüntülenmesini sağlarız. Bir form iletişim
nesnesi yaratarak formumuzu görüntüleyebiliriz endExecute()metodu ile de formumuzu kapatır ve işleyişine son veriririz.
Finish ve Cancel düğmesi için düğme türünü Cancel (İptal) olarak ayarlamakla formu kapatmakta
mümkündür. Execute metodu Cancel için 0 OK için 1 değeri ile geri döner.
GUI elemanlarına işlevsellik kazandırmak için Sub'lar geliştirin ve bunları GUI elemanlarına
bağlayın. Formumuzdaki düğmele işlev kadandırmak için Basic IDE Penceresi altında bulunan
Module1 sekmesine tıklayın. Aşağıdaki sub kodlarını Sub main üstüne kopyalayın. Private
değişken oDialog Subların dışında tanımlanmıştır. Formumuzun yüklenmesinden sonra
Module1'deki bütün Sub ve fonksiyonlar tarafından erişilebilir olması sağlanmıştır.
(BasicAndDialogs/FirstStepsBasic.odt)
Private oDialog as Variant ' private, module-wide variable Variant değişkenler bir nesneyi sayıyı
yada metini tutabilir aynı değişkene çeşitli tipler aktaracaksak yararlıdır
Sub RunGraphicsWizard
oDialog = createUnoDialog(DialogLibraries.Standard.Dialog1)
oDialog.execute
End Sub
Sub CancelGraphicsDialog
oDialog.endExecute()
End Sub
Sub FinishGraphicsDialog
Dim sFile as String, sGraphicURL as String
oDialog.endExecute()
sFile = oDialog.Model.FileControl1.Text
' Bir FileControlu sistem yolu içerir ve dosya URL'si haline çevrilmesi gereklidir
' Bu nedenle ConvertToURL Basic fonksiyonu kullanıyoruz
sGraphicURL = ConvertToURL(sFile)
' Grafik ekle
' Document modeline eriş
oDoc = ThisComponent
' Document metin servisine eriş
oText = oDoc.getText()
' Belge servis sağlayıcı grafik nesnesi örneği oluştur (document service factory)
oGraphicObject = oDoc.createInstance("com.sun.star.text.GraphicObject")
' Grafik URL'sini ayarla
oGraphicObject.GraphicURL = sGraphicURL
' GUI'de şuanki imleç pozisyonunu getir ve ondan bir metin imleci yarat
oViewCursor = oDoc.getCurrentController().getViewCursor()
oCursor = oText.createTextCursorByRange(oViewCursor.getStart())
' Grafik nesnesini imleç konumuna ekle
oText.insertTextContent(oCursor.getStart(), oGraphicObject, false)
End Sub
Sub Main
...
End Sub
Cancel düğmesini seçin ve özellikler iletişim penceresinde olaylar sekmesine tıklayın.
Başlatırken form alanındaki sağ taraftaki Makro ata iletişiminde (...) düğmesine tıklayın.
FirstStepsBasic.odt.Standard.Module1, CancelGraphicsDialog yordamını seçin ve ekle düğmesini
tıklatarak düğmemize yordamı bağlayın
Illustration 11.8
Finish düğmesi içinde aynı yöntem kullanılarak FinishGraphicsDialog yordamı ile ilişkilendirin.
Run ikonu seçilirse şimdi form görüntülenir ve Finish ve Cancel düğmeleri çalışır.
AutoPilot Formları Dialogs
Son adımda iki sayfalı küçük bir AutoPilot yaratacağız.. The OpenOffice.org Formları Autopilot
sayfaları için basit bir işlem anlayışına sahiptir. Dialogdaki Her form ve her kontrol sayfa kontrolü
için Page (Step) Adım özelliğine sahiptir. Normal olarak iletişimler sayfa 0'da olurlar fakat başka
bir sayfa olarak ayarlanabilirler, örneğin sayfa1 Sayfa1'deki Tüm kontrolleri sadece sayfa1de
görüntülemek için Adım 1 değerine sahip olmalıdr. Aynı şekilde kontollerin sayfa2'de
görüntülenmesi için 2 değeri olmalıdır.Şayet Form Sayfa0'da ise tüm kontroller görüntülenir. Bir
kontrolün sayfa özelliği 0 olarak ayarlanmışsa tüm form sayfalarında gözükür.
Böylece ikinci bir sayfa yaratılması için kullanılır. Ctrl Tuşuna basılı tutarken Label ve filecontrol
elemanlarını klikleyerek ikisini de seçin. Özellikler iletişiminde Page Sayfa(Basamak) özelliği
için 1 değerini girin ve enter tuşuna basarak değişimi uygulayın. Form dış çerçevesini tıklatarak
özellikler iletişimini açın Page değerini 2 olarak girin ve enterleyin. Label ve filecontrol kaybolur
çünkü şimdi sayda2'deyiz. Sadece düğmeler sayfa0 da oldukları için görüntülenir.
Sayfa2'de, "Anchor" adlı label etiket ekleyin ve iki adet option buttons seçenek düğmesi
ekleyin"Etiket için "at Paragraph" ve "as Character"belirleyin. "At paragraph" için State Durum
alanında toggle etkin olarak belirleyek varsayılan olarak bu seçeneğin seçilmesini sağlayın. Yeni
kontroller otomatik olarak Page sayfa 2 özelliğini alırlar. Page2 bittiğinde Dialog'u 1 olarak
ayarlayalım. Çünkü uygulamanın başlangıcında 1 numaralı sayfayı istiyoruz.
Illustration 11.9
Aşağıdaki Sub'lar << Back and Next >> düğmeleriyle çalışması gereken yordamlardır.
FinishGraphicsDialog yordamı kullanıcı tarafından seçilen yeni grafiği dosyaya eklemek içindir.
GUI'de Page (Step) olan özellik. API'de step (BasicAndDialogs/FirstStepsBasic.odt)
Sub BackGraphicsDialog
oDialog.Model.Step = 1
oDialog.Model.Back.Enabled = false
oDialog.Model.Next.Enabled = true
End Sub
Sub NextGraphicsDialog
oDialog.Model.Step = 2
oDialog.Model.Back.Enabled = true
oDialog.Model.Next.Enabled = false
End Sub
Sub FinishGraphicsDialog
Dim sGraphicURL as String, iAnchor as Long
oDialog.endExecute()
sFile = oDialog.Model.FileControl1.Text
' State = Selected corresponds to 1 in the API Seçilmiş ise State = 1 değerine sahiptir
if oDialog.Model.AsCharacter.State = 1 then
iAnchor = com.sun.star.text.TextContentAnchorType.AS_CHARACTER
elseif oDialog.Model.AtParagraph.State = 1 then
iAnchor = com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH
endif
' Dosya seçimi kontrolü bir sistem yolu ile döner ve onu dosya URL'si ne çevirmeliyiz
' Bunun için MakeFileURL fonksiyonu kullanırız
sGraphicURL = MakeFileURL(sFile)
' Belge modeline erişim temini
oDoc = ThisComponent
' Belge metin servisini al
oText = oDoc.getText()
' Belge servis sağlayıcı grafik nesnesi örneği oluştur (document service factory)
oGraphicObject = oDoc.createInstance("com.sun.star.text.GraphicObject")
' Grafik URL'sini ayarla
oGraphicObject.GraphicURL = sGraphicURL
oGraphicObject.AnchorType = iAnchor
' GUI'de Şu anki imleç pozisyonunu al ve metin imleci yarat.
oViewCursor = oDoc.getCurrentController().getViewCursor()
oCursor = oText.createTextCursorByRange(oViewCursor.getStart())
' Gfafiği matin başına ekle
oText.insertTextContent(oCursor.getStart(), oGraphicObject, false)
End Sub
11.2 OpenOffice.org Basic IDE
Bu bölüm OpenOffice.org Basic tümleşik geliştirme ortamının (IDE)bütün özelliklerini açıklar.
Basic ve Dialog kütüphanelerinin nasıl yönetileceğini, Basic IDE'sindeki araçlarla Basic
makrolarının ve dialoglarının kullanımı anlatılacaktır, ve olaylara Basic makroları atanması için
çeşitli yöntemler değerlendirilecektir.
11.2.1 Basic ve Dialog Kütüphanelerinin yönetimi
Kütüphane yönetimine kullanıcı ara biriminde ana giriş noktası Araçlar - Makrolar - Makroları
düzenle - OpenOffice.org Basic menü elemanıdır. Bu seçenekle OpenOffice.org Basic
Makroları dilog kutusunu açarki bu dilogda kullanıcı Basic Ve Dialoglarla ilgili tüm operasyonları
yürütebilir.
OpenOffice.org Basic Makroları Dialoğu
Aşağıdaki resim örnek bir Makro dialoğunu gösterir. Buradan makroları çalıştırabilir, yaratabilir,
çalıştırabilir, silebilir, UI olaylarına makro atayabilir ve Basic Kütüphaneleri,ve modüllerini
yönetebilirsiniz..
Illustration 11.10
Görüntülenen Bilgi
Makrodan ağaç görünümü kısmı dialoğun açılmış olduğu andaki tüm kütüphane yapısını
gösterir. OpenOffice.org Kütüphane organizasyonu (düzenleyici) hakkındaki detaylar için 11.4
OpenOffice.org Basic and Dialogs - Advanced Library Organization kısmına bakın...
Bu dialogda Basic yada Dialog kütüphaneleri arasında ayrım gözetilmezken Kütüphane
düzenleme API'sinde farklı olarak uygulanır.
API kullanarak Sadece Basic yada dialog kütüphaneleri hazırlamak mümkün
olmasına rağmen bu kullanım normal değildir. Çünkü grafiksel kulanıcı arabirimi
sadece Basic ve Dialog kütüphanelerinin eş zamanlı olarak yaratılmasına izin
verir. ( 11.2.1 OpenOffice.org Basic and Dialogs - OpenOffice.org Basic IDE Basic ve Dialog Kütüphaneleri - Macro Düzenleyici Dialoğu kısmına bakın )
Bununla birlikte, dialog sade Basic veya sade Dialog olarak dağıtılabilir, but they
are not marked in any way.
Makrodan ağacı üç kademeli bir yapı olarak görüntülenmir:
Library container -> library -> library element Kütüphane deposu -> Kütüphane -> Kütüphane
elemanı
•
Üst seviye node'ları düğümler Basic ve dialog kütüphane container'ını temsil
eder. ( My Macros and OpenOffice.org Macros Nodes Makrolarım ve
Openoffice.org makroları ). Açılmış olan her bir belge için, belgenin Basic and
dialog kütüphane container'ı görüntülenir. ( 11.4 OpenOffice.org Basic ve
Dialoglar - Gelişmiş kütüphane yönetimi kısmına bakın). Örnekte
Description.odt adlı bir metin belgesi ve Calculation.ods adlı Calc belgesi olarak
iki belge açılmıştır.
•
İkinci seviye Node'da her eleman bir kütüphaneyi gösterir. İlkin Standard olarak
adlandırılan varsayılan kütüphaneler haricindeki tüm kütüphaneler yüklenmemiş
ve gri görünümlüdür. Kütüphaneyi yüklemek için kullanıcı kütüphane ismini çift
tıklamalıdır. Yukardaki örnekte Makrolarım kök elemanı Standard kütüphanesini
içerir varsayılan olarak yüklenmiştir.
•
Ağacın üçüncü seviyesinde yüklenmiş kütüphaneler görünür durumdadır. Her
node bir kütüphane elemanını temsil ederki bunlar modül yada dialog
olabilirler.OpenOffice.org Basic Makroları dialogunda sadece basic modulleri
kütüphane elemanı olarak görüntülenir, bu iletişimde dialoglar görünmez. Bir
kütüphaneye çift tıklamayla kullanıcı kütüphanenin modüllerini genişletip
gizleyebilir. Örnekte Makrolarım/Standard kütüphanesi açılmış olarak
görülmektedir. Module1 ve module2 olarak iki modül içermektedir.
Description.odt belgesi module1 adlı basic modülü olan standard kütüphanesi
bulundurmaktadır. Calculation.ods basic module'u olmayan bir Standard
kütüphane içermektedir. Tüm kütüphaneler dialog içerseler bile bu görünümde
dilog kütüphaneleri görülemez.
Eğer bir kütüphane şifre korumalı ise ve kullanıcı onu yüklemek için çift tıklatırsa, Şifreyi soran
bir iletişim görünecektir. Kütüphane kullanıcı doğru şifreyi girdiğnde yüklenecek ve
görüntülenecektir.Bir şifre korumalı kütüphane API kullanılarak yüklenirse, örneğin
BasicLibraries.loadLibrary("Library1") çağrısıyla, yüklendiği gibi gösterilir Grileştirilmemiş olarak.
Fakat doğru şifre girilene kadar ağaç görünümü açılıp içi görülemez. ( 11.4 OpenOffice.org
Basic and Dialogları - Gelişmiş kütüphane yönetimi).
Orta sütun (düzenleme alanı) makrolar hakkında bilgileri görüntülerki bunlar seçilmiş olan
modüle ait Sub ve Fonksiyonların listesidir. Makro adı bulunan Düzenleme alanında bir sub
veya fonksiyon seçilebilir. Şayet Makrodan iletişim kutusunda herhangi bir modül
seçilmemişse düzenleme alanı ve liste boş kalır. İstenilen adı düzenleme alanına yazabilirsiniz.
Düğmeler
OpenOffice.org Basic Makrolar dialoğunun sağ tarafında aşağıda listede tanımlanan çeşitli
komut düğmeleri vardır:
•
Run Çalıştır
Makro adı düzenleme alanında gösterilen Sub yada Fonksiyonu çalıştırır. Makro
çalıştırılmadan Makrolar dialoğu kapatılır.
•
Close Kapat
OpenOffice.org Basic Makrolar dialoğunu başka herhangi bir eylem yapmadan
kapatır.
•
Assign Ata
Araçlar - Özelleştir menüsündende açılabilen Özelleştir dialoğunu açar. Bu
iletişim Opens the Customize dialog that can also be opened using Tools Customize. Bu Dialog olaylara makro atanması için de kullanılabilir.ayrıntılar için
aşağıdaki 11.2.3 OpenOffice.org Basic and Dialoglar - OpenOffice.org Basic
IDE - GUI olaylarına Makro atanması'na bakın.
•
Edit Düzenle
Basic makro düzenleyiciye seçilmiş olan Modulü yükler. İmleç seçilmiş olan
Makro veya fonksiyonun adının bulunduğu ilk satıra yerleştirilir. Ayrıntılar için
aşağıdaki Kısım 11.2.2 OpenOffice.org Basic and Dialogları - OpenOffice.org
Basic IDE - Basic IDE Penseresi 'ne bakın. şayet hiç bir modül yada yordam
seçilmemişse bu düğme etkin değildir.
•
Delete Sil
Bu düğme var olan bir Sub yada fonksiyon makro adı alanında görüntüleniyorsa
etkindir ve delete düğmesi burda görüntülenen Sub yada fonksiyonu siler.
•
New Yeni
Bu düğme var olan bir Sub yada fonksiyon makro adı alanında
görüntülenmiyorsa etkindir ağaçta seçilmiş olan module içine yeni bir Sub ekler.
Yeni sub şayet makro adı alanında isim yazıyorsa bu adla boş ise varsayılan
olarak Macro1, Macro2 gibi adlarla otomatik olarak adlandırılır.
•
Organizer Düzenleyici
Bu komutla Takip eden kısımda anlatılan OpenOffice.org Basic Makro
Düzenleyici dialog kutusu açılır.
•
Help Yardım
OpenOffice.org yardımını makrolar başlığı altından başlatır.
OpenOffice.org Basic Makro Düzenleyici Dialogu
Bu dialog OpenOffice.org Basic Makroları iletişiminde düzenleyici düğmesine basılarak
açılır.Dialog kutusu Modüller, kütüphaneler ve Dialoglar sekmelerine sahiptir. Basic makroları
iletişimi sadece kütüphaneler içindeki modülleri gösterebiliyorken Bu iletişim kutusu kütüphane
sistemine module, dialog ve kütüphane seviyesinde ulaşır.
Modules Modüller
OpenOffice.org Basic Makro Düzenleyici Modüller sekmesi aktif olduğunda tüm modüller
görüntülenir.Modül etiketli liste Makro Dialogundaki Makrodan listesi ile benzerdir. Fakat
OpenOffice.org uygulama ve belge kütüphanelerinin tam bir hiyerarşisini içerir. Kütüphaneler çift
tıklamayla yüklenebilir, açılabilir. ve ağac görünümü kapatılabilir. Şekilde Modul1 ve Module2
modüllerine sahip uygulama kütüphanesi Standard görüntülenmektedir.
Illustration 11.11
Yukarıdaki sunumda iki belgenin yüklenmiş olduğu görülmektedir. Description.odt belgesinin
module1 modülüne sahip bir standard kütüphanesi görülmektedir. Calculation.ods belgesinde
modüle sahip olmayan bir başka Standard kütüphanesi de görülmektedir.
Aşağıdaki listede ileişimdeki komut düğmelerinin fonksiyonlarını açıklar:
•
Edit Düzenle
Ağac görünümünde seçilmiş olan modülü basic makro düzenleyiciye yükler.
Herhangi bir modül seçili değilse düğme etkin değildir.
•
Close Kapat
OpenOffice.org Basic Makrolar dialoğunu başka herhangi bir eylem yapmadan
kapatır.
•
New Module Yeni Modül
Kullanıcının yeni modül için modül adı yazabildiği bir iletişim açar. Ad alanı
module<sayı> şeklinde görüntülenir. Örneğin Module1 ve Module2. Tamam
düğmesine basarak modül listesine yeni modülü ilave edebilirsiniz. Seçilmiş
olan kütüphane yazma korumalı ise Yeni modül düğmesi pasiftir.
•
Delete Sil
Şeçili olan modülü siler.Modül seçilmemişse ya da modül yazma korumalı bir
kütüphanenin ise bu düğme pasiftir.
Dialogs
OpenOffice.org Basic Makro Düzenleyici Dialog ( İletişim Öğeleri )sekmesinin seçilmesiyle
Dialog sayfası görüntülenir. Şekilde uygulama Standard kütüphanesinin Dialog1, Dialog2 ve
Dialog3 adlı üç diyaloga sahip olduğu görülmektedir.
Illustration 11.12
Şekilde Calculation.ods adlı belgenin Dialog1 adlı bir diyalog içerdiği
görülmektedir.Calculation.ods belgesinin herhangi bir diyalog'u olmadığı görülmektedir.
Takip eden listede komut düğmelerinin açıklaması yapılmıştır:
•
Edit Düzenle
Ağaçtan seçilmiş olan dialog'u yükler. Aşağıdaki 11.2.2 Basic and Dialoglar -
Basic IDE - Basic IDE Penceresi - Dialog Düzenleyici kısmında daha detaylı
olarak açıklanmıştır. Şayet bir dialog seçilmemişse düğme etkin değildir.
•
Close Kapat
OpenOffice.org Basic Makro düzenleyici iletişimini kapatır .
•
New Dialog Yeni Pencere
Kullanıcının yeni form için isim verebildiği iletişimi açar. İsim alanında ilk olarak
Dialog<Sayı>, Dialog1 ve Dialog2 gibi bir ad görünür.Tamam düğmesine
basılmasıyla dialog listesinde dialog yaratılır.Seçim yazma korumalı bir
kütüphane ise bu düğme etkin değildir.
•
Delete Sil
Seçili olan Diyalogu siler.Bu düğme bir dialog seçili değilse veya yazma
korumalı bir kütüphanede bulunan dialog ise etkin değildir.
Libraries Kütüphaneler
OpenOffice.org Basic Makro düzenleyici iletişiminin Kütüphaneler sekmesi seçildiğinde
Aşağıdaki resimler görülmektedir. İletişim penceresinde uygulama ve belge kütüphaneleri ayrı
olarak listelenmektedir. Kütüphane listesinde sadece konum liste kutusunda seçilmiş olan
Kütüphane container'ının kütüphaneleri görüntülemektedir. İkinci resimde My Macros & Dialogs
Makrolarım ve pencerelerim OpenOffice.org Macros & Dialogs OpenOffice.org Makrolerı &
Dialogları ve şu anda açılmış olan belgelerdeki girişleri görüntülemektedir.
Illustration 11.13
Illustration 11.14
Kütüphaneler aşağıdaki mantıkla listelenir:
•
Standard kütüphaneler siyah olarak görüntülenir.
•
Yazma korumalı kütüphaneler grileştirilmiş olarak görüntülenir.
•
Kütüphanenin Konumu, URL temsilinin(file://, HTTP:// gibi)sonuna kütüphane
yolu eklenerek gösterilir. Yukardaki örnekte Standard ve Library1 haricindeki
kütüphane yolları sadece okuma modundadır.
•
Şifre korumalı kütüphaneler adından önce bir anahtar resmi ile temsil edilirler.
Örneğimizde sadece Library1 şifre korumalıdır.
Bir kütüphane üzerine iki kez tıklanırsa (çift tıklama değil) kullanıcıya kütüphane ismini
değiştirme imkanı sağlanır.
Aşağıdaki liste komut düğmelerini açıklar:
•
Edit Düzenle
Kütüphane liste kutusunda şeçilmiş olan kütüphanenin ilk modülünü Basi
düzenleyiciye yükler. (Aşağıdaki 11.2.2 Basic and Dialogları - Basic IDE - Basic
IDE Penceresi - Basic Kaynak düzenleyici ve Debugger bölümüne bakın). Şayet
kütüphane sadece dialoglara sahipse Dialog düzenleyici penceresinde ilk
Dialog açılır(Aşağıdaki 11.2.2 Basic and Dialogları - Basic IDE - Basic IDE
Penceresi - Dialog Düzenleyici bölümüne bakın). Şayet Basic/Dialog
düzenleyici penceresi açık değilse bu pencere açılır.
•
Close Kapat
Her hangi bir ekstra işlem yapmaksızın OpenOffice.org Basic Makro
Düzenleyici dialog'unu kapatır.
•
Password Şifre
Aşağıdaki şekilde görülen seçilmiş olan kütüphane için şifre değiştirme
iletişimini açar.
•
Bu iletişim şayet bir kütüphane şifre korumalı ise şifresini değiştirmek için
kullanılır. Önce eski şifreyi girip, sonra da yeni şifreyi iki kez girmek gerekir.
Kütüphane şifre korumalı değilse, Eski şifre alanı etkin değildir.Yeni şifre iki kez
yazılarak girilebilir. Tamam düğmesine basıldığında iki şifre de aynıysa şifre
koruması etkinleşir.
Illustration 11.15
•
New Yeni
Kullanıcının yeni kütüphane için isim verebildiği iletişimi açar. İsim alanında ilk
olarak Library<Sayı>, Library1 ve Library2 gibi bir ad görünür.Tamam
düğmesine basılmasıyla kütüphane yaratılır ve kütüphane listesine eklenir. Yeni
bir kütüphane daima Basic ve dialog kütüphanesi olarak yaratılır.
•
Append Sonuna ekle
Bu düğme ekstra kütüphanelerin seçilmiş olan kütüphane container'ına
getirilmesi için kullanılır. Düğmeye tıklanması ile açılan dosya iletişiminde
kullanıcı getireceği kütüphanenin yolunu ve ismini seçer. Aşağıdaki listede
görülen dosya tipleri seçilebilir:
•
•
Kütüphane container'ı indeks dosyaları (script.xlc veya dialog.xlc)
•
Kütüphane indeks dosyaları (script.xlb veya dialog.xlb)
•
OpenOffice.org belgeleri (örneğin *.odt, *.ods,*.sxw, *.sxc, *.sdw,
*.sdc)
•
Star Ofis 5.x ve eski sürüm Basic kütüphane dosyaları (*.sbl)
Bir dosya seçildikten sonra Kütüphane ekle iletişimi görüntülenir. Aşağıdaki
şekilde bir kütüphane indeks dosyası olan script.xlb seçildikten sonraki iletişim
penceresi görülmektedir. İletişim seçilmiş olan dosyadaki bütün kütüphaneleri
listelemektedir. Örneğimizde sadece Euro kütüphanesi görünmektedir, çünkü .
script.xlb dosyası sadece bu kütüphaneyi temsil etmektedir.
•
Illustration 11.16
Seçenekler kısmındaki onay kutusu seçiliyse bir kütüphanenin sadece oku
modundaki bir linkle eklendiğine işaret eder. varolan aynı isimli kütüphaneler
yeni bir kütüphane ile değiştirilirler.
Devam eden şekilde LibraryImportExample writer belgesi seçildikten sonraki
iletişim görüntülenmektedir. Bu belge Standard, Library1, Library2 ve Library3
adlı dört kütüphaneye sahiptir. Library1 ve Library2 eklenmek için seçilmiş
durumda gözükmektedirler Insert as reference (read-only) seçeneği
pasiftir.çünkü belge içinde bulunan kütüphaneler köprü olarak refere
edilemezler. Ayrıca StarOfis 5.x Basic kütüphane dosyaları da bağlanamazlar.
•
•
Illustration 11.17
Tamam düğmesine basılarak seçilmiş olan basic ve dialog kütüphaneleri
kütüphane container'ına eklenir.
Delete Sil
Kütüphane liste kutusunda Seçili öğeyi siler. Eğer öğe bir kütüphane yolunu
gösteriyorsa sadece link silinir. Sil düğmesi bir standard kütüphane seçiliyse
pasiftir. Çünkü Standard kütüphaneler silinemez.
11.2.2 Basic IDE Window Basic Tümleşik Geliştirme ortamı Penceresi
IDE esas olarak Basic IDE penceresi ile temsil edilir. IDE iki farklı moda sahiptir:
•
Basic düzenleyici modunda Debugging işlemi ve debugger çıktılarının kontrol
edilmesi için Basic kaynak kod modüllerini görüntüler ve düzenler
•
Dialog düzenleyici modunda formlar görüntülenir ve düzenlenir.
Basic kaynak kodu ve formlar asla aynı anda görüntülenmezler. IDE penceresi Basic
düzenleyici veya debugger veya dialog düzenleyicinin içindedir. Aşağıdaki şekilde uygulama
Standard kütüphanesindeki module2'yi görüntüleyen Basic düzenleyici modundaki Basic IDE
penceresi görülmektedir.
Illustration 11.18
IDE penceresi Basic ve Dialog düzenleyici modu için genel olan kontrol elemanları aşağıda
açıklanmıştır. Moda özel olan kontrol öğeleri karşılık gelen alt kısımlarda açıklanmıştır.
11.2.2 Basic and Dialoglar - Basic IDE - Basic IDE Penceresi - Basic kod Düzenleyici ve
11.2.2 Basic ve Dialoglar - Basic IDE - Basic IDE Penceresi - Dialog Düzenleyici:
•
Ana araç çubuğundaki Yazıcı ikonuna tıklayarak herhangi bir yazıcı iletişim
kutusu görmeden halihazırda görüntülenen modül veya form yazıcıya direk
olarak yazdırılır.
•
Ana araç çubuğundaki Kaydet ikonu IDE penceresinde görüntülenen
kütüphaneye göre iki farklı şekilde davranır.
•
Şayet kütüphane bir uygulama kütüphane container'ına ait ise Sakla
düğmesi bütün düzenlenmiş uygulama kütüphanelerini kaydeder.
•
Kütüphane bir belgeye ait ise, Kaydet düğmesi belgeyi kaydeder.
•
Araç çubuğunun sol tarafında bulunan kütüphane liste kutusu şu an için
görüntülenen kütüphanenin adını gösterir. Kullanıcı görüntülenen kütüphaneyi
bu listeden seçerek değiştirebilir. Yukarıdaki örnekte ([My Macros &
Dialogs].Standard) uygulama Basic Standard kütüphanesi görüntülenmektedir.
Liste kutusu hali hazırda erişilebilir durumda olan bütün uygulama ve belge
kütüphanelerini içerir. Kullanıcı bunlardan birini seçerek Kütüphaneyi IDE
penceresinde görüntüleyebilir.
•
IDE penceresinin altında bulunan sekmeler aktif kütüphanedeki bütün modülleri
ve formları gösterir.Bu sekmeleri tıklayarak ilgili modül veya form açılabilir.
Gerekliyse IDE penceresi Basic düzenleme modundan form moduna yada tam
tersine döner. Sekmeye sağ tıklamayla içerik menusu açılır:
•
•
•
Insert Ekle yeni bir modül veya dialog eklemek için bir alt menüyü
açar.
•
Delete Sil onaylama sorgusu sonucunda aktif formu veya dialog'u
siler .
•
Rename Yeniden adlandır aktif modül veya formun adını değiştirir.
•
Hide Gizle aktif modül veya formu görünmez yapar. Gizlenen modül
veya form sekmelerde görünmez ve etkinleştirilemez. Basic
Makroları veya Basic Makro Düzenleyici iletişimi edit Düzenle
düğmesi ile aktifleştirilip düzenlenebilir .
•
Modules Modüller Basic Makro Düzenleyici iletişimini açar .
Durum çubuğu aşağıdaki bilgileri görüntüler:
•
•
Soldaki ilk hücrede aktif modülün veya formun tam adı görüntülenir.
LibraryContainer.LibraryName.<ModuleName | DialogName>
KütüphaneDeposu.Kütüphaneİsmi.<Modülİsmi | Dialogİsmi> .
•
İkinci hücrede bir asterisk "*" görüntülenirse, Aktif kütüphane
container'ında en azından bir kütüphanenin değiştirildiği ve
kaydedilmesi gerektiğini gösterir.
•
Üçüncü hücrede Basic düzenleyici penceresindeki imlecin yeri
görüntülenir.
•
Dördüncü hücrede Basic düzenleyici ekleme modunda ise "INSRT"
"EKLE" üzerine yaz modunda ise "OVER" "ÜZR" görüntülenir. Modlar
arası geçiş İnsert tuşuyla olur.
Basic Source Editor and Debugger Basic Kaynak düzenleyici ve Hatagiderimi
Kullanıcı bir Sub yada fonksiyonu düzenlerken, Basic düzenleyici ve debugger penceresi
görüntülenir. Bu modda, düzenleyicinin ana penceresi, değişkenlerin değerlerini görüntülemek
için debugger watch İzleme penceresi, Basic call stack'ını (çağrı yığıtı) görüntülemek için
Debugger Call Çağrılar: penceresi mevcuttur. Watch ve Call pencereleri sadece Basic programı
çalışıyorken makro debugger tarafından durdurulmuşsa kullanılır.
Düzenleyici genel editor işlevlerine sahiptir. Düzenleyici sadece OpenOffice.org
Basic programlama dilini ve sözdizimi renklendirme ayrıca Basic anahtar kelimeleri ile ilgili F1
yardımını destekler.
Illustration 11.19: Basic Editor and Debugger
Aşağıdaki listede Makro araç çubuğu işlevleri açıklanmıştır.
Compile Derle : Aktif modülü derler ve gerekliyse bir hata mesajı görüntüler. Şayet bir
Basic programı çalışıyorsa bu düğme pasiftir. Kütüphaneleri dağıtma hazırlamadan önce
daima derleyin.
Run Çalıştır: Aktif modüldeki ilk Sub'u çalıştırır. Aktif kütüphanedeki bütün değiştirilmiş
modüller derlenmeden önce kullanılırsa bazı derleyici hataları alınabilir. Program
başlamadan önce kullanılırsa da hatalara neden olabilir. Debugger vasıtasıyla program
yürütülmesi durdurulmuşken bu komut kullanılırsa program işlemesine devam edilir.
Stop Makroyu Durdur: Basic programının yürütülmesini durdurur. Bir program çalışmıyorsa
bu düğme aktif değildir.
Procedure Step Üzerine Bas : Makroyu içindeki çağrılan diğer sub ve fonksiyonlarda
durmaksızın çalıştırır. Makro uygulaması Sub'daki alt ifadede durur. Uygulama basic
programı başlatılmaksızın çalıştırılmışsa bu düğmeyleşuandaki modülün ilk Sub'ındaki ilk
ifadede durur.
Single Step İçine Bas : Bir Basic ifadesini yürütür. İfadede bir başka sub çağrılımmışsa,
yürütme çağrılan sub'ın ilk ifadesinde durur. Herhangi bir sub veya fonksiyon çağrılmıyorsa
Step over ile aynı işleve sahiptir.(kısa yol F8).
Step back Dışına Bas : içinde bulunulan Sub veya fonksiyonu yürütür ve çağıran
Sub/fonksiyonun devam eden ifadesinde durur. Şayet hiç bir yerden çağrılmamışsa ya da
Basic programı çalışmıyorsa Run düğmesiyle aynı etkiye sahiptir.
Breakpoint Kesme noktası Açık/Kapalı : Basic düzenleyici penceresinde İmlecin bulunduğu
satırda kesme oluşturur veya kaldırır.Kesme noktası bu satırda oluşturulamıyorsa beep ile
kullanıcı ikaz edilir eylem ihmal edilir. (Kısayol F9).Kesme noktası editör penceresindeki
sol sütunda kırmızı bir nokta olarak görüntülenir.
Add watch İzleyici açık/kapalı : Basic editorde İmlecin üzerinde olduğu tanımlayıcıyı
watch penceresine ekler (Kısayol F7.
Object Catalog Nesne Kataloğu : Nesneler iletişimini açar. Dialogları,modülleri ve
modüllerin içersindeki Sub'ları da içeren tam bir Kütüphane hiyerarşisini görüntüler.
Macros Makro Seç : OpenOffice.org Basic Makrolar İletişim kutusu'nu açar
Modules Makro Seç: Opens the OpenOffice.org Basic Makro Düzenleyici dialoğunu açar.
Find Parentheses Parantez Bul : Basic editörde imleç bir parantez öncesine
yerleştirilmişse parantez çifti aranır ve bulunduğunda parantez içinde bulunan kod seçilir.
Bulunamazsa kullanıcı uyarı sesiyle ikaz edilir.
Controls Denetim Ekle : Dialog düzenleme araçlarını açar. Basic düzenleme modunda
pasiftir.
Insert Source File BASIC kaynak kodu ekle : Dosya açma dialoğunu görüntüler ve seçilmiş
olan dosyanın metnini aktif modüldeki imleç konumuna ekler (*.bas standard dosya
uzantısıdır).
Save Source As BASIC kaydet : Aktif modülü bir metin dosyası olarak kaydetmek için
Farklı kaydet iletişimini görüntüler (*.bas standard dosya uzantısıdır).
Şekil 11.19'da Bir Basic programı debugging modunda yürütülüyorken IDE penceresinin durumu
görüntülenmektedir.
•
Stop düğmesi etkindir.
•
Satır 11'e bir kesme noktası konulmuştur.
•
Satır 12 de uygulama duraklatılmıştır. Sıradaki uygulanak Uygulama adımı sarı
bir okla işaretlenmiştir.
•
Watch penceresi Value ve Hello değerlerini içermektedir ve bu değişkenlerin şu
anki değerlerini görüntülemektedir. Ayrıca değişken üzerine fare okuyla
gelindiğinde bu değerler yüzen kutularda görüntülenebilir.
•
Çağrılar penceresi yığıtı gösterir. Uygulanmakta olan doIt Sub'ı tepede
görüntülenmekte ve Main Sub'ı ikinci pozisyonda görülmektedir.
Dialog Editor Diyalog Düzenleyici
Bu kısım Diyalog düzenleyici işlevleri hakkında bilgi sağlar. Form dizaynında kullanılan
kontroller açıklanmamıştır. Bu ayrıntılar için 11.5 Basic and Dialogs - Dialoglar ve kontrollerinin
programlanması bölümüne bakın. IDE penceresi altındaki bir dialog sekmesinin tıklanması veya
Basic Makro Düzenleyici iletişiminden bir diyalog seçilmesiyle yada yeni bir form yaratılmasıyla
Dialog editör aktifleştirilir.
İlk olarak yeni bir dialog boş bir form öçerçevesi halinde görüntülenir. Sonraki şekilde uygulama
Standard kütüphanesindeki Dialog2 görünmektedir.
Illustration 11.20
Dialog düzenleme modunda düğme kontrolleri aktiftir ve bu düğmeye tıklamanın sonucu şekilde
görülmektedir. diyaloglar için özel araçları işeren bir araç çubuğu açılmıştır.İkon düğmeleri forma
yerleştirilebilecek kontrolleri göstermektedir. Kullanıcı istediği düğmeye basar, İstenilen yer ve
boyut için fareyle çerçeve çizerek kontrolü form üzerine yerleştirir.
Araç kutusundaki Aşağıdaki üç düğme kontroller için değildir:
Select Seçim düğmesi fare imlecini seçim moduna geçirir. Bu modda kontroller fare
tıklamasıyla seçilebilir hale gelir. Shift tuşuna basılırken fare tıklamalarıyla birden fazla
kontrol seçilebilir. Fare ile kontrollerin bir çerçeve içine alınması ile çerçeve içindeki bütün
kontroller seçilmiş olur.Formun seçilmesi için kullanıcı form sınırına tıklayabilir yada seçim
kutusu formu kapsayacak şekilde genişletebilir.
modda form basic scripti olduğu gibi görünür. (11.5 Basic and Dialoglar - Formalar ve
kontroller programlanması kısmına bakın) Bu düzende kontrolere atanan makrolar
çalışmamasına karşın kullanıcıya formun çalışma anında formun nasıl görüneceği
hissettirilir.
Properties Özellikler düğmesi özellikler iletişimini açar ve kapatır. Bu iletişimle seçilmiş
olan kontrollerin tüm özellikleri ayarlanabilir. Sonraki resimde seçilmiş olan komut düğmesi
özelleikleri görüntülenmektedir.
Illustration 11.21
Yukarıdaki resimde ana araç çubuğundan başlığından tutularak çalışma alanına çekilen araç
çubuğu penceresi görünmektedir.
Özellikler iletişim kutusu iki sekmelidir. General Genel sekmesi özellikler listesi içerir. Değerleri
kontroller tarafından gösterilmektedir.renk, enum tipler gibi çoğu özellikler bir listbox (liste
kutusu) ile sayısal, metin gibi tipler edit field (Metin kutusu) kontrol edilir. fontlar, renklrer gibi
daha kompleks özellikler ellipsis ( ... )düğmeleriyle açılan başka iletişim kutularıyla ayarlanır.
font seçim kutusu gibi. Kullanıcı bir metin kutusu içeriğini değiştirdiği zaman değişiklikler hemen
görüntülenmezler. Değişikliğin görünmesi için metin kutusu focus halinden çıkarılmalıdır. Tab
tuşuna basılarak veya alternatif olarak enter tuşuna basılabilir.
Events Olaylar sekmesi seçilmiş olan kontrol tarafından desteklenen olaylara atanmış makroları
görüntüler:
Illustration 11.22
Yukarıdaki örnekte, key pressed tuşa basıldı olayı için bir makro atanmıştır: Bu olay
oluştuğunda uygulama Standard Basic kütüphanesi Module2'de görünen doNothing Sub'ı
uygulanır. Uygulanabilen olaylar seçili kontrolün tipine bağlıdır.
Kullanıcı olay atamasını değiştirmek için ellipsis düğmelerine basarak Assign macro Makro ata
aşağıda görünen diyalogunu açabilir.
Illustration 11.23: Assign Macro Dialog
Event Olay etiketli liste kutusu Özellikler penceresi olaylar sekmesi ile aynıdır. Makro ata
iletişimi daima aynıdır ve sadece ellipsis düğmesiyle seçilen olay için makro ataması yada
değişimi yapılabilir.
Olaya makro atanması için, kullanıcı Assign Ata düğmesine tıklamalıdır. Böylece Macro Selector
Makro Ayırıcı iletişimi görüntülenir ve kullanıcıya kütüphane hiyerarşi içinden bir makronun
seçilmesi imkanı tanınır. Tamam tuşuyla seçilen makro olaya atanmış olur. Şayet olay için
önceden seçilmiş olan makro varsa seçim ile değiştirilir. Herhangi bir Sub seçili değilse Bu
Tamam düğmesi aktif değildir.
Diyalog bir belge içinde bulunuyorsa, Makro ayırıcı listesinde belgenin kütüphane Container'ı da
görüntülenir. Diyalog uygulama kütüphanesine aitse, belge kütüphaneleri görüntülenmez.
Çünkü uygulama dilogları tarafından bir olay başlatıldığında belgenin yüklenebileceği garanti
altında değildir.
Seçilmiş olay için bir makro atanmışsa Remove Kaldır düğmesi aktiftir. düğmeye tıklayarak
makro olaydan kaldırılır. Böylece olay makro bağlantısı koparılır.
The list box below the Remove button is used to select different macro languages. Currently,
only OpenOffice.org Basic is available.
Tamam düğmesi iletişimi kapatır ve tüm olay atamalarını ve silmelerini gerçekleştirir. Değişimle
Özellikler kutusunun olaylar sekmesinde görülür.
İptal düğmesi iletişimi kapatır ve yapılan değişiklikler gözardı edilir..
Daha önce açıklandığı gibi, eşzamanlı olarak çeşitli kontrol öğelerini seçmek mümkündür.
Aşağıdaki resimde kulanıcını tarafından CommandButton1 ve CheckBox1 öğelerin seçili olduğu
durum görülmektedir. Özellikler iletişiminde böyle bir seçim bazı önemli etkilere sahiptir.
Illustration 11.24
Özellikler penceresi başlığı özel duruma işaret etmek için Multiselection Çoklu Seçim yazısını
gösterir. Tek seçim ile İki önemli fark karşılaştırılırsa:
•
Görüntülenen özellikler bütün kontrollerin uyuştuğu özelliklerdir.Tüm kontroller
aynı özelliği destekliyorsa görüntülenir. Bir özelliğin değeri tüm kontroller için
aynı ise görüntülenir. Tüm seçilmiş kontroller kullanıcı tarafından değiştirilen
özellikten etkilenirler. Aynı değere sahip olmayan kontrollere yeni değer
uygulanır.
•
Bir multi-selection Özellikler iletişimi tekli seçimde olduğu gibi olaylar
sekmesine sahip değildir.
11.2.3 Assigning Macros to GUI Events GUI olaylarına Makro atanması
Dialog editöründe kontrol olaylarına makro atanması daha önce anlatılmıştı. Olaylara veya
eylemlere makro atanması için genel bir işlevde mevcuttur. Bu işleve Araçlar - Özelleştir
menüsü yoluyla açılan özelleştir iletişimi ile veya Makro iletişiminde ata düğmesine basılarak
ulaşılabilir. Bu bölümde sadece makroların atanması incelenecektir. İletişim hakkında daha fazla
bilgi OpenOffice.org belgelerinde bulunabilir.
Aşağıdaki sunumda Özelleştir diyaloğunun Menü sekmesi görülmektedir
Illustration 11.25
Bir makronun yeni bir menü öğesine nasıl atanacağı gösterilmektedir. Menü ve Menü içeriği
listesi OpenOffice.org menü hiyerarşisi içinde gezinmek için kullanılabilir. Ekle... düğmesine
basılmasıyla Add Commands Komut ekle iletişimi açılır. Kategori listesinde OpenOffice.org
yerleşik fonksiyonlarını listeler ve OpenOffice.org Makroları girişini görüntüler. Bir giriş
seçildiğinde bu girişteki makrolar ve komutlar sağdaki liste kutusunda görüntülenir .
Ekle düğmesine klikliyerek iletişim seçilmiş makro veya komutu bir menüye ekler.
Menüler sekmesindeki diğer düğmeler aşağıdaki gibidir :
•
Yeni düğmesi bir üst seviye menüsü yaratır
•
Menü düğmesi üst seviye menülerinin taşınması, isim değiştirimesi ve silinmesi
için komutlara sahiptir.
•
Modify Değiştir düğmesi altmenü ve ayırıcı eklenmesi, ve menü öğelerinin
yeniden isimlendirilmesi ve silinmesi için komutlar içerir.
•
Ok düğmeleri menü öğesinin yerini değiştirir.
•
Reset Başa al düğmesi varsayılan menü yapılandırmasını geri yükler.
Sonraki resimde Özelleştir diyalogunun Olaylar sekmesi görünmektedir:
Illustration 11.26
Bu sekmede makrolar OpenOffice.org genel olaylarına atanabilirler. Olay Başlıklı listede olaylar
listelenir. Assign Makro Ata düğmesi Macro selector Makro Ayırıcı iletişimini açar ki kullanıcı
burda olaya makro atayabilir. Remove Makro Kaldır seçilmiş olan olayla makro ilişkisini kaldırır.
Klavye sekmesinde makrolara kategori ve fonksiyon listesi listelerinde ulaşılır. sonra Shortcut
keys Tuşlar listesinde özeleştirilebilen bir klavye kısayolu atanır. Burda gene Load, Save, ve
Reset düğmeleri ile klavye konfigurasyonu yüklenir, Kaydedilir ve resetlenir.
Klavye sekmesinde OpenOffice.org ve Document Belge radio button Seçenek düğmesi
mevcutdur ve belge düzeyinde veya bütün ofis için geçerli bir atama olmasını kontrol eder.
11.3 OpenOffice.org Basic Özellikleri
Bu bölüm OpenOffice.Org basic programlama dili hakkında genel bir açıklama sunar.
11.3.1 Functional Range Overview Fonksiyonların genel durumu
OpenOffice.org Basic tarafından sunulan işlevsellik özetlenmiştir. kullanılabilir çalışma zamanı
fonksiyonları tariflenmiştir. Basic çevrimiçi yardım desteği Openoffice.org içine eklenmiştir fakat
özel fonksiyonlarla sınırlıdır. Basic işlevleri hakında daha detaylı bilgi elde etmek için çevrim içi
yardımı kullanın.
OpenOffice.org API'sinden ayrı olarak, OpenOffice.org Basic Visual Basic ile uyumludur.
Ekran Girdi/çıktı fonksiyonları
Basic ekranda bilgi görüntüleme için veya kullanıcıdan bilgi almak için ifadeler ve fonksiyonlara
destek verir:
•
Print ifadesi formlarda metin yada sayısal çıktıları görüntüler. Çoklu terimler
virgüllerle ayrılır ki sonucuda deyimler arasında bir tab boşluğu olur Noktalı
virgüller deyimler arasında bir boşluk karakteri bırakır. Örneğin:
e = 2.718
Print e
' displays "2.718"
Print "e =" ; e
' displays "e = 2.718"
Print "e =" , e
' displays "e =
•
2.718"
MsgBox fonksiyonu bir mesaj içeren diyalog kutusu görüntüler. Ek olarak başlığı
düğmeleri,örneğin OK, Cancel, Yes ve No, ikonları Question Mark Soru işareti
exclamation Mark Ünlem gibi, ki bunlar tarif edildiği gibi görüntülenir. Sonuç
değerlendirilebilir. Örneğin:
' Ünlem işareti, ve Ok Cancel düğmeleri olan Mesaj kutusunu görüntüler
ret& = Msgbox ("Changes will be lost. Proceed?", 48 + 1, "Warning")
' kullanıcının seçimini göster.1 = OK, 2 = Cancel
Print ret&
•
InputBox fonksiyonu kullanıcının bir metin girebildiği bir iletisi bulunan İletişim
penceresi görüntüler girdi bir değişkene atanabilir. Örneğin:
' "Please enter a phrase:"iletisi olan ve "Dear User" başlığına sahip bir diyalog görüntüle
' Diyalog metin kutusu içerir. ve metin buraya girilir.
' Girilen metin kullanıcı Tamama basarsa UserText$ aktarılır. Kullanıcı Cancela basarsa
değişken değişmez
UserText$ = InputBox( "Please enter a phrase:", "Dear User" )
Dosya Girdi/çıktı
OpenOffice.org Basic İşletim sisteminin dosya sistemine ulaşabilen ifadeler ve çalışma anı
fonksiyonları setine sahiptir ki bunlar Visual Basic ile uyumludur. Platform bağımsız olabilmesi
için file:// URL notasyonu eklenerek dosya isimleri yönetilmektedir.
UNO kütüphanesinin klasik Basic Dosya arabiriminin kullanılması tavsiye edilmez. Çünkü
OpenOffice.org API'sindeki bir çok arabirim Llasik Basic API'si ile uyumlu değildir.
Örneğin com.sun.star.io.XInputStream.
OpenOffice.org API'sinde Dosya I/O programlanması için
com.sun.star.ucb.SimpleFileAccess servisi kullanılmalıdır. Bu
servis com.sun.star.ucb.XSimpleFileAccess2 arabirimini ve içerdiği ,siFor programming, the file
I/O in context with the service should be used. This service supports the interface including the
main interface com.sun.star.ucb.XSimpleFileAccess that provides fundamental methods to
access the file system. The methods are explained in detail in the corresponding interface
documentation. The following list provides an overview about the operations supported by this
service:
•
copy, move and remove files and folders (methods copy(), move(), kill())
•
prompt for information about files and folders (methods isFolder(),
isReadOnly(), getSize(), getContentType(), getDateTimeModified(), exists())
•
open or create files (openFileRead(), openFileWrite(), openFileReadWrite()).
These functions return objects that support the corresponding stream interfaces
com.sun.star.io.XInputStream, com.sun.star.io.XOutputStream and
com.sun.star.io.XStream. These interfaces are used to read and write files. The
XSimpleFileAccess2 does not have methods of its own for these operations.
Additionally, these interfaces are often necessary as parameters to access
methods of several other interfaces. The opened files have to be closed by
calling the appropriate methods com.sun.star.io.XInputStream:closeInput() or
com.sun.star.io.XOutputStream:closeOutput().
•
The XSimpleFileAccess2 also does not have methods to ask for or set the
position within a file stream. This is done by calling methods of the
com.sun.star.io.XSeekable interface that is supported by the objects returned by
the openXXX() methods.
Two more services are instantiated at the global service manager that extends the service
com.sun.star.ucb.SimpleFileAccess by functionality specific to text files:
•
The service com.sun.star.io.TextInputStream supporting
com.sun.star.io.XTextInputStream and com.sun.star.io.XActiveDataSink:
•
The service is initialized by passing an object supporting XInputStream to the
com.sun.star.io.XActiveDataSink:setInputStream() method, for example, an
object returned by com.sun.star.ucb.XSimpleFileAccess:openFileRead().
Then the method com.sun.star.io.XTextInputStream:readLine() and
com.sun.star.io.XTextInputStream:readString() are used to read text from the
input stream/file. The method com.sun.star.io.XTextInputStream:isEOF() is used
to check for if the end of the file is reached. The
com.sun.star.io.XTextInputStream:setEncoding() sets a text encoding where
UTF-8 is the default.
•
The service com.sun.star.io.TextOutputStream supporting
com.sun.star.io.XTextOutputStream and com.sun.star.io.XActiveDataSource:
•
The service is initialized by passing an object supporting XOutputStream to the
com.sun.star.io.XActiveDataSource:setOutputStream() method, for example, an
object returned by com.sun.star.ucb.XSimpleFileAccess:openFileWrite().
Then the method com.sun.star.io.XTextOutputStream:writeString() is used to
write text to the output stream.
Date and Time Functions
OpenOffice.org Basic tarih ve zaman hesaplamaları için Visual basic uyumlu fonksiyonlar ve
ifadeler içerir. Bu fonksiyonlar DateSerial, DateValue, Day, Month, WeekDay, Year, Hour, Now,
Second, TimeSerial, TimeValue, Date, Time, ve Timer.
Date Fonksiyonu sistem zamanını metin olarak döndürür. Time fonksiyonu sistem zamanını
metin olarak döndürür. Diğer fonksiyonlar burda açıklanmamıştır.
UNO/toolkit kontrollerinde başka iki fonksiyon vardır. date field kontrol metodları;
com.sun.star.awt.XDateField:setDate() özel bir ISO formatıyla Long değerli tarih geçirir ve
com.sun.star.awt.XDateField:getDate() bu format ile geri döner.
CDateToIso Basic çalışma anı fonksiyonu, tarihi iç Basic formatından iso formuna çevirir.
Böylece Date fonksiyonuyla dönen string otomatik olarak iç Basic formuna dönüştürülür. Date,
CDateToIso fonksiyonuna direk olarak girdi parametresi olarak kullanılabilir:
IsoDate = CDateToIso(Date)
oTextField.setDate(IsoDate)
CDateFromIso ters operasyonla tarihi iso formatından iç Basic formatına çevirir.
Dim aDate as date
aDate = CDateFromIso(IsoDate)
Bu içerik için, 11.5 Basic ve Dialogları - Form ve form kontrollerini programlama kısmına da
bakın.
Numeric Functions Sayısal fonksiyonlar
Basic aşağıdaki gibi standard sayısal fonksiyonları destekler:
•
Cos bir açının kosinüsünü hesaplar
•
Sin bir açının sinüsünü hesaplar
•
Tan bir açının tanjantını hesaplar
•
Atn bir açının kotanjantını hesaplar
•
Exp bir sayının doğal logaritmasını hesaplar. (e = 2.718282 kuvveti olarak)
•
Log belirlenen tabanda bir sayının logaritmasını verir
•
Sqr sayının karekökünü alır
•
Abs sayının mutlak değerini alır.
•
Sgn İşaret sayı negatifse -1 pozitifse 1 sıfır ise 0 değerini geri döndürür.
String Functions Metin Fonksiyonları
OpenOffice.org Basic metin düzenleme için çok sayıda fonksiyona sahiptir. Bunların bazıları
kısaca açıklanmıştır:
•
Asc Metinin ilk karakter değerini Unicode olarak verir.
•
Chr Karakter ASCII veya Unicode olarak verilen sayısal değere karşılık gelen
karakteri döndürür. Bu fonksiyon ", satır başı karakteri (chr(13)) gibi
karakterlerin metnin içine yerleştirilebilmesini sağlar .
•
Str Metneçevir bir sayısal değeri metin olarak döndürür.
•
Val Sayıyaçevir metni sayısal değerine çevirir.
•
LCase Küçükharf metindeki bütün harfleri küçük harfe çevirir. küçük harfler
alfabetik olmayan karakterler etkilenmez.
•
UCase Büyükharf metindeki bütün harfleri büyük harfe çevirir. büyük harfler
alfabetik olmayan karakterler etkilenmez..
•
Left Soldan verilen metindeki n.adet karakteri metnin başından alarak döner.
•
Mid Ortadan metnin içinden belirtilen yerden belirtilen adette karakteri alarak
döner.
•
Right Sağdan verilen metindeki n.adet karakteri metnin sonundan alarak döner.
•
Trim Kırp metnin başındaki ve sonundaki boşlukları siler.
Spesific UNO Functions Özel UNO fonksiyonları
Özel UNO fonksiyonları CreateUnoListener, CreateUnoService, GetProcessServiceManager,
HasUnoInterfaces, IsUnoStruct, EqualUnoObjects bölüm 3.4.3 Professional UNO - UNO
Language Bindings - OpenOffice.org Basic.'ünde açıklanmıştır.
11.3.2 Accessing the UNO API
3.4.3 Professional UNO - UNO Diline bağlanma - OpenOffice.org Basic bölümünde, Basic ve
UNO arasındaki etkileşim temel seviyede açıklanmıştır. Bu kısım OpenOffice.org
uygulamasında Basic ve UNO API'si arabirimini açıklar.
Bu iki ön tanımlı Basic özelliği ile gerçekleştirilir:
•
StarDesktop
•
ThisComponent
StarDesktop özelliği global olarak OpenOffice.org uygulama API'sine ulaşma imkanı verirken,
ThisComponent belge düzeyinde API erişimi sağlar.
StarDesktop
StarDesktop özelliği com.sun.star.frame.Desktop servisi için bir kısa yoldur.
Örnek:
MsgBox StarDesktop.Dbg_SupportedInterfaces
' Aşağıdaki ile aynıdır.
Dim oDesktop
oDesktop = CreateUnoService( "com.sun.star.frame.Desktop" )
MsgBox oDesktop.Dbg_SupportedInterfaces
Görüntülenen mesaj kutusu biraz farklıdır. Çünkü İlk durumda Dbg_SupportedInterfaces bir
"StarDesktop" Masaüstü nesnesinin bir kopyasıdır. ve ikinci durumda
"com.sun.star.frame.Desktop" nesnesinin kopyasıdır. Fakat iki nesnede aynıdır.
ThisComponent
Belgeden olan ThisComponent özelliği Basic , ThisComponent'le erişilen nesnenin tipi belgenin
tipine bağlıdır. Aşağıdaki örnekte farklar görünmektedir.
OpenOffice.org belgesinde olan Basic modülü:
Sub Main
MsgBox ThisComponent.Dbg_SupportedInterfaces
End Sub
Basic yordamının uygulanması bir Writer, Calc ve Presentation belgesi için farklı sonuç verir.
Belge tipine bağlı olarak nesne tarafından desteklenen farklı arabirim setleri vardır.Bu
arabirimlerin bir kısmı tüm belgeler için geneldir. Bütün OpenOffice belgeleri
com.sun.star.document.OfficeDocument servisini ve com.sun.star.frame.XStorable ve ayrıca
com.sun.star.frame.XModel.arabirimini destekler.
İlişik liste bütün belgeler tarafından desteklenen arabirimleri gösterir.:
com.sun.star.beans.XPropertySet
com.sun.star.container.XChild
com.sun.star.document.XDocumentInfoSupplier
com.sun.star.document.XEventBroadcaster
com.sun.star.document.XViewDataSupplier
com.sun.star.document.XEventsSupplier
com.sun.star.document.XLinkTargetSupplier
com.sun.star.frame.XModel
com.sun.star.frame.XStorable
com.sun.star.lang.XServiceInfo
com.sun.star.lang.XMultiServiceFactory
com.sun.star.lang.XEventListener
com.sun.star.style.XStyleFamiliesSupplier
com.sun.star.util.XModifiable
com.sun.star.view.XPrintable
Bu arabirimlerin bütün işlevleri için , 6.1.1 Office Development - OpenOffice.org Application
Environment - Overview - Framework API - Frame-Controller-Model Paradigm. bölümüne bakın
Bu kısım ayrıca genel belge API'si hakkında detaylara girer.
Genel servis ve arabirimlere ilaveten her bir belge tipi özel servis ve arabirimleri destekler.
Aşağıdaki listede desteklenen servisler ve önemli arabirimler işaretlenmiştir:
Metin Belgeleri bunları destekler.:
•
com.sun.star.text.TextDocument servisi com.sun.star.text.XTextDocument.
arabirimi
•
Çeşitli arabirimler, özellikle com.sun.star.text package.
Calc belgesi bunları destekler:
•
com.sun.star.sheet.SpreadsheetDocument servisi,
•
com.sun.star.sheet.SpreadsheetDocumentSettings servisi,
•
Çeşitli arabirimler, özellikle com.sun.star.sheet package.'inden gelen.
Sunum ve Çizim belgeleri bunları destekler:
•
com.sun.star.drawing.DrawingDocument. servisi,
•
Çeşitli arabirimler, özellikle com.sun.star.drawing package.
Belgeye özel olan Bu servislerin ve arabirimlerin kullanımı 7 Text Documents, 8 Spreadsheet
Documents ve 9 Drawing. bölümlerinde açıklanmıştır.
Daha önce değinildiği gibi , ThisComponent Belge Basic'i tarafından kullanılır. Fakat uygulama
Basic'i tarafından kullanımı da mümkündür. Uygulama Modülünde ThisComponent ile
CurrentComponent eşdeğerdir ve StarDesktop.CurrentComponent yoluyla da ulaşılabilir. Bu ikisi
arasındaki tek fark şöyledir ki, eğer BasicIDE'si aktif ise StarDesktop.CurrentComponent
BasicIDE'sini işaret ederken ThisComponent BasicIDE'si aktif olmadan önceki component'i
gösterir.
11.3.3 Special Behavior of OpenOffice.org Basic Basic'in Özel Davranışı
OpenOffice.org Basic'de threading program kanalları ve rescheduling .... diğer dillerden farklı
olarak dikkate alınmalıdır
Threads
OpenOffice.org Basic thread'ları desteklemez:
•
Bazı hallerde Uno bileşenlerine özel bir yöntemle ulaşmak için yeni thread'ler
yaratılması gerekebilir. Bu durum OpenOffice.org Basic'de mümkün
değildir..
•
OpenOffice.org Basic thread'ları kontrol edemez. Eğer Basic'de iki çalışma
zamanı sistemi aynı yolu kullanırsa, sonuçlar belirsizdir, hatta program
çökmesine neden olabilir. Önlem almayı unutmayın...
Rescheduling
OpenOffice.org Basic çalışma anında sistem düzenli olarak sorgulanır. Basic modülünden
OpenOffice.org sürecine gönderilen Sistem mesajlarının işlenmesine izin verilir. Bu Basic
scriptinin çalışma anında, pencerelerin yeniden çizilmesi ve boyanması, kontrollere ve menülere
erişilebilmesi için gereklidir. Aksi taktirde Basic makrosunu araç çubuğundaki ilgili düğme ile
durdurmak mümkün olmazdı.
Bu davranış çok önemlidir. Örneğin bir komut düğmesine basılması gibi bir sistem mesajı,
Basic'te belirtilen olay için bir çağrı oluşturabilir ve sonuçta başka bir rutin aynı anda işler. Basic
programcısı makro çalışıyorken her hangi bir anda böyle bir olayın meydana gelmesinden
sakınmalıdır..
Aşağıdaki örnek basic çalışma anındaki bu durumun etkisini göstermektedir:
Dim EndLoop As Boolean
Dim AllowBreak As Boolean
' Main sub, uygulama burdan başlar
Sub Main
' Bayrakları hazırla
EndLoop = FALSE
AllowBreak = FALSE
Macro1
' Makro1'i çalıştır
End Sub
' Sub called by main
Sub Macro1
Dim a
While Not EndLoop
' Bayrakları çevir
AllowBreak = TRUE
AllowBreak = FALSE
Wend
Print "Ready!"
End Sub
' writer dökümanındaki bir düğmeye atanmış Sub .
Sub Break
If AllowBreak = TRUE Then
EndLoop = TRUE
EndIf
End Sub
Basic modülündeki Main Sub'u çalıştırıldığında, iki mantıksal değişken Endloop Döngüsonu ve
AllowBreak Kesmeizniver değişkenleri başlatılmaktadır. Sonra Macro1 Sub'ı çağrılarak makroda
sadece Endloop değerinin TRUE olması durumda sonlanacağı bir döngüye girilmektedir.
Endloop değerinin TRUE olması ise sadece bir writer belgesi içnnde komut düğmesine atanan
Break Sub'ı ile mümkün olmaktadır. Fakat AllowBreak değeri TRUE olması halinde Endloop
Bayrağı TRUE yapılabilmektedir. Bu bayrakta Macro1 içinde çevrilmektedir.
Düğmeye basıldığında programın uygulanması belki bitecek, belkide bitmeyecektir. Bu
düğmeye basılma zamanına bağlıdır. Basic o anda AllowBreak = TRUE ifadesini uygulamışsa
döngü bitecek makro sonlanacaktır. Basic çalıştırma sistemir uygulamayı yeniler. Böylece
tahmin edilemez bir durum oluşur .
Rescheduling'den Basic'e çağrılar olay için tanımlanmış Subların makro ile direk çağrılması da
aynı etkiye sahiptir. Şayet iki farklı yolla aynı makro çağrılırsa, Örneğimizde Sub Break içinde
bir kesme noktası oluşturulursa, Basic çağrı stack'ı aşağıdaki gibi görünür:
Basic
Native code
0: Break <--- Callback due to push button event
1: Macro1 ---> Reschedule()
2: Main
Native Reschedule metoduna çağrı ile, Basic çalışma sistemi boş kalır tekrar bir komut
düğmesine tıklanması ile yeniden girilebilir.Basic Stack'ında bu direk bir çağrı gibi gözükür .
Benzer bir durumda bir program CreateUnoDialog() dialog nesnesinin execute metodu ile bir
dialog gösteriyorken meydana gelir. 11.5 OpenOffice.org Basic and Dialogs - Formlar ve
Kontroller ile programlama bakın . Bu durumda Basic çalışma sistemi reschedule yapamaz,
fakat mesajlar iletişim mesaj döngüsü tarafından işlenmeye devam eder ve sonuçlar Basic'e
çağrılar olarak geri döner. Basic çalıştırma sistemi bir iletişim olayı callback.fonksiyonla
çağrılırsa sonuçta Basic stackları benzer görünür. örneğin:
Sub Main
Dim oDialog
oDialog = CreateUnoDialog( ... )
oDialog.execute()
End Sub
Sub DoIt
...
End Sub
Şayet Doit Sub'ı çalıştırılırsa ve herhangi bir dialog kontrolü için bir olay oluşursa Sub Doit içine
kesme noktası yerleştirilmişken çağrı penceresi aşağıdaki gibidir:
Basic
Native code
0: DoIt <--- Callback due to control event
1: Main
---> execute() ---> Reschedule()
Basic çalıştırma sistemi tarafından direk olarak yapılan Rescheduling ile de bir fark vardır.
İletişim döngüsü herhangi bir beklenmeyen davranış göstermez. çünkü iletişimin execute
metodu tarafından Basic çalıştırma sistemi çağrılmıştır ve onun dönüşünü bekler..
11.4 Advanced Library Organization İleri Düzey Kütüphane
düzenleme
Basic kaynak kodları ve Dialogları kütüphanelerle düzenlenir. Bu bölüm kütüphane sisteminin
yapısını ve kullanımını açıklar.
11.4.1 General Structure Genel Yapı
Basic kodunun ve Formların saklanmasında kullanılan Kütüphane sistemi üç seviyelidir:
Library container Kütüphane Deposu
•
Kütüphane container'ı kütüphanelerin içinde bulunduğu hiyerarşinin en üst
seviyesidir. Kütüphane container'ı içindeki kütüphanelere adları kullanılarak
erişilir.
•
Bir kütüphane mantıksal olarak birbiriyle ilişkili elemanları içerir, örneğin
çeşitli programdan yada takımdan olan Basic modülleri ve ilişkili formları gibi
Kütüphane
Kütüphane elemanları
•
Kütüphane elemanları Basic kaynak kodları veya formlardır. Basic kaynak
kod modüllerinin eleman tipleri
metindir. com.sun.star.io.XInputStreamProvider arabirimi tarafından gösterilen
dialoglar iletişimi tanımlayan XML veri olarak saklanırlar .
Düzen Basic kaynak kodu ve dialoglar için ayrıdır, bir Basic kütüphane container'ı Basic kaynak
kodu ve dialog elemanlarını barındıran Basic kütüphanelerine sahipken, Dialog kütüphane
Container'ı sadece dialogları içeren dialog kütüphaneleri bulundurabilir.
Basic kaynak kodu ve dialoglar tüm ofis uygulaması için genel ve belge için lokal düzeyde
depolanabilirler. Uygulama için sadece bir Basic kütüphane ve Dialog kütüphanesi vardır. Her
belge içinde bir Basic kütüphane ve Dialog kütüphanesi olması uygundur. Böylece Uygulama
ve belge düzeyi kapsama alınmış olur. Aşağıda gösterilen figürdeki gibi Kütüphane sistemi dört
seviyelidir.
Document1 için Kütüphane düzeninde görüldüğü gibi Basic ve dialog kütüphanesi aynı yapıda
değildir. Basic Kütüphane Container'ı Library1 olarak isimlendirilmiş bir kütüphane ve dialog
kütüphane container'ı Library2 adlı kütüphaneye sahiptir. kütüphane Container'ları Basic ve
Dialog API'si için ayrı düzenlenmiştir.
GUI'de basic ve dialog container'ları ayrılmadığı için, yukarıdaki gibi bir yapı tavsiye edilmez.
Örneğin OpenOffice.org Makro düzenleyici iletişiminde kullanıcı yeni bir kütüphane yarattığında
yada sildiğinde Basic veya dialog kütüphaneleri container'larında yaratılır.
Illustration 11.27: Sample
module structure
11.4.2 Accessing Libraries from Basic Kütüphanelere Basic ile erişim sağlanması
Library Container Properties in Basic Basic'te Kütüphane Kabı Özellikleri
Halihazırda UNO sistemi arabirimiyle ulaşılan kütüphane siatemi, bir UNO servisi değildir. bu
nedenle kütüphanelere UNO servisi ile hemen ulaşılamaz. Basic'den direk olarak
Kütüphanelere BasicLibraries ve DialogLibraries yerleşik özellikleri ile ulaşılır.
BasicLibraries Basic kütüphanesine bir referanstır. Uygulama çaplı Basic modulünde,
BasicLibraries uygulama kütüphane container'ına ulaşır, Belge Basic modülünde BasicLibraries
sadece belge Basic container'ına erişir. Aynı şeyler DialogLibraries özelliği için de geçerlidir..
Loading Libraries Kütüphanelerin yüklenmesi
İlkin, Basic kütüphanelerinin çoğu yüklenmez. Uygulama Basic container'ları içindeki bütün
kütüphaneler OpenOffice.org, başladıktan sonra, belgeler içinse belge yüklendikten sonra
tanınırlar. Çoğu da çağrılarak yüklenmeden önce etkin değildirler. Bu mekanizma Basic'in
başlaması sırasında zaman kazandırır. Bir Basic modülü başlatıldığında, kaynak kod modülleri
Basic engine motor una eklenir ve derlenirler.
Her Kütüphane deposunda bulunan Standard adlı kütüphaneler daima yüklenirler. Bu
kütüphane Basic programları ve formları için standard bölgedir ve komplex yapıda olmamalıdır.
Diğer kütüphaneler istenildiğğinde yüklenirler. Örneğin:
Library1, Module1 de aşağıdaki yordam
Sub doSomething
MsgBox "doSomething"
End Sub
Standard kütüphanesi , Module1 deki aşağıdaki kod
Sub Main
doSomething()
End Sub
Kullanıcı Araçlar - Makrolar menüsü yoluyla Library1'i yüklemedikçe, Sub
doSomething Çalışmaz. İletişim kutusu görüntülenmeden önce bir çalışma zamanı hatası
"Property or method not found" meydana gelir. Bu durumdan sakınmak için doSomething()'i
çağırmadan önce Kütüphaneyi yükleyin:
Sub Main
BasicLibraries.loadLibrary( "Library1" )
doSomething()
End Sub
Dialog Container'ına gelince, Standard kütüphanesinde bulunan tüm kütüphaneler yüklenmelidir
Örneğin
Sub Main
' Bu satır yazılmazsa bu kod çalışmayayacaktır
DialogLibraries.loadLibrary( "Library1" )
' İletişimi görüntülemek için gerekli kod
' Detaylar sonraki bölümde açıklanacaktır
oDlg = createUnoDialog( DialogLibraries.Library1.Dialog1 )
oDlg.execute()
End Sub
İletişimi hazırlamak ve görüntülemek için kullanılan kod 11.5 OpenOffice.org Basic and Dialogs Dialog ve kontrol elemanlarının programlanması. bölümünde açıklanacaktır.
DialogLibraries.Library1.Dialog1 sadece Library1 yüklenmiş ise geçerlidir .
BasicLibraries ve DialogLibraries Basic kodunu içeren container'ına ulaşım referanslarıdır. Bu
nedenle belge modülünde sadece belge ContainerI için referranstırlar. Çoğu durumda belgenin
kütüphaneleri yüklenmelidir. Bazen uygulama belge Basic'inden uygulama düzeyindeki
kütüphanelere ulaşmak gerekirse, GlobalScope özelliği kullanılır. GlobalScope Uygulama
Basic'inde kök alanını temsil eder .
Bir belge Basic'i standard kütüphane örnek modülü:
Sub Main
' Bu kod Belge Basic container'ından Library1'i yükler
...'
BasicLibraries.loadLibrary( "Library1" )
' Bu kod Belge Dialog container'ından Library1'i yükler
...'
DialogLibraries.loadLibrary( "Library1" )
' Bu kod Uygulama Basic container'ından Library1'i yükler
...'
GlobalScope.BasicLibraries.loadLibrary( "Library1" )
' Bu kod Uygulama Dialog container'ından Library1'i yükler
...'
GlobalScope.DialogLibraries.loadLibrary( "Library1" )
' Bu kod Uygulama Basic modülü Library1.Module1'in kodunu görüntüler
...'
MsgBox GlobalScope.BasicLibraries.Library1.Module1
End Sub
Uygulama kütüphane depolarına belge düzeyi Basic'inden ulaşabilmek için
GlobalScope özelliği kullanılır. Örneğin, GlobalScope.BasicLibraries.Library1.
Library Container API Kütüphane Container API'si
The BasicLibraries ve DialogLibraries com.sun.star.script.XLibraryContainer'dan türetilen
com.sun.star.script.XLibraryContainer2'i tarafından desteklenir ki buda
com.sun.star.container.XNameContainer servisinden gelir. Basic geliştiricileri bir metot
kullanabilmek için yerleşimi bilmek zorunda değildir. Fakat API referanslarındaki metotlara
incelenirken bilinmesi yararlıdır.
XLibraryContainer2 varolan kütüphane bağlantılarını ve yazma korumalarını kontrol eder.
Kütüphanelerin isminin değiştirilmesi içinde kullanılır Metotlar ilerleyen kısımda ayrıntılı olarak
anlatılmıştır :
boolean isLibraryLink( [in] string Name)
string getLibraryLinkURL( [in] string Name)
boolean isLibraryReadOnly( [in] string Name)
void setLibraryReadOnly( [in] string Name, [in] boolean bReadOnly Sadeceoku)
void renameLibrary( [in] string Name, [in] string NewName)
XLibraryContainer kütüphane ve kütüphanne yollarını syaratır veya siler. Buna ilaveten bir
kütüphanenein yüklü olup olmadığını test eder veya gerekliyse, yükler.
com::sun::star::script::XNameContainer createLibrary( [in] string Name)
com::sun::star::script::XNameAccess createLibraryLink( [in] string Name,
[in] string StorageURL, [in] boolean ReadOnly)
void removeLibrary( [in] string Name)
boolean isLibraryLoaded( [in] string Name)
void loadLibrary( [in] string Name)
XNameContainer metotlarıyla container'lardaki kütüphanelere erişim ve yönetimi sağlanır:
void insertByName( [in] string name, [in] any element)
void removeByName( [in] string name)
any getByName( [in] string name)
void replaceByName( [in] string name, [in] any element)
sequence < string > getElementNames()
boolean hasByName( [in] string name)
type getElementType()
boolean hasElements()
UNO API'sinde bu metotlarla erişim sağlanır. 3.4.3 Profesyonel UNO - UNO dili ile bağlanma OpenOffice.org Basic. bölümünde açıklandığı gibi UNO API kullanılır. Not: Bu arabirimler
sadece OpenOffice.org Basic ile kullanılabilir.diğer ortamlarda kaullanmak mümkün değildir.
Kütüphaneler container'lara iki farklı yol ile eklenir:
Creating a New Library Yeni kütüphane yaratarak
CreateLibrary() metodunun kullanımı ile yeni bir kütüphane yaratılır. Bu metotla yaratılmış
kütüphane Yöntemin çağrılmış olduğu Container'a aittir. hod. A library created with this method
belongs to the library container where createLibrary() has been called. Kütüphane container'ı
uygulaması bu kütüphanenin yüklenmesi ve saklanması için sorumludur.Bu işlev şu an için
arabirimler tarafından sağlanmaz. Onun için uygulama nerede ve nasıl olacağını belirlemelidir.
createLibrary() kütüphane elemanlarına erişim ve kütüphane düzenlenmesi için bir Standard
com.sun.star.container.XNameContainer arabirimiyle döner .
İlkin, böyle bir kütüphane boştur ve yeni kütüphane elemanları yerleştirilir. Kütüphaneyi
değişikliklerden korumak için setLibraryReadOnly() metotu da kullanılabilir. Sadece oku
kütüphanelerine yeni elemanlar eklenip silinemez ve Basic modülleri ile formlar
değiştirilemezler. Ek bilgi için 11.2 OpenOffice.org Basic and Dialogs - OpenOffice.org Basic
IDE kısımına bakın.Sedece oku statüsü API üzerinden değiştirilebilir..
Creating a Link to an Existing Library Varolan kütüphaneye bağ oluşturulması
Varolan kütüphaneye bir bağ oluşturulması createLibraryLink() metodunun kullanılmasıyla
sağlanır. StorageURL parametresi kütüphane ile kütüphane .xlb dosyası yolu verilir. Bu konu için Ekstra bilgi
11.7 OpenOffice.org Basic and Dialoglar - Kütüphane dosyası yapısı konusuna bakın. Bir kütüphane bağı Kütüphane
containeri da dahil olarak refere edilebilir. onun için kütüphane deposu dosyanın saklanmasından
sorumlu değildir. Bu sadece StorageURL parametresi ile tanımlanır.
ReadOnly parametresi Kütüphane bağının statüsünü sadece oku'ya çevirir. Bu durum
bağlanmış Kütüphanenin statüsünden bağımsızdır. Bağlanmış kütüphane kütüphane ile bağ
statüsü read only ise değiştirilebilir. Örneğin, bu mekanizma network sürücüsünde bulunan bir
kütüphaneyi read-only yapmaya gerek kalmaksızın read-only olarak erişim imkanı sağlar,
böylece yetkili kişiler tarafından kolaylıkla değiştirilebilir.
Library container'ları tarafından desteklenen metotlar İlişik tablolarda kısaca belirtilmiştir:
Selected Methods of com.sun.star.script.XLibraryContainer2
isLibraryLink()
boolean. mantıksal Bir kütüphanenin Container'a bağ olarak eklenip
eklenmediği sorgulanaır. Geri dönen değer doğru veya yanlıştır.
getLibraryLinkURL()
string. metin Bağlanmış kütüphanenin StorageURL yolunu gösteren
dize ile geri döner. createLibraryLink(...) metodundaki
parametresine karşılık gelen dizedir. Sonuç GUI üzerinden
kullanıcıya gösterilebilir.
isLibraryReadOnly()
boolean. kütüphaneyi sadece oku durumunu getirir. Kütüphane
bağlantısı ise false olarak döner. Böylece bağ yada bağlanmış
kütüphane read-only değilse değiştirilebilir.
renameLibrary()
Kütüphane adını değiştirir. Kütüphane bağ olarak eklenmişse sadece
yol adı değiştirilir.
Selected Methods of com.sun.star.script.XLibraryContainer
loadLibrary()
void. Bir kütüphane yükler
isLibraryLoaded()
boolean. Kullanıcının bir kütüphanenin daha önceden yüklendiğini
öğrenmesini sağlar.
removeLibrary()
void . Kütüphane deposundan bir kütüphaneyi siler. Şayet bu bir bağ
ise bağ silinir..
11.4.3 Variable Scopes Değişkenlerin Kapsamı
Basic'de Kütüphanenin yapısına bağlı olarak kapsama değişir. Bu bölümde Basic kaynak kod
modülünde tanımlanan hangi değişkenlerin hangi kütüphanelerde ve modüllerde görülebilir ve
erişilebilir olduğu açıklanmıştır. Genellikle Sub'ların yordam dışında deklare edilen değişkenler
erişilebilir durumdadır. Sub içinde tanımlanan değişkenler lokaldir ve sub dışından erişilemez..
Örneğin:
Option Explicit
' Değişkenlerin deklarasyonunu vurgular
Sub Main
Dim a%
a% = 42
' Tamam
NotMain()
End Sub
Sub NotMain
a% = 42
' "Variable not defined" Değişken tanımlı değil hatası
End Sub
Değişkenler Sub dışındada tanımlanabilir. Böylece en azından deklare edildiği modül
seviyesinde ulaşılabilir olması temin edilir. Değişkenleri yordam dışında tanımlamak için Private
Özel, Public/Dim and Global komutları kullanılır.
Private komutu değişkenlerin kendi modülleri içinde lokal olmasını temin için kullanılır. aynı
değişkenler iki farklı modülde tanımlanmışsa her modülde bağımsız olarak kullanılır. Örneğin:
Library Standard.Module1:
Private x As Double
Sub Main
x = 47.11
' Module1 de x'i initalize et.
Module2_InitX
' Module2 de x'i initalize et
MsgBox x
' Module1 deki x'i görüntüle
Module2_ShowX
' Module2 deki x'i görüntüle
End Sub
Library Standard.Module2:
Private x As Double
Sub Module2_InitX
x = 47.12
' Module2 de x'i initalize et
End Sub
Sub Module2_ShowX
MsgBox x
' Module2 deki x'i görüntüle
End Sub
Module1'deki Main çalıştırıldığında, (Module1'deki x) 47.11 görüntülenir.ve sonra 47,12
görüntülenir.(x of Module2).
Public and Dim komutları değişkenleri modül dışındanda erişilebilir. yapar. Bu bağlamda
eşdeğer komutlardır. Aynı Kütüphane container'i içindeki tüm modüllerden erişilebilir
durumdadırlar. Örneğin görülen kütüphane yapısında Application Basic Modules
Standard/Module1, Standard/Module2, Library1/Module1, Library1/Module2'de Pulic ve dim
olarak deklare edilen tüm değişkenler aynı modüllerden erişilebilir durumdadır. Onun için
Kütüphane Container'ı mantıksal kök kapsamını temsil eder.
11.5 Programming Dialogs and Dialog Controls Formlar ve form
kontrolleri ile programlama
Formlar ve form kontrolleri Module ait olan[MODULE:com.sun.star.awt] Grafiksel arabirim
desteği sağlayan UNO elemanlarıdır.. Toolkit controls Araç kutusu kontrolleri Model-View-
Controller (MVC) tekniğine sahiptir. Kontrol elemanı üç mantıksal birime ayrılır ki bunlar Model,
görünüm ve olay kontrolcü birimleridir. Modelde veri ve düşük seviye davranışları görülür.
kontroller ve görünüm hakkında özel bilgiler bulunmaz. View elemanının görsel durumunu
yönetir. Controller'de ise model ile kullanıcı arası etkileşimler yönetilir.
Not, Toolkit kontrolleri görünüm ve olayları bir mantıksal birim haline getirir.
Böylece eleman için kullanıcı arabirimi oluşturulur.
Aşağıdaki örnekte text field metin kutusu için Model, View ve Controller birimlerine ayrılma
açıklanmıştır. Model görüntülenen metin, metin rengi maksimum karakter sayısı gibi verileri
içerir. .Metin kutusu modeli com.sun.star.awt.UnoControlEditModel servisi ile tanımlanmıştır. Bu
servis ise com.sun.star.awt.UnoControlModel servisi üzerinden geliştirilmiştir. Bu modelin tüm
görünümleri com.sun.star.beans.XPropertySet arabirimiyle erişilebilen özellikler takımıyla
tanımlanmıştır. View metin kutusu ve içeriğini görüntülemekten sorumludur. Aynı model için
farklı görünümler hazırlamak mümkündür, ama Toolkit dialog'ları için olmaz. View model
değişimleri hakkında bilgilendirilmelidir. Örneğin textcolor metin rengi değiştirilirse repaint
yeniden çizim işleminin yapılmasına neden olur. Örneğin Kullanıcı klavyede delete tuşuna
bastığında metin kutusunda seçilmiş olan metin silinir. MVC şeması hakkında daha detaylı bilgi
13 Formlar. kısmında bulunabilir
Tüm Toolkit controllerinin tabanı com.sun.star.awt.UnoControl servisindedir ve aşağıdaki
arabirimleri aktarır:
•
com.sun.star.awt.XControl arabirimi control yapısını özelleştirir.. Örneğin,
Model, View ve Control birimlerine erişim sağlanarak yönetimi gibi.
•
The com.sun.star.awt.XWindow arabirimi bir pencere elemanı ile ilgili
düzenlemeler sağlanır.
•
The com.sun.star.awt.XView arabirimi bir çıkış aygıtına bağlanılması ve bir
nesnenin çizilmesi için lüzumlu metotları sağlar.
11.5.1 Dialog Handling Form Yönetimi
Showing a Dialog Dialogun Görüntülenmesi
Dialog düzenleyici kullanılarak, formun dizaynından sonra, bir geliştirici program kodu ile onun
görüntülenmesini ister. Gerekli adımlar aşağıdaki örnekte gösterilmiştir:
(BasicAndDialogs/ToolkitControls)
Sub ShowDialog()
Dim oLibContainer As Object, oLib As Object
Dim oInputStreamProvider As Object
Dim oDialog As Object
'Const ile değişkene değer verilirse program boyunca bir daha değiştirilemez
Const sLibName = "Library1"
Const sDialogName = "Dialog1"
REM library container
oLibContainer = DialogLibraries
REM load the library
oLibContainer.loadLibrary( sLibName )
REM get library
oLib = oLibContainer.getByName( sLibName )
REM get input stream provider
oInputStreamProvider = oLib.getByName( sDialogName )
REM create dialog control
oDialog = CreateUnoDialog( oInputStreamProvider )
REM show the dialog
oDialog.execute()
End Sub
Form kontrolü CreateUnoDialog()fonksiyonunun çağrılması ile yaratılır.
com.sun.star.io.XInputStreamProvider arabiriminde nesne parametre olarak alınır. Bu nesne
form için XML veri yapısı olarak girdi akımında temsil edilir. 11.4 Basic and Dialoglar - İleri
düzey kütüphane Düzenleme bölümünde Kütüphaneyapısı içindeki nesneye ulaşım
açıklanmıştır. Form kontrolü com.sun.star.awt.XDialog arabirimindeki execute()metodu ile
çağrılır. endExecute()metodu ile kapatılabilir veya Cancel ve OK ddüğmeleri ile kapatılabilir
Getting the Dialog Model Dialog modelinin elealınması
Bir geliştirici formun ya da olayların özelliklerini değiştirmak isterse, Diyalog Modeline
ulaşmalıdır. Bir Diyalogdan com.sun.star.awt.XControl arabirimi, getModel metodu ile Diyalog
modeline ulaşılır.
oDialogModel = oDialog.getModel()
veya kısaca
oDialogModel = oDialog.Model
Dialog as Control Container Kontrol Container'ı olarak Diyalog
Bir forma ait olan bütün kontroller mantıksal olarak gruplanmışlardır. All controls belonging to a
dialog are grouped together logically. This hierarchy concept is reflected by the fact that a dialog
control is a container for other controls. Karşılık gelen servis com.sun.star.awt.UnoControlDialog
, com.sun.star.awt.XControlContainer arabirimini destekler. Bu arabirim ise içindeki elemanlara
isimleriyle ulaşılabilme imkanını sağlar. OpenOffice.org Basic'de, her desteklenen metot ve
arabirim nesneden uygun olan arabirim sorgulanmaksızın direk olarak çağrılır. TextField1 adlı
bir kontrol basitçe oDialog nesnesinden elde edilebilir:
oControl = oDialog.getControl("TextField1")
Ekstra bilgi için, 3.4.3 Professional UNO - UNO Language Bindings - OpenOffice.org Basic
kısmına bakın. Dialog ve kontrolleri arasındaki düzen dialog modelinde görülebilir
com.sun.star.awt.UnoControlDialogModel. Ki o control modelleri için container'dır. Bu
nedenlecom.sun.star.container.XNameContainer arabirimini destekle..Komntrol modeli dialog
modelinden aşağıdaki gibi elde edilir:
oDialogModel = oDialog.getModel()
oControlModel = oDialogModel.getByName("TextField1")
Ya da kısaca
oControlModel = oDialog.Model.TextField1
Dialog Properties Form Özellikleri
Bir form gösterilmeden önce bazı değişiklikler yapılması mümkündür. Örnek olarak, Bir form
başlığındaki yazının title özelliğini com.sun.star.beans.XPropertySet arabirimiyle değiştirebiliriz:
oDialogModel = oDialog.getModel()
oDialogModel.setPropertyValue("Title", "My Title")
kısaca
oDialog.Model.Title = "My Title"
Başka bir yaklaşımla, com.sun.star.awt.XDialog arabiriminin setTitle metodu kullanılabilir:
oDialog.setTitle("My Title")
Kısaca
oDialog.Title = "My Title"
Bir başka özellik BackgroundColor özelliğiyle, form için başka bir arka plan rengiayarlanır.
Common Properties Genel özellikler
Tüm Toolkit (Araç çubuğu) kontrolleri genel özellik olarak tanımlanan bir sete sahiptir. Bunlar
PositionX, PositionY, Width, Height, Name, TabIndex, Step ve Tag'dır.
Note that a Toolkit control model has those common properties only if it belongs to
a dialog model. This has also some consequences for the creation of dialogs and
controls at runtime. See 11.6 OpenOffice.org Basic and Dialogs - Creating Dialogs
at Runtime.
PositionX, PositionY, Width and Height özellikleri bir formun yada kontrolün çalışma anında
pozisyonu ve boyunu değiştirir. Dialog düzenleyici ile düzenlenirken bu özellikler otomatik
ayarlanır.
Name (İsim) özelliği tüm kontrol elemanları ve formlar için gereklidir, çünkü elemanlara
adlarıyla ulaşılır. Dialog düzenleyicide bu isimler nesnenin ismine numara eklenmesiyle yaratılır.
TextField1gibi.
TabIndex (Sekme sırası) özelliği tab tuşuyla form üzerinde gezilirken seçili olma sırasını belirler.
İlk elemanın sıra sayısı 0'dır. Form düzenleyicide bir form kontrolü yerleştirildiğinde otomatik
olarak atanır. Bu özellik mözellikler iletişim kutusu yardımıylşada değiştirilebilir. Çalışma anında
ayarlanuırken dikkatli olun.
Tag (Ek bilgi) özelliği kontrol için sayı veya işaret gibi ekstra bilgi ekler.
Step (Sayfa) özelliği sıradaki bölümde detaylı olarak açıklanmıştır.
Multi-Page Dialogs Çok sayfalı Formlar
Bir form kullanıcıyı adım adım yönlendirebilmek için birden çok sayfaya sahip olabilir. Bu
işlevsellik OpenOffice.org autopilotlarında kullanılır.Form Step (Sayfa-adım) özelliği iletişimin
hangi sayfasının aktif olduğunu gösterir.Çalışma anında step özelliğin 1 artırarak yeni sayfa
görüntülenir.
Step özelliği bir kontrolün görünür olduğu sayfayı belirler. Örneğin, bir kontrol step değeri 1 ise
formun sadece birinci sayfasında görünür durumdadır. Şayet iletişimin sayfa değeri 2 olarak
belirlenirse 1 değerli kontroller soluk görüntülenir. 2 değerli tüm kontroller görünür olurlar.
Sıfır sayfa değeri özel bir rol üslenir. Page özelliği 0 olan kontroller tüm sayfalardda görüntülenir.
Sayet form step değeri 0 ise tüm kontroller sayfa sırasına bakılmaksızın görüntülenir.
11.5.2 Dialog Controls Form kontrolleri
Command Button Komut düğmesi
Komut düğmesi com.sun.star.awt.UnoControlButton kullanıcıya düğme tıklaması ile bir
uygulama çalıştırılması olanağı sağlar. genellikle etiket metni taşır, Kontrol modeliyle etiket
değiştirilebilir:
oDialogModel = oDialog.getModel()
oButtonModel = oDialogModel.getByName("CommandButton1")
oButtonModel.setPropertyValue("Label", "My Label")
Yada kısaca:
oDialog.Model.CommandButton1.Label = "My Label"
Etiket com.sun.star.awt.XButton arabiriminin SetLabel metoduyla da değiştirilebilir:
oButton = oDialog.getControl("CommandButton1")
oButton.setLabel("My Label")
Çalışma anında butonu etkin ve pasif olarak ayarlamak mümkündür. Enabled özelliği true ve
false ayarlanması ile istenen sonuç elde edilir. PushButtonType (Düğme türü) özelliği düğmenin
varsayılan etkisini tanımlar. 0 varsayılan, 1 Ok, 2 Cancel ve 3 Help. Eğer düğme türü 2 olarak
ayarlanmışsa düğmemiz bir Cancel düğmesi olarak davranır ve düğmeye basıldığında
Formumuz kapanır. Bu durumda execute()metotu 0 değeri ile geri döner. OK düğmesi
execute()metotunda 1 değeri geri döndürür. DefaultButton özelliği form düğmesinin standard bir
düğme olduğunu gösterir. ENTER düğmesine basılmasıyla başka bir kontrol seçili olsa bile bu
düğme seçilir. Tabstop (Sekme duruşu)özelliği düğmeye TAB tuşu ile ulaşılabileceğini ayarlar.
Düğmelerde ImageURL ( Grafik )özelliği ile resim görüntüleme yeteneği de mevcuttur. (...)
düğmesi ile bir resim dosyası seçimi sağlanır. ImageURL resim dosyasının yolunu tutar.
oButtonModel = oDialog.Model.CommandButton1
oButtonModel.ImageURL = "file:///D:/Office60/share/gallery/bullets/bluball.gif"
oButtonModel.ImageAlign = 2
tüm standard .gif, .jpg, .tif, .wmf ve .bmp gibi, grafik biçimleri desteklenir. ImageAlign ( Grafik
Hizalaması ) özelliği ile 0 sol, 1 tepe, 2 sağ ve 3 alt olarak resim düğme içinde hizalanır. Şayet
resim düğme boyutundan büyük ise fazla kısım ölçekleme yapılmaksızın kesilir. Onun için
image control daha fazla işlevsellik sunar.
Image Control Resim Denetimi
Eğer kullanıcı düğme fonksiyonuna sahip olmayan bir resim görüntülemek isterse, Image
control com.sun.star.awt.UnoControlImageControl seçilmelidir. .ScaleImage ( Ölçek ) özelliğinin
true olarak ayarlanması kontrol resmi otomatikman ölçeklendirir. İmage kontrol elemanı kendi
başına bir düğme gibi de çalışabilir. kullanımı için bir düğme üzerine yerleştirilmesi gereksizdir.
Düğmenin tıklanabilmesi için Etkin özelliğini hayır ayarlayın.
oImageControlModel = oDialog.Model.ImageControl1
oImageControlModel.ImageURL = "file:///D:/Office60/share/gallery/photos/beach.jpg"
oImageControlModel.ScaleImage = True
Check Box Onay kutusu
Check box kontrolü com.sun.star.awt.UnoControlCheckBox çoklu seçenek guruplarından
kullanıcı tarafından tek ya da birden çok seçim yapılabilmesi için kullanılır. Bir onay kutusu
seçildiğinde bir onay imi görüntülenir. Onay kutuları option buttons (seçenek düğmesi) den
farklı olarak, birbirlerinden bağımsız çalışır.Aynı anda birden fazla seçim yapılabilir.
State ( durum ) özelliği, 0 is seçili değil, 1 seçili , 2 tanımsız, halleri Onay kutusu için
mümkündür. TriState( Üç-durumlu ) özelliği true ayarlanırsa bu mod bu ise kullanıcıya çekimser
kalma hakkı tanır.
oCheckBoxModel = oDialog.Model.CheckBox3
oCheckBoxModel.TriState = True
oCheckBoxModel.State = 2
Aynı sonuç com.sun.star.awt.XCheckBox arabiriminin getControl metodu kullanımı ile de elde
edilebilir :
oCheckBox = oDialog.getControl("CheckBox3")
oCheckBox.enableTriState( True )
oCheckBox.setState( 2 )
Option Button Seçenek düğmesi
Bir seçenek class=Codeintext>com.sun.star.awt.UnoControlRadioButton düğmesi kullanıcı
tarafından seçim yapılan iki durumlu basit bir anahtardır. Genellikle seçenek düğmeleri
görüntülenen gruplar içinden, çeşitli seçeneklerin seçildiği kontrollerdir. Onay kutuları ile
seçenek düğmeleri benzer işlevler görür, ancak grubdaki bir seçenek düğmesinin seçimi diğer
seçeneklerin seçilmiş olma durumuna son verir.
Not, aynı guruba ait olan seçenek düğmeleri ardışık tab indeksine sahip olmalıdır.
İki gurublu bir yapıda seçenek düğmeleri tab indeksi iki gurubun arasında
bulunan herhangi bir kontrolle ayrılabilir .
Genelde bir Group Box ( Gurup kutusu ) veya yatay, dikey çizgi kullanılır. Böylece görsel olarak
seçenek düğmeleri gruplanmış olur. Group box, yatay ve dikey çizgiler kontrol elemanlar değildir
seçenek düğmeleriyle fonksiyonel olarak ilişkileri yoktur. Option button'ları ardışık olarak tab
indeks değerlerine sahip olmalıdır.
Option button durumuna State ( durum ) özelliği ile ulaşılır. 0 seçili olmadığını 1 ise seçili
olduğunu gösterir.
Function IsChecked( oOptionButtonModel As Object ) As Boolean
Dim bChecked As Boolean
If oOptionButtonModel.State = 1 Then
bChecked = True
Else
bChecked = False
End If
IsChecked = bChecked
End Function
Label Field Etiket alanı
Bir label field kontrolü com.sun.star.awt.UnoControlFixedText ekranda kullanıcının
düzenleyemediği metin gösterir. Bir text field, List box ve Combo box ile ilgili açıklamalar bu
elemenla yapılabilir. Label ( Etiket ) özelliği ile belirtilen metin gösterilir. Align ( hizalama )
özelliği metinin kontrolde hizalanması ayarlanır. 0 sol, 1 ortala, 2 sağ değerlerine sahiplerine
sahip olabilir. Varsayılan olarak metin bir satırda görüntülenir ve matin ayrılmış alanı aşarsa
metin kesilerek görüntülenir. Bu davranış multiline ( Kelime kesme evet ) özelliğinin True
yapılmasıyla değiştirilir, böylece bütün metin birden çok satırda görüntülenir. Border ( kenarlık )
özelliği varsayılan olarak yoktur. Özellik değeri 0 ise kenarlık yok, 1 ise 3d kenarlık, 2 ise basit
kenarlık değerlerine sahip olabilir. Metinin Fontu Fontdescriptor ( Karakter kümesi ) özelliği ile
ayarlanır. Bu özelliğin Dialog editör ile ayarlanması tavsiye edilir.
Label field'ları herhangi etiketi olmayan kontroller için kısa yol tuşları tanımlamak için
kullanılabilir. Herhangi bir kontrol için (~) tilde işareti eklenerek tanımlanabilir. Kullanıcı ALT
tuşuna basarken karakter tuşuna basarsa kontrol aktifleşir. Label field etkinleşemiyeceği için tab
sırasıda sonraki kontrol aktifleşmiş olur. Önemli nokta ise iki kontrolünde ardışık tab sırasına
sahip olmasıdır.
oLabelModel = oDialog.Model.Label1
oLabelModel.Label = "Enter ~Text"
Text Field Metin kutusu
Bir text field konrolü com.sun.star.awt.UnoControlEdit programın yürütülmesi anında
kullanıcıdan bir girdi değeri alınması için kullanılır. Genellikle düzenlenebilir metin çalışmaları
için kullanılır, fakat ReadOnly ( Salt okunur ) özelliğinin True olarak ayarlanması ile içindeki
metinin düzenlenmesi engellenebilir. İçinde görüntüğlenen metin Text ( Metin ) özelliği ile kontrol
edilir. Metin kutusuna girilebilecek maksimum karakter sayısı MaxTextLen ( en fazla metin
uzunluğu ) özelliği ile belirlenir. 0 değeri girilirse karakter uzunluğu için bir limit tanımlanmamış
olur. Varsayılan olarak text field bir satır olarak görüntülenir. Bu davranış MultiLine ( Çok satırlı
girdi ) özelliğinin True yapılması ile değiştirilir. HScroll ve VScroll özellikleri bir dikey ve yatay
kaydırma çubuğu görüntülenmesini sağlar.
Text field TAB tuşu ile aktifleştirildiğinde içindeki tüm metin seçilir ve vurgulanır. İmleç ise
metinin sağinda yer alır. Kullanıcı metin seçiliyken yazmaya başlarsa seçilmiş olan metin silinir.
Bu durumu önlemek için com.sun.star.awt.XTextComponent arabirimi üzerinden bu davranış ve
seçim statüsü aşağıdaki gibi değiştirebilir:
Dim sText As String
Dim oSelection As New com.sun.star.awt.Selection
REM get control
oTextField = oDialog.getControl("TextField1")
REM görüntülenen metni ayarla
sText = "Displayed Text"
oTextField.setText( sText )
REM seçimi ayarla
oSelection.Min = 0
oSelection.Max = Len( sText )
oTextField.setSelection( oSelection )
Text field kontrolü ile şifre girişleri de yapılabilir. EchoChar ( Parola karakterleri ) özelliği kullanıcı
giriş yaparken ekranda görüntülenecek karakterin değiştirilmesini sağlar. bu arada MaxTextLen
özelliği ile giriş yapılabilecek maksimum karakter sayısını da belirleyebilirsiniz.:
oTextFieldModel = oDialog.Model.TextField1
oTextFieldModel.EchoChar = Asc("*")
oTextFieldModel.MaxTextLen = 8
Kullanıcı metin kutusuna sayısal, tarih gibi herhangi veri girebilir. Bu değerler metin olarak
depolanır. Bu tip özel girdiler gerekiyorsa metin kutusu yerine date field, time field, numeric field,
currency field veya formatted field kontrol elemanlarını kullanın.
List Box Liste kutusu
List box kontrolü com.sun.star.awt.UnoControlListBox bir liste görüntüler böylece kullanıcı bir
veya daha fazla liste elemanı seçebilir. Şayet eleman sayısı liste kutusunun
görüntüleyebileceğinden fazla ise otomatik olarak kaydırma çubukları görüntülenir. Eğer
Dropdown (Açılır liste ) özelliği True ise elemanlar bir drop-down box'ta görüntülenir. Açılır
kutunun satır sayısı, LineCount özelliği ile belirlenir. Listedeki eleman sayısı StringItemList
özelliği ile kontrol edilir. Şayet MultiSelection özelliği True olarak atanmışsa tüm seçilmiş
elemanlar SelectedItems özelliği ile kontrol edilir ve birden fazla seçim yapılabilir.
com.sun.star.awt.XListBox arabirimi ile çalışmak kolay olabilir. AddItem metodu ile bir listede
istenilen yereeleman ilave edilir. Örneğin aşağıda listenin sonuna bir madde eklenmektedir:
Dim nCount As Integer
olist box = oDialog.getControl("list box1")
nCount = olist box.getItemCount()
olist box.addItem( "New Item", nCount )
Çoklu maddeler addItems metodu ile ilave edilir. Listeden bir madde silmek için removeItems
metodu kullanılır. Örneğin aşağıda listedeki ilk madde silinmektedir:
Dim nPos As Integer, nCount As Integer
nPos = 0
nCount = 1
olist box.removeItems( nPos, nCount )
Bir list box elemanı selectItemPos, selectItemsPos ve selectItem metotlarıyla önseçilmiş hale
getirilebilir. Örnek listede birinci madde seçilmektedir:
olist box.selectItemPos( 0, True )
Halihazırda seçilmiş olan madde getSelectedItem metoduyla elde edilir:
Dim sSelectedItem As String
sSelectedItem = olist box.getSelectedItem()
Combo Box Açılır kutu
Combo box kontrolü com.sun.star.awt.UnoControlComboBox kullanıcıya seçeneklerin listesini
gösterir. İlaveten kullanıcı listede olmayan seçenek girilebilmesi için bir text field içerir. Bir
Combo box ile kullanıcıya tavsiye edilen seçenekler ile birlikte başka bir giriş imkanı tanırken,
list box sadece seçeneklerden birinin seçimi için kullanılır.
Commo box'ın özellikleri ve işlevleri list box ile benzerdir. Combo box'da Dropdown özelliği True
olarak setlenerek açılır pencerede liste elemanları görüntülenebilir. StringItemList özelliği ile hali
hazırdaki listeye erişilebilir. Text field 'da görüntülenen metin Text özelliği ile kontrol edilir.
Örneğin eğer kullanıcı listeden bir madde seçerse seçilmiş olan madde metin kutusunda
görüntülenir ve Text özelliği kullanımı ile program tarafından anlaşılır:
Function GetSelectedItem( oComboBoxModel As Object ) As String
GetSelectedItem = oComboBoxModel.Text
End Function
Kullanıcı metin kutusuna bir yazı yazarken, otomatik kelime tamamlama özelliği
faydalıdır. Autocomplete özelliği True olarak ayarlanırsa bu işlev aktifleşir. Combo box liste
elemanlarına ulaşım için, com.sun.star.awt.XComboBox arabiriminin kullanılması tavsiye edilir:
Dim nCount As Integer
Dim sItems As Variant
REM get control
oComboBox = oDialog.getControl("ComboBox1")
REM Öncelikle listedeki eski maddeleri silelim
nCount = oComboBox.getItemCount()
oComboBox.removeItems( 0, nCount )
REM Yeni maddeleri listeye ekleyelim
sItems = Array( "Item1", "Item2", "Item3", "Item4", "Item5" )
oComboBox.addItems( sItems, 0 )
Horizontal/Vertical Scroll Bar Yatay/Dikey Kaydırma çubuğu
Eğer bir iletişimdeki görülebilir alan içerikten küçükse, scroll bar kontrolü
com.sun.star.awt.UnoControlScrollBar içerik içinde yatay ve/veya dikey gezinti imkanı sağlar. Ek
olarak kaydırma çubuğu kontrolü scroll bar içermeyen kontrol elemanlarına da kaydırma desteği
verilmesini sağlar.
Bir kaydırma çubuğunun yönü Orientation özelliği ile tariflenir, yatay veya dikey olabilir. Bir
kaydırma çubuğu kaydırma kutusuna sahiptir, böylece kullanıcı fare ile hızlı bir şekilde istediği
pozisyona ulaşabilir. Kaydırma kutusunun pozisyonu ScrollValue ( Kaydırma değeri ) özelliği
tarafından kontrol edilir. Bir yatay kaydırma çubuğunda en sol position minimum scroll value 0'a
karşılık gelir. Kaydırma çubuğunun en sağ pozisyonu ScrollValueMax ( Azami kaydırma değeri )
ile tanımlanır. Bir kaydırma çubuğu en sonundaki oklara da sahiptir. Böylece kaydırma değeri
artırılıp azaltılabilir. LineIncrement ( Küçük değişim ) özelliği vasıtasıyla oklara kliklemeyle
kaydırma değerinin ne kadar değişeceği belirlenir. Kaydırma çubuğuna kutu ile oklar arasındaki
bölgede tıklanırsa BlockIncrement ( Büyük değişim ) değerine göre kaydırma değeri artar veya
azalır. Kaydırma kutusu iletişim kontrolündeki görüntülenebilir bölgeyi temsil eder. VisibleSize (
Görünür boyut )özelliğiyle % kısım olarak iletişimin görüntülenebilir bölümü için değer verilebilir.
.
oScrollBarModel = oDialog.Model.ScrollBar1
oScrollBarModel.ScrollValueMax = 100
oScrollBarModel.BlockIncrement = 20
oScrollBarModel.LineIncrement = 5
oScrollBarModel.VisibleSize = 20
Scroll bar kontrolü kaydırma kutusunun kaydırma çubuğundaki hareketini izlemek için
adjustment olayını kullanır com.sun.star.awt.AdjustmentEvent Ayarlama olayları için bir olay
event handler ( olay yöneticisi de geliştirici görüntülenebilir içerik
pozisyonunu değiştirebilir. Bunun için ScrollValue özelliği kullanılır. Bitişikteki örnekte, Label
field dialog boyutunu aşmaktadır. Kullanıcı scroll bar'ı her tıklağında AdjustmentHandler()
makrosu çağrılmakta ve Label field pozisyonu değişmektedir.
(BasicAndDialogs/ToolkitControls/ScrollBar.xba)
Sub AdjustmentHandler()
Dim oLabelModel As Object
Dim oScrollBarModel As Object
Dim ScrollValue As Long, ScrollValueMax As Long
Dim VisibleSize As Long
Dim Factor As Double
Static bInit As Boolean
Static PositionX0 As Long
Static Offset As Long
REM Etiket alanımodeline ulaşalım
oLabelModel = oDialog.Model.Label1
REM Başlangıçtaki etiket alanının pozisyonunu ve ofsetini hesaplayarak hatırlayalım
If bInit = False Then
bInit = True
PositionX0 = oLabelModel.PositionX
OffSet = PositionX0 + oLabelModel.Width - (oDialog.Model.Width - Border)
End If
REM Kaydırma çubuğunun modelini ele alalım
oScrollBarModel = oDialog.Model.ScrollBar1
REM Şu anki scrool value'yi bulalım
ScrollValue = oScrollBarModel.ScrollValue
REM hesapladıktan sonra label kontrol için pozisyonu ayarlayalım
ScrollValueMax = oScrollBarModel.ScrollValueMax
VisibleSize = oScrollBarModel.VisibleSize
Factor = Offset / (ScrollValueMax - VisibleSize)
oLabelModel.PositionX = PositionX0 - Factor * ScrollValue
End Sub
Group Box Grup Kutusu
Group box kontrolü com.sun.star.awt.UnoControlGroupBox option button, check box gibi diğer
bileşenleri görsel olarak gruplamak için bir çerçeve yaratır. Diğer kontrol elemanları için
Container işlevlerine sahip değildir. Daha fazla detay için 11.5.2 Basic and Dialoglar - Dialoglar
ve Dialog kontrolleri - Dialog Kontrolleri - Option Button'a bakın
Group box Label özelliği ile ayarlanan, sınırları içine gömülmüş bir etiket içerir. Çoğu halde grup
kutusu pasif olarak kullanılır.
Progress Bar Süreç Çubuğu
Progress bar kontrolü com.sun.star.awt.UnoControlProgressBar kullanıcıya işlemin gelişimi
hakkında genişleyen yada daralan bir çubuk ile görünüm sunar. ProgressValueMin ve the
ProgressValueMax özellikleri ile minumum ve maksimum gelişim değerleri kontrol ve set edilir.
ProgressValueözelliği ile tamamlanma değeri kontrol edilir. Varsayılan olarak çubuğun rengi
mavidir, ama istenirse FillColor özelliği ile değiştirilebilir. Progres bar işlevi aşağıdaki örnekle
gösterilmiştir: (BasicAndDialogs/ToolkitControls/ProgressBar.xba)
Sub ProgressBarDemo()
Dim oProgressBar As Object, oProgressBarModel As Object
Dim oCancelButtonModel As Object
Dim oStartButtonModel As Object
Dim ProgressValue As Long
REM süreç çubuğu ayarları
Const ProgressValueMin = 0
Const ProgressValueMax = 40
Const ProgressStep = 4
REM Minum ve maksimum süreç değerinin ayarlanması
oProgressBarModel = oDialog.Model.ProgressBar1
oProgressBarModel.ProgressValueMin = ProgressValueMin
oProgressBarModel.ProgressValueMax = ProgressValueMax
REM Cancel ve Start düğmesininin etkisizleştirilmesi
oCancelButtonModel = oDialog.Model.CommandButton1
oCancelButtonModel.Enabled = False
oStartButtonModel = oDialog.Model.CommandButton2
oStartButtonModel.Enabled = False
REM progress bar görüntüle
oProgressBar = oDialog.getControl("ProgressBar1")
oProgressBar.setVisible( True )
REM her bir saniyede progress value'yi artır.
For ProgressValue = ProgressValueMin To ProgressValueMax Step ProgressStep
oProgressBarModel.ProgressValue = ProgressValue
Wait 1000
Next ProgressValue
REM progress bar'ı gizle
oProgressBar.setVisible( False )
REM cancel ve start düğmelerini etkinleştir
oCancelButtonModel.Enabled = True
oStartButtonModel.Enabled = True
End Sub
Horizontal/Vertical Line Yatay/Dikey Çizgi
Line kontrolü com.sun.star.awt.UnoControlFixedLine bir form üzerinde basit çizgiler yaratır.
Genelde formun görsel olarak ait bölümlere ayrılması için kullanılır. Orientation özelliği ile yatay
veya dikey olarak ayarlanabilir. Label özelliği ile çizgiye bir başlık metni atanabilir. Sadece yatay
çizgi üzerinde etiket görüntülenir.
Date Field Tarih alanı
Date field kontrolü com.sun.star.awt.UnoControlDateField metin kutusuna tarih girebilme ve
gösterebilme özelliği kazandırır. Alanda görüntülenen tarih, Date özelliği tarafından kontrol
edilir..Date değeri long tipli bir değişkendir. YYYYMMDD formatı ile kullanılmalıdır. Örneğin , 30
eylül 2002 aşağıdaki gibi ayarlanır:
oDateFieldModel = oDialog.Model.DateField1
oDateFieldModel.Date = 20020930
Şu anki tarih Date and CDateToIso fonksiyonları ile ayarlanır:
oDateFieldModel.Date = CDateToIso( Date() )
Minimum ve maksimum tarih DateMin ve the DateMaxözelliği ile alana girilebilecek tarih
sınırlandırılabilir.alanda görüntülenecek tarih formatı DateFormat ve DateShowCentury özelliği
ile ayarlanabilir. Fakat DateShowCentury kullanımı kısıtlanmıştır. Bazı formatlar sistem biçimine
bağlıdır. Kullanıcı tarafından yapılan girişler kontrol edilerek yanlış girişler otomatik engellenir.
Dropdown özelliği bir takvim üzerinden tarih girilmesini sağlar
Şu an için bu özellik devre dışıdır.
Time Field Zaman alanı
Time field kontrolü com.sun.star.awt.UnoControlDateField ile zaman girilir ve görüntülenir.
isplays and enters time values. Time Tözelliği ile saat ayarlanır ve getirilir . Time değeri
HHMMSShh formatında Long tipli değişkendir.Örneğin, 15:18:23 böyle ayarlanır:
oTimeFieldModel = oDialog.Model.TimeField1
oTimeFieldModel.Time = 15182300
minimum ve maksimum zaman değeri TimeMin ve TimeMax ( En az / en Fazla zaman ) özelliği
ile girilebilir.Görüntülenen zaman zaman formatına bağlıdır. TimeFormatözelliği ile görünüm
biçimi değiştirilebilir.
StrictFormat özelliği True yapılırsa zaman girişi kontrol edilebilir.
Kısa time format çalışmamaktadır.
Numeric Field Numaralı alan
Numeric field kontrolü com.sun.star.awt.UnoControlNumericField şayet kullanıcının limitlenmiş
olarak sayısal değer girmesi gerekiyorsa tercih edilmelidir. Sayısal değer Value özelliği ile
kontrol edilir ve double değişken tipine sahiptir. Minimum ve maximum değerler için ValueMin ve
the ValueMax ( En küçük/en büyük değer ) özelliği ile kullanıcı girişi sınırlanabilir.
DecimalAccuracy ( Ondalık hassasiyet ) özelliği ile virgülden sonraki basamak sayısı belirlenir.
Örneğin 6 sayısı virgülden sonra altı basamak olarak değerlendirilir. ShowThousandsSeparator
( Binler ayracı ) özelliği True ayarlanırsa sayı binler ayraçları ile görüntülenir. Numeric field bir
spin Button ( Döndürme düğmesi ) kontrolüne de sahiptir. Spin özelliğinin Enable yapılması ile
etkinleşir. Spin Button fare kullanımıyla görünen değerin ValueStep ( Artış/Azalış Değeri )
özelliğinde belirtilen sayı kadar artırılıp azaltılabilmesini sağlar.
oNumericFieldModel = oDialog.Model.NumericField1
oNumericFieldModel.Value = 25.40
oNumericFieldModel.DecimalAccuracy = 2
Currency Field Para birimi alanı
Currency field kontrolü com.sun.star.awt.UnoControlCurrencyField para birimi değerleri girmek
ve görüntülemek için kullanılır. Buna ilaveten bir para birimi simgesi de gösterilir.
CurrencySymbol ( Döviz sembolü ) özelliği ayarlanması ile gösterimi sağlanır. Şayet
PrependCurrencySymbol ( Önek sembolü ) True olarak ayarlanırsa para birimi sembolü değerin
başında görüntülenir.
oCurrencyFieldModel = oDialog.Model.CurrencyField1
oCurrencyFieldModel.Value = 500.00
oCurrencyFieldModel.CurrencySymbol = "€"
oCurrencyFieldModel.PrependCurrencySymbol = True
Formatted Field Biçimlendirilmiş alan
Formatted field kontrolü com.sun.star.awt.UnoControlFormattedField girilen ve gösterilen verinin
biçimlendirilmesi için kullanılır. FormatsSupplier ( Tam Biçim ) özelliği ve. FormatKey (
Biçimlendirme ) özelliği ayarlanmalıdır. Bu özelliklerin dialog özellik düzenleyici iletişimiyle
ayarlanması tavsiye edilir. Desteklenen sayı formatları number, percent, currency, date, time,
scientific, fraction and boolean ( sayı, yüzde,para birimi, tarih, saat, bilimsel, kesirli ve
mantıksal ) özelliklidir. Bu nedenle Formatted field kontrolü date field, time field, numeric field
veya currency field kontrolleri yerine kullanılabilir. NumberFormatsSupplier 6 Office
Development kısmında açıklanmıştır.
Pattern Field Desen alanı
Pattern field kontrolü com.sun.star.awt.UnoControlPatternField tanımlanmış olan maskeye göre
bir dizeyi görüntüler ve girilmesini sağlar. EditMask ( Maskeyi düzenle ) özelliği ile kullanıcın
girebileceği karakterler özel bir kod olarak tanımlanır. düzenleme maskesinin uzunluğu mümkün
olan girişleri tanımlar. Şayet düzenleme maskesine uygun olmaya bir giriş yapılırsa giriş
reddedilir. Örneğin, edit mask "NNLNNLLLLL" dizesi girilmişse L metin karakter olarak N 0..9
arası sayısal karakter maske sırasına göre girilebilir. OpenOffice.org online yardımında geçerli
dize sembolleri ile ilgili tam bir liste bulunur. LiteralMask ( Hazır maske )kontrol etkinleştiğinde
bulunması gereken dizeyi ayarlamak için kullanılır. Literal Mask'a örnek olarak, yukardaki
maskeye uyan "__.__.2002" dizesi girilebilir. Bu durumda kullanıcı sadece sadece 4 nümeric
değer girer.
oPatternFieldModel = oDialog.Model.PatternField1
oPatternFieldModel.EditMask
= "NNLNNLLLLL"
oPatternFieldModel.LiteralMask = "__.__.2002"
File Control Dosya Seçimi
File control com.sun.star.awt.UnoControlFileControl bir text field'ın bütün özelliklerine sahiptir.
Ek olarak ta bir komut düğmesi mevcuttur. Komut düğmesine tıklandığında Dosya seçimi
iletişimi görüntülenir. Text ( Metin )özelliği ile verilen ilk dizin yolu ile görüntülenir.
Dizin bir sistem yolu olarak verilmelidir.Bu anda dosya URL'si çalışmaz. Basic içinde
ConvertToURL()fonksiyonu ile sistem yollarını URL gösterimine çevirebilirsiniz.
oFileControl = oDialog.Model.FileControl1
oFileControl.Text = "D:\Programme\Office60"
File Control'da dosya aç iletişimi için dosya adları filitrelenemez Bir başka yol ise bir text field
ve komut düğmesi kullanımı ve düğmeye makro ataması şeklinde olabilir. File dialog
com.sun.star.ui.dialogs.FilePicker ara birimi ile düzenlenir. Bir örnek olarak aşağıdaki gibi dosya
mevcuttur. (BasicAndDialogs/ToolkitControls/FileDialog.xba)
Sub OpenFileDialog()
Dim oFilePicker As Object, oSimpleFileAccess As Object
Dim oSettings As Object, oPathSettings As Object
Dim oTextField As Object, oTextFieldModel As Object
Dim sFileURL As String
Dim sFiles As Variant
REM Dosya iletişimi
oFilePicker = CreateUnoService( "com.sun.star.ui.dialogs.FilePicker" )
REM Filitre ayarla
oFilePicker.AppendFilter( "All files (*.*)", "*.*" )
oFilePicker.AppendFilter( "StarOffice 6.0 Text Text Document", "*.sxw" )
oFilePicker.AppendFilter( "StarOffice 6.0 Spreadsheet", "*.sxc" )
oFilePicker.SetCurrentFilter( "All files (*.*)" )
REM Dosya yolu seçili değilse konfigurasyon dosyaların al
oTextFieldModel = oDialog.Model.TextField1
sFileURL = ConvertToURL( oTextFieldModel.Text )
If sFileURL = "" Then
oSettings = CreateUnoService( "com.sun.star.frame.Settings" )
oPathSettings = oSettings.getByName( "PathSettings" )
sFileURL = oPathSettings.getPropertyValue( "Work" )
End If
REM Görüntülenecek dizini ayarlayın
oSimpleFileAccess = CreateUnoService( "com.sun.star.ucb.SimpleFileAccess" )
If oSimpleFileAccess.exists( sFileURL ) And oSimpleFileAccess.isFolder( sFileURL ) Then
oFilePicker.setDisplayDirectory( sFileURL )
End If
REM Dosya iletişimini aç
If oFilePicker.execute() Then
sFiles = oFilePicker.getFiles()
sFileURL = sFiles(0)
If oSimpleFileAccess.exists( sFileURL ) Then
REM Text field içine dosya yolunu yerleştir
oTextField = oDialog.GetControl("TextField1")
oTextField.SetText( ConvertFromURL( sFileURL ) )
End If
End If
End Sub
11.6 Creating Dialogs at Runtime Çalışma anında form
yaratılması
OpenOffice.org Basic kullanıldığı zaman, diyalog düzenleyici form tasarımında kullanılan bir
araçtır. ek açıklama için 11.2 Basic and Dialogs - Basic IDE bölümüne bakınız. for additional
information. OpenOffice.org 2.0'den bu yana, Dialog düzenleyici ile hazırlanmış formlar
desteklenen scripting framework dilleri ile yazılmış makrolarla yüklenebilir.
com.sun.star.awt.XDialogProviderAPI arabirimi kullanılarak,(BeanShell, JavaScript, Java,
OpenOffice.org Basic) yüklenebilirler. Detaylar için 18.2 Scripting Framework - Scripting
Framework kullanımı bölümüne bakın.
İlaveten formları, Javaswing komponetlerine benzer şekilde makrolarla çalışma anında
yaratabilirsiniz.event listener ( Olay dinleyicileri ) uygun olan kontroller için çalışma anında
yazılır.
Illustration 11.28
Bu bölümdeki açıklanan Java örneğinde, Etiket alanı ve bir komut düğmesi olan, modal (
kontrolün diğer bileşenlere devredilemediği form tipi ) basit bir dialog yaratılmaktadır. Kullanıcı
düğmeyi klikledikçe etiket alanı güncellenerek düğmeye toplam kaç kez basıldığı
görüntülenmektedir.
Dialog Java içinde bir UNO komponenti olarak implement ( bir arabirimde metotları
tanımlanması ) edilmektedir. com.sun.star.examples.SampleDialog servisi olarak
oluşturulmaktadır. Java Component'leri ve UNO çekirdek arabirimleri implementation'u detayları
için 4.5.6 Writing UNO Components - Simple Component in Java - Storing the Service Manager
for Further Use. bölümüne bakın. Metot formu aşağıdaki şekilde oluşturmakta ve
uygulamaktadır.
/** method for creating a dialog at runtime
*/
private void createDialog() throws com.sun.star.uno.Exception {
// get the service manager from the component context
XMultiComponentFactory xMultiComponentFactory =
_xComponentContext.getServiceManager();
// Dialog modelini yaratıp özelliklerini ayarlayın
Object dialogModel = xMultiComponentFactory.createInstanceWithContext(
"com.sun.star.awt.UnoControlDialogModel", _xComponentContext);
XPropertySet xPSetDialog = (XPropertySet)UnoRuntime.queryInterface(
XPropertySet.class, dialogModel);
xPSetDialog.setPropertyValue("PositionX", new Integer(100));
xPSetDialog.setPropertyValue("PositionY", new Integer(100));
xPSetDialog.setPropertyValue("Width", new Integer(150));
xPSetDialog.setPropertyValue("Height", new Integer(100));
xPSetDialog.setPropertyValue("Title", new String("Runtime Dialog Demo"));
// Dialog modelinin servis yönetcisini getirin
XMultiServiceFactory xMultiServiceFactory =
(XMultiServiceFactory)UnoRuntime.queryInterface(
XMultiServiceFactory.class, dialogModel);
// button model'ini yaratıp özelliklerini ayarlayın
Object buttonModel = xMultiServiceFactory.createInstance(
"com.sun.star.awt.UnoControlButtonModel" );
XPropertySet xPSetButton = (XPropertySet)UnoRuntime.queryInterface(
XPropertySet.class, buttonModel);
xPSetButton.setPropertyValue("PositionX", new Integer(50));
xPSetButton.setPropertyValue("PositionY", new Integer(30));
xPSetButton.setPropertyValue("Width", new Integer(50));
xPSetButton.setPropertyValue("Height", new Integer(14));
xPSetButton.setPropertyValue("Name", _buttonName);
xPSetButton.setPropertyValue("TabIndex", new Short((short)0));
xPSetButton.setPropertyValue("Label", new String("Click Me"));
// label model and set the properties ( Etiketi yaratın ve özelliklerini ayarlayın )
Object labelModel = xMultiServiceFactory.createInstance(
"com.sun.star.awt.UnoControlFixedTextModel" );
XPropertySet xPSetLabel = ( XPropertySet )UnoRuntime.queryInterface(
XPropertySet.class, labelModel );
xPSetLabel.setPropertyValue("PositionX", new Integer(40));
xPSetLabel.setPropertyValue("PositionY", new Integer(60));
xPSetLabel.setPropertyValue("Width", new Integer(100));
xPSetLabel.setPropertyValue("Height", new Integer(14));
xPSetLabel.setPropertyValue("Name", _labelName);
xPSetLabel.setPropertyValue("TabIndex", new Short((short)1));
xPSetLabel.setPropertyValue("Label", _labelPrefix);
// insert the control models into the dialog model(Dialog modeline kontrol modellerini
yerleştirin )
XNameContainer xNameCont = (XNameContainer)UnoRuntime.queryInterface(
XNameContainer.class, dialogModel);
xNameCont.insertByName(_buttonName, buttonModel);
xNameCont.insertByName(_labelName, labelModel);
// create the dialog control and set the model ( Dialog modelini yaratın ve modeli ayarlayın )
Object dialog = xMultiComponentFactory.createInstanceWithContext(
"com.sun.star.awt.UnoControlDialog", _xComponentContext);
XControl xControl = (XControl)UnoRuntime.queryInterface(
XControl.class, dialog );
XControlModel xControlModel = (XControlModel)UnoRuntime.queryInterface(
XControlModel.class, dialogModel);
xControl.setModel(xControlModel);
// add an action listener to the button control ( Düğme kontrolü için hareket izleyici ekleyin )
XControlContainer xControlCont = (XControlContainer)UnoRuntime.queryInterface(
XControlContainer.class, dialog);
Object objectButton = xControlCont.getControl("Button1");
XButton xButton = (XButton)UnoRuntime.queryInterface(XButton.class, objectButton);
xButton.addActionListener(new ActionListenerImpl(xControlCont));
// create a peer ( Eşini yaratın )
Object toolkit = xMultiComponentFactory.createInstanceWithContext(
"com.sun.star.awt.Toolkit", _xComponentContext);
XToolkit xToolkit = (XToolkit)UnoRuntime.queryInterface(XToolkit.class, toolkit);
XWindow xWindow = (XWindow)UnoRuntime.queryInterface(XWindow.class, xControl);
xWindow.setVisible(false);
xControl.createPeer(xToolkit, null);
// execute the dialog ( Formu çalıştırın )
XDialog xDialog = (XDialog)UnoRuntime.queryInterface(XDialog.class, dialog);
xDialog.execute();
// dispose the dialog ( Form uygulamasını bitirin )
XComponent xComponent = (XComponent)UnoRuntime.queryInterface(XComponent.class,
dialog);
xComponent.dispose();
}
Önce com.sun.star.awt.UnoControlDialogModel servisine, servis manageri iletisi vasıtasıyla
dialog modeli yaratılmıştır. Sonra com.sun.star.beans.XPropertySet arabirimi kullanılarak
formun pazisyonu, boyutu ve başlığı ayarlanmıştır.Kritik uygulamalarda performans sağlanması
için com.sun.star.beans.XMultiPropertySet arabiriminin kullanılması tavsiye edilir. Bu noktada
Form modeli kontrol modeli içermeyen boş bir dialog'dur.
Dialog container'ındaki bütün kontrol modelleri; “PositionX”, “PositionY”, “Width”, “Height”,
“Name”, “TabIndex”, “Step” ve “Tag” genel özelliklerine sahiptir. Bu özellikler isteğe bağlıdır ve
sadece özel nesne servisi ile yaratılmışsa eklenebilirler. Bu yüzden bir dialog modeli
com.sun.star.lang.XMultiServiceFactory arabiriminide destekler. Şayet dialog modeli Sevice
Manager ile yaratılmışsa bu genel özellikler kaybolur.
Not Sadece ait olduğu Dialog modelinden yaratılmış olan Formlar “PositionX”,
“PositionY”, “Width”, “Height”, “Name”, “TabIndex”, “Step” ve “Tag” genel
özelliklerine sahiptir .
Komut düğmesi ve Etiket alanı için Kontrol modelleri yaratıldıktan ve genel özellikleri
ayarlandıktan sonra com.sun.star.container.XNameContainer arabirimi kullanılarak. Form
modeli tamamıyla tanımlanmıştır.
Formu ekranda görüntülemek için com.sun.star.awt.UnoControlDialog dialog kontrolü
yaratılmakta karşılık geleni ayarlanmaktadır. Düğme kontrolüne bir action listener eklenmiştir.
Listener aşağıda açıklanmaktadır. Form görüntülenmeden önce ekranda bir pencere veya peer
(eş form) yaratılmaktadır. Son olarak com.sun.star.awt.XDialog arabiriminin execute metodu
kullanılarak formumuz ekranda görüntülenmektedir.
Action listener implementation'u aşağıda gösterilmiştir.
/** action listener
*/
public class ActionListenerImpl implements com.sun.star.awt.XActionListener {
private int _nCounts = 0;
private XControlContainer _xControlCont;
public ActionListenerImpl(XControlContainer xControlCont) {
_xControlCont = xControlCont;
}
// XEventListener
public void disposing(EventObject eventObject) {
_xControlCont = null;
}
// XActionListener
public void actionPerformed(ActionEvent actionEvent) {
// increase click counter
_nCounts++;
// set label text
Object label = _xControlCont.getControl("Label1");
XFixedText xLabel = (XFixedText)UnoRuntime.queryInterface(XFixedText.class, label);
xLabel.setText(_labelPrefix + _nCounts);
}
}
Kullanıcı düğmeyi kliklediği her seferinde action listener çağrılmaktadır ve iç bir sayaç döngüsü
ile sayı artırılmaktadır. com.sun.star.awt.XActionListener arabirimi actionPerformed metodu ile
etiket alanı güncellenmektedir. İlaveten, com.sun.star.lang.XEventListener ana arabirimi
disposing metodu implement edilmektedir.
Bizim örnek component'imiz, com.sun.star.task.XJobExecutor arabiriminin trigger metodu ile
implement edilerek ofisle birlikte dialog'u çalıştırmaktadır:
public void trigger(String sEvent) {
if (sEvent.compareTo("execute") == 0) {
try {
createDialog();
}
catch (Exception e) {
throw new com.sun.star.lang.WrappedTargetRuntimeException(e.getMessage(), this, e);
}
}
}
Basit bir OpenOffice.org Basic makrosu örnek bileşenimizin yaratılıp uygulanmasını
sağlamaktadır..
Sub Main
Dim oJobExecutor
oJobExecutor = CreateUnoService("com.sun.star.examples.SampleDialog")
oJobExecutor.trigger("execute")
End Sub
OpenOffice.org, gelecek versiyonlarında yürütme anında yaratılan formların çalıştırılması için
metot desteği sunulacaktır.
11.7 Library File Structure Kütüphane dosyası yapısı
Bu bölüm kütüphanelerin nasıl saklandığını açıklar. Genel olarak tüm veriler XML formatında
saklanır. T<OfficePath>/share/dtd/officedocument hdizin yolunda bulunan DTD dosyalarında
dört farklı XML dosya biçimi tanımlanmıştır:
•
Kütüphane indeks dosyası içinde tanımlanmış olan bir Kütüphane Container'ı
nın spesifikasyonları libraries.dtd dosyası içinde verilmiştir. Bu dosyada
Kütüphane container'ı içindeki kütüphanelerin herbiri isimleri, dosya linki
olduğunu gösterir bir bayrak ve dosyaURL'si ve dosya bağlantısı olması halinde
bağlantının sadece oku statüsünü gösterir.
•
Kütüphane indeks dosyası içinde tanımlanmış olan bir Kütüphane dosyası
spesifikasyonları library.dtd. İçinde verilmiştir.. Bu dosya kütüphane ismini
sadece oku statüsünü gösteren ve şifre korumalı olduğunu gösteren bayrakları
tutar, ayrıca her bir kütüphane elemanının adını saklar .
•
Bir Basic kaynak kod modulü spesifikasyonları module.dtd'de tariflenen
dosyalarda tutulur hu dosya modül ismini program dilini ( Şu anda sadece
OpenOffice.org Basic desteklenmektedir ) ve kaynak kodunu içerir.
•
Bir Dialog spesifikasyonları dialog.dtd'de tariflenen dosyalarda tutulur. Bu
dosya formu tarifleyen bütün veriyi içerir. Bu format çok geniş olduğu için
burada açıklanmaası mümkün değildir.
İlaveten, şifre korumalı kütüphanelerde derlenmiş Basic kod binary biçim kullanılarak saklanır.
Şifre korumalı Basic kütüphanelerinde şifre Blowfish yöntemiyle verinin de
şifrelenmesi için kullanılır. Eğer şifreyi unutursanız karşılık gelen Basic kodu da
kaybedersiniz. Herhangi bir geri kazanım mümkün değildir.
Kütüphane tanımlama dosyalarının XML biçimini anlamanın yanında, hangi dosyaların nasıl
saklanacağını anlamak da gereklidir. Çünkü bu uygulama ve belge kütüphaneleri için farklıdır.
Uygulama kütüphaneleri direk olarak ofis sistem yolunda saklanırlar. Belge kütüphaneleri ise
belge paket dosyasında saklanır. Paket dosyaları içn bilgiyi 6.2.10 Office Development Common Application Features - Package File Formats. bölümünde bulabilirsiniz. takip eden
kısımda Kütüphane Container'ı ve kütüphane yapıları açıklanmıştır..
11.7.1 Application Library Container Uygulama Kütüphane deposu
OpenOffice.org kurulumunda Basic ve dialoglar için Container'lar <OfficePath>/user/basic
dizinine yerleştirilirler. Kütüphane container indeks dosyaları Basic için script.xlc Dialog için
dialog.xlc dosyalarıdır. "lc" son eki dosyanın Kütüphane container'ı olduğunu gösterir.
Aynı dizin kullanıcı tarafından yaratılmış kütüphaneleri de barındırır. İlk olarak Basic ve Dialoglar
için sadece Standard kütüphanesi mevcuttur. Dizin içindeki kütüphane yapısı devam eden
kısımda açıklanacaktır
user/basic dizini basic kütühaneleri için tek kurulum yeri değildir. Autopilot'ların çoğu basic ile
ilgili dizinlere yerleştirilmiştir. karşılı gelen kütüphaneler ise<OfficePath>/share/basic ryoluna
yerleşmiş Kütüphane Container index dosyalarında sadece oku statüsüyle bağlantı olarak
listelenmişlerdir..
Kullanıcı ve Autopilotlar tarafından yaratılan kütüphaneler arasındaki farkın algılanması
gereklidir. Autopilot kütüphaneleri bir çok kullanıcı tarafından paylaşılan dizinlere yerleştirilir. Bir
ağ kurulumunda, share dizini kullanıcıya özel kütüphaneler container'ları tarafından sahip
olunmaması için server üzerinde herhangi bir yere yerleştirilmiştir.
Dosya sisteminde kütüphane bir dizinle temsil edilir. Dizin adı kütüphane adı ile
aynıdır.Kütüphane için gerekli tüm dosyalar bu dizinde bulunur.
Basic kütüphaneleri kaynak kodları yetkisiz kişiler tarafından görülmemesi için şifre ile
korunabilirler. Dilog kütüphaneri şifre ile korunamazlar. 11.2.1 OpenOffice.org Basic and Dialogs
- OpenOffice.org Basic IDE - Managing Basic and Dialog Libraries. bölümünde OpenOffice.org
Basic Macro Düzenleyici iletişiminde incelenmiştir. Şifre koruması kütüphanenin dosya formatını
etkiler..
Libraries without Password Protection Şifre korumasız kütüphaneler
her bir kütüphane elemanı bir XML dosyası ile temsil edilir. eleman ismi ile dosya isminin
aynıdır. Basic modülleri için module.dtd dosyasında tanımlanmıştır buna göre dosya adı
uzantıları xba olur. dialoglar xdl basic modülleri için script.xlb indeks dosyası taratılır dialoglar
içinse dialog.xlb yaratılır.
Aşağıdaki örnekte Bir Standard uygulama Basic kütüphanesi Module1 ve Module2 dizin yapısı
görüntülenmektedir:
<DIR> Standard
|
|--script.xlb
|--Module1.xba
|--Module2.xba
Bir uygulama Standard kütüphanesi, Smalldialog ve BigDialog adlı dialogları içeren dizin yapısı
görünmektedir:
<DIR> Standard
|
|--dialog.xlb
|--SmallDialog.xba
|--BigDialog.xba
Dizin içinde Basic ve dialog kütüphanelerinin olması da mümkündür. Kütüphane düzenleme
bölümünde anlatıldığı gibi bu yolun tecih edilmesi yararlıdır. Yukardaki iki örnekte görülen
kütüphaneler aynı dizinde depolandığında bu iki kütüphane birbirini etki,lemez:
<DIR> Standard
|
|--dialog.xlb
|--script.xlb
|--Module1.xba
|--Module2.xba
|--SmallDialog.xba
|--BigDialog.xba
Dosya adları farklıdır hatta aynı adlara sahip olsalar bile uzantıları farklıdır.
Libraries with Password Protection Şifre korumalı kütüphaneler
Sadece Basic kütüphaneleri şifrelenebilir. Bu durum dosya formatını da etkiler. çünkü binary veri
XML formatında kaydedilir. Kaynak kodu Basic IDE'sinde görüntülenmese de okunabilir
olmalıdır. Her bir modül için derlenmiş Basic kodu şifrelenmiş kaynak koduyla birlikte olması da
gereklidir. Basic şifresi bilinmeyen kütüphanelerdeki kaynak koda erişip derleyemez. Derlenmiş
kod saklanmaksızın, kullanıcı şifreyi biliyorsa basic kütüphaneleri çalıştırabilir. Şifre
prosedüründe kaynak kodu ve şifreyi vermeksizin programın dağıtılması tüm amaçtır.
therefore this would not be feasible.
Aşağıdaki örnekte Module1, Module2, Module3 birimlerini içeren Library1 şifre korumalı
uygulama kütüphanesinin dizin yapısı görülmektedir:
<DIR> Library1
|
|--script.xlb
|--Module1.pba
|--Module2.pba
|--Module3.pba
Script.xlb şifre korumasız sistemden farklı değildir. Sadece şifre koruma bayrağı dosya içinde
ayarlanmıştır..
Her bir modül .pba dosya uzantılı olarak görünmektedir. Ofis belgelerinde olduğu gibi, bunlar
paket dosyalarıdır. ("pba" package basic anlamına gelir) Herhangi bir zip ekstrat programı ile iç
yapısı görülebilir. Ayrıntılı bilgi için 6.2.10 Office Development - Common Application Features Package File Formats)'bölümüne bakın.
Bir modül pacet dosyası aşağıdaki gibi görünür:
<PACKAGE> Module1.pba
|
|--<DIR> Meta-Inf
' İçerik burda görüntülenmez
|--code.bin
|--source.xml
Meta-Inf dizini her paket dosyasının bir parçasıdır ve bu belgede açıklanmayacaktır. code.bin
derlenmiş Basic kodunu bulundurur. source.xml ise şifre ile kodlanmış basic kodunu içerir .
11.7.2 Document Library Container Belge kütüphane deposu
Uygulama kütüphaneleri ofis dizini içinde direk olarak saklanıyorken, Belge kütüphaneleri belge
içinde saklanırlar. Ayrıntılı bilgi için 6.2.10 Office Development - Common Application Features Package File Formats bölümüne bakın.Belgelerde Basic ve Dialog kütüphane container'ları ayrı
olarak saklanırlar:
•
Basic kütüphane container hiyerarşisin kökü Basic olarak adlandırılmış dizinde
başlar. Bu dizin boş bir Standard kütüphanesinin olduğu Basic container'ı için
yeni bir belgede yaratılmaz.
•
Dialog kütüphane container hiyerarşisin kökü Dialogs olarak adlandırılmış
dizinde başlar. Bu dizin boş bir Standard kütüphanesinin olduğu Dialog
container'ı için yeni bir belgede yaratılmaz.
Kütüphaneler bu contrainer'larda alt dizinlerde saklanırlar. Yapı ise uygulama kütüphane
container'ları dizinlerine benzer, sadece "files" streaminde tüm akımlar XML akımlarıdır ve .xml
dosya uzantısı ile adlandırılmıştır. .xba, .xdl gibi özel uzantılar kullanılmaz. Farklı uzantılar
yerine isimlere eklenirle.. Belgelerde script-lc.xml (Basic kütüphane container indeks dosyası),
script-lb.xml (Basic kütüphane indeks dosyası), dialog-lc.xml (dialog kütüphane indeks dosyası)
ve dialog-lb.xml (dialog kütüphane index dosyası) şeklinde isimlendirilirler .
Örnek 1'de, üç modülü bulunan Bir Basic Standard kütüphanesi belgenin paket yapısı
görülmektedir:
<Package> ExampleDocument1
|
|--<DIR> Basic
| |
| |--<DIR> Standard
' Folder: Standard kütüphanesi
| | |
| | |--Module1.xml
' Stream: Basic modül dosyası
| | |--Module2.xml
' Stream: Basic modül dosyası
| | |--Module3.xml
' Stream: Basic modül dosyası
| | |--script-lb.xml
' Stream: Basic kütüphane indeks dosyası
| |
| |--script-lc.xml
' Stream: Basic kütüphane container indeks dosyası
|
| ' Bundan sonraki yapının kütüphanelerle ilgisi yoktur
|--<DIR> Meta-Inf
|--content.xml
|--settings.xml
|--styles.xml
Örnek 2, İki Basic ve 1 Dialog kütüphanesi bulunan belge yapısı:
<Package> ExampleDocument2
|
|--<DIR> Basic
| |
| |--<DIR> Standard
' Folder: Standard kütüphanesi
| | |
| | |--Module1.xml
' Stream: Basic modül dosyası
| | |--Module2.xml
' Stream: Basic modül dosyası
| | |--script-lb.xml
' Stream: Basic kütüphane indeks dosyası
| |
| |--<DIR> Library1
' Folder: "Library1" Kütüphanesini içerir
| | |
| | |--Module1.xml
' Stream: Basic modül dosyası
| | |--script-lb.xml
' Stream: Basic kütüphane indeks dosyası
| |
| |--script-lc.xml
' Stream: Basic kütüphane container indeks dosyası
|
|--<DIR> Dialogs
| |
| |--<DIR> Standard
' Folder: "Standard" Kütüphanesini içerir
| | |
| | |--Dialog1.xml
| | |--dialog-lb.xml
' Stream: Dialog dosyası
' Stream: Dialog kütüphane indeks dosyası
| |
| |--<DIR> Library1
' Folder: Contains library "Library1"
| | |
| | |--Dialog1.xml
' Stream: Dialog dosyası
| | |--Dialog2.xml
' Stream: Dialog dosyası
| | |--dialog-lb.xml
' Stream: Dialog kütüphane indeks dosyası
| |
| |--dialog-lc.xml
' Stream: Dialog kütüphane container indeks dosyası
|
| ' Bundan sonraki yapının kütüphanelerle ilgisi yoktur
|--<DIR> Meta-Inf
|--content.xml
|--settings.xml
|--styles.xml
Şayet bir belge Basic kütüphanesi şifre korumalıysa, dosya yapısı şifre korumasız bir yapıdan
fazla farklı değildir. Uygulama Basic kütüphanesi olması durumu ile aradaki Farklılıklar:
•
Şifre korumalı Basic kütüphanesi modül dosyaları aynı korumasız
kütüphanelerdeki gibi dosya adına sahiptir, fakat şifre ile karıştırılmışlardır.
•
Her bir modul için .bin uzantılı ek bir dosya bulunur. Code.bin dosyasına benzer
şekilde Uygulama Basic .pba dosyaları bulunur. Bu dosya derlenmiş Basic
kodunu içerir böylelikle kaynak koduna erişilmeksizin Basic kodu yürütülür .
Aşağıdaki örnekte bir belge için paket yapısı görülmektedir. Belge iki Basic modülüve bir Dialog
içermekte sadece Library1kütüphanesini modülleri bulunmaktadır:
<Package> ExampleDocument3
|
|--<DIR> Basic
| |
| |--<DIR> Standard
' Folder: "Standard" kütüphanesi içerir
| | |
| | |--script-lb.xml
' Stream: Basic kütüphane indeks dosyası
| |
| |--<DIR> Library1
' Folder: "Library1" kütüphanesi içerir
| | |
| | |--Module1.xml
' Stream: şifrelenmiş Basic modül kaynak dosyası
| | |--Module1.bin
' Stream: Basic modülü derlenmiş kod dosyası
| | |--Module2.xml
' Stream: Scrambled Basic module source file
| | |--Module2.bin
' Stream: Basic modülü derlenmiş kod dosyası
| | |--Module3.xml
' Stream: Scrambled Basic module source file
| | |--Module3.bin
' Stream: Basic modülü derlenmiş kod dosyası
| | |--script-lb.xml
' Stream: Basic kütüphane indeks dosyası
| |
| |--script-lc.xml
' Stream: Basic kütüphane container indeks dosyası
|
|--<DIR> Dialogs
| |
| |--<DIR> Standard
' Folder: "Standard" kütüphanesini bulundurur
| | |
| | |--dialog-lb.xml
' Stream: Dialog kütüphanesi indeks dosyası
| |
| |--<DIR> Library1
' Folder: "Library1"kütüphanesini bulundurur
| | |
| | |--dialog-lb.xml
' Stream: Dialog library index file
| |
| |--dialog-lc.xml
' Stream: Dialog kütüphanesi container indeks dosyssı
|
| ' Bundan sonraki yapının kütüphanelerle ilgisi yoktur
|--<DIR> Meta-Inf
|--content.xml
|--settings.xml
|--styles.xml
Bu örnekte belge paketi içinde Bir dialogs klasörünün de yaratılmış olduğu görülmektedir.
Standard ve Library1 kütüphaneleri dialog içermemesine rağmen Dialogs klasörü yaratılmıştır.
Çünkü belgenin tekrar yüklenmesi ile Dialog kütüphanesi Library1 kaybolacaktır. Açık olarak
saklanmasa bile sadece bir Standard boş kütüphanesinin var olduğu kabul edilmiştir.
11.8 Library Deployment Kütüphane Dağıtımı
OpenOffice.org Basic kütüphanelerinin var olan bir kuruluma eklenmesi için basit bir düşünceye
sahiptir. Kütüphanelerin eklenmesi aşağıdaki adımlarla gerçekleştirilir:
•
Kütüphanelerinizi paketleyin.
•
Paketi özel bir paket dizinine yerleştirin. Bir network kurulumunda paylaşımlı bir
dizin vardır ve kullanıcı paketleri için de bir dizin mevcuttur. İleride
açıklanmıştır.
•
Bütün OpenOffice.org bileşenlerini kapatın, windowsta dos penceresi Linux'ta
konsol ekranını açın, <OfficePath>/program dizinine geçerek pkgchk program
aracını çalıştırın. Pkgchk aracı StarOffice Development Kit (SDK)'nın bir
parçasıdır. Aşağıdaki komutu verin my_package.zip paketlenmiş
kütüphanemizdir
[<OfficePath>/program] $ pkgchk my_package.zip
•
Araç paket dizinlerindeki paketleri analiz eder ve OpenOffice.org tarafından
kullanılan kullanıcı tanımlı uzantıları eşleştirir. İlaveten komut satırında paket
dizinine kopyalanacak paketleri adlarıylada bildirebilirsiniz..
OpenOffice.org kurulumundan paketleri silmek için uygulanacak karşı adımlar da gereklidir:
•
Paketi paket dizininden silin.
•
OpenOffice.org'ı kapatıp pkgchk programını çalıştırın.
Pkgchk programını '--help' veya '-h' parametreleri ile çalıştırırsanız tüm seçenekler hakkında
detaylı bilgiye ulaşabilirsiniz.
Pkgchk dağıtım aracını OpenOffice.org çalışıyorken kullanımında dikkatli olun.
Sıradan kullanıcılar için, bu durumda pkgchk tarafından yürütülen proses
başarısızlıkla sonuçlanır, shared paylaşımlı network kurulmuşsa '--shared' veya
'-s' seçenekleri de tanınmaz. Eğer network üzerinde herhangi bir kullanıcı ofis
süreci başlatırsa veri tutarsızlıkları oluşabilir ve OpenOffice.org süreci çökebilir.
Package Structure Paket yapısı
Bir UNO paketi Basic kütüphaneleri veya UNO bileşenleri veya Tip kütüphaneleri içeren
ziplenmiş bir dosyadır. P kgchk aracı paket dizininde bulunan bütün paketleri, cache dizine, zip
dosyası dizin yapılarını koruyarak açar.
Geçici dizin hazır olduktan sonra, pkgchk geçici dizin üzernden sürekli geçer. Dosya adı
uzantılarına bağlı olarak dosyaları tespit eder gerekli olan lisyeye alma işlerini gerçekleştirir.
Bilinmeyen dosya tipleri ihmal edilir.
Basic kütüphaneleri
Pkgchk aracı bsaic kütühane dosyalarını (.xlb) Basic kütüphane container dosyalarına (.xlc)
ekleyerek bağlar. Ki bu dosyalar aşağıdaki dizinlerde bulunur:
Kütüphane
dosyası
Kullanıcı kurulumu
Shared Paylaşımlı kurulum
script.xlb
<OfficePath>/user/basic/script.xlc
<OfficePath>/share/basic/script.xlc
dialog.xlb
<OfficePath>/user/basic/dialog.xlc
<OfficePath>/share/basic/dialog.xlc
Bir network kurulumunda share/basic/*.xlc dosyaları yeni kütüphaneler bütün kullanıcılar
arasında paylaşılıcaksa pkgchk -s (--shared) seçeneği kullanılmasıyla yaratılır.
Basic kütüphanesinin adı dizin adı tarafından belirlenir. Onun için UNO Basic paketi içinde
klasörler ve ana klasörlerin tam bir görünümünde yaratılmalıdır. Örneğin, MyLib adlı bir
kütüphaneniz varsa buna karşılık gelen bir MyLib klasörünüzde geliştirme ortamınız içinde
olmalıdır. Bu klasör tam olarak UNO paketi içine yerleştirilmeli ve zip dosyanız aşağıdakine
benzer şekilde görülmelidir:
my_package.zip:
MyLib/
script.xlb
dialog.xlb
Module1.xba
Dialog1.xba
Diğer paket bileşenleri
Pkgchk otomatik olarak paylaşımlı kütüphaneleri kütüğe alır, JAVA arşivleri ve Type ( Tip )
kütüphaneleri bir UNO paketi içinde bulunabilir. Ayrıntılar için 4.9.1 Writing UNO Components Deployment Options for Components - UNO Package Installation bölümüne bakın.
Autopilot Sihirbaz .xlb kütüphaneleri user/basic/*.xlc dosyalarında kütüğe alınırlar,
fakat share/basic. dizinine yerleştirilirler. Bu Network kurulumlarında bazı
Autopilotları silmeyi ya da etkisiz kılmayı bazı kullanıcılar için mümkün kılar . This
is impossible for libraries deployed with the pkgchk tool and libraries deployed
with the share option are always shared among all users.
Path Settings Dizin ayarları
Paket dizinleri varsayılan oalrak uno-packages olarak isimlendirilir. burada bir shared kurulum
için <OfficePath>/share ve diğeri ise tek kullanıcı için <OfficePath>/user dizini kurulur. Uno
paketleri dizin yapısına karşılık gelen cache dizinleri otomatik olarak yaratılır. OpenOffice.org
<OfficePath>/program dizinindekiuno.ini ( Linux için uno.rc) dosyasındaki bu yollara bakabilmek
için ayarlanmalıdır . Pkgchk çalıştırıldığında, paket yolları için bu dosyaya bakar. Şayet
yoklarsa, varsayılan olarak uno(.ini|rc) dosyasına bu satırlar eklenir:
[Bootstrap]
UNO_SHARED_PACKAGES=${$SYSBINDIR/bootstrap.ini::BaseInstallation}/share/uno_packa
ges
UNO_SHARED_PACKAGES_CACHE=$UNO_SHARED_PACKAGES/cache
UNO_USER_PACKAGES=${$SYSBINDIR/bootstrap.ini::UserInstallation}/user/uno_packages
UNO_USER_PACKAGES_CACHE=$UNO_USER_PACKAGES/cache
Paylaşımlı paketler ve cache dizini varsayılan ayarlar bu şekildedir.
Bir network kurulumunda, dosya server üzerinden genel bir dizinde başlar. Yönetici bütün
kullanıcılar için <OfficePath>/share/uno_packages dizinine koyar.. Eğer bir kullanıcı paketleri
yerel olarak kurmak isterse, sadece bir kurulum etkilenir, kullanıcı paketleri
<OfficePath>/user/uno_packages dizinine kurmalıdır.
Pkgchk bir shared ve kullanıcı kurulumunda farklı çalıştırılmalıdır. Paylaşımlı paketler için
pkgchk -s (-shared) seçeneğiyle çalıştırılmalıdır bu durumda pkgchk sadece shared paketleri
işler. Pkgchk seçeneksiz olarak çalıştırılırsa sadece kullanıcı paketleri register ( Döküme alma )
edilir.
Additional Options Ek seçenekler
Varsayılan olarak araç bütün aksiyonları <cache-dir>/log.txt dosyasına işler. Bu dosyayı veya
dizin yolunu -l (–log) <dosya adı> seçeneğiyle değiştirebilirsiniz. -v (–verbose) seçeneği çıktıyı
log file yazarken aynı anda stdout ( normal olarak ekran) da da gösterir.
Araç hataları tam olarak irdelemez. Bir paket açılamamış veya shared kütüphane register
edilememiş olsa bile devam eder. Hataları log dosyasına işler ve çalışmasına devam eder.
Şayet aracın her bir hatada durmasını istiyorsanız pkgchk'i –strict_error seçeneği ile çalıştırınız.
Cache ile ilgili devamlılık sorunları varsa ve sıfırdan tekrar başlanmasını istiyorsanız., -r (–
renewal) seçeneğiyle programı çalıştırın.
Çeviren: Ramazan DEMİRCİOĞLU

Benzer belgeler