[ Previous document | Content Table | Next document ]

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.

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.

Screenshot showing the Macro dialogIllustration 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

Screenshot showing the Basic source editor windowIllustration 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.

Screenshot showing the Macro dialog containing a docment macroIllustration 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.

Tip graphics marks a hint section in the text

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 

Breakpoint icon

Programın debug edilmesi için imleci oDoc = ThisComponent satırına getirin ve makro çubuğunda Breakpoint ikonunu ( Kesme noktası ) tıklayın.

Run icon

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 icon

Single Step ( İçine bas) ikonu ile program adımlama modu ile yürütülür.

Macros icon

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:

Screenshot showing a macro in the source editor windowIllustration 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:

Screenshot of the Customize Toolbars dialogIllustration 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:

Screenshot of the Basic GUI editorIllustration 11.6
Controls icon

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. 

File Selection

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.

Properties icon

Ö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.

Button icon

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.

Label icon

Etiket aracını kullanarak bir etiket ekleyin.. "Select Graphics File" gibi.

Şimdi form aşağıdaki örnekteki gibi görünür: 

Screenshot of a custom dialogIllustration 11.7
Activate Test Mode icon

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.

Tip graphics marks a hint section in the text

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

Screenshot showing the Assign Macro dialogIllustration 11.8

Finish  düğmesi içinde aynı yöntem kullanılarak FinishGraphicsDialog yordamı ile ilişkilendirin.

Run icon

 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.

Screenshot of the Insert Graphic WizardIllustration 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.. 

Screenshot of the Macro dialog with a second standard mouleIllustration 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.  

Note graphics marks a special text section

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ı  

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:

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.

Screenshot showing the Macro Organizer dialogIllustration 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: 

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.

Screenshot showing the Macro Organizer dialog with document macrosIllustration 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: 

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.

Screenshot of the Libraries tab page of the Macro Organizer dialogIllustration 11.13
Screenshot of the Libraries tab page showing the Application/Document selectionIllustration 11.14

Kütüphaneler aşağıdaki mantıkla listelenir: 

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: 

Screenshot showing the Change Password dialogIllustration 11.15
Screenshot showing the Append Libraries dialogIllustration 11.16
Screenshot showing the Append Libraries dialog with selected librariesIllustration 11.17

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

Screenshot showing the Basic IDE windowIllustration 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:

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. 

Screenshot shwoing the IDE window in debug modeIllustration 11.19: Basic Editor and Debugger

Aşağıdaki listede Makro araç çubuğu işlevleri açıklanmıştır. 

Compile icon

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 icon

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 icon

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 icon

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 icon

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 icon

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 icon

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 icon

Add watch İzleyici açık/kapalı   : Basic editorde İmlecin üzerinde olduğu tanımlayıcıyı watch penceresine ekler (Kısayol F7.

Object catalog icon

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 icon

Macros Makro SeçOpenOffice.org Basic Makrolar İletişim kutusu'nu açar

Modules icon

Modules Makro Seç: Opens the OpenOffice.org Basic Makro Düzenleyici dialoğunu açar.

Find Parentheses icon

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 icon

Controls Denetim Ekle : Dialog düzenleme araçlarını açar. Basic düzenleme modunda pasiftir.

Insert Source File icon

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 icon

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.

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. 

Screenshot showing the Dialog editorIllustration 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 icon

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.

Activate Test Mode icon

Activate Test Mode Test Kip Açık/kapalı düğmesi form ve kontrollerini test moduna alır. Bu 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 icon

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.

 

Screenshot showing the Properties dialog of a Command buttonIllustration 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:

Screenshot of the Events tab page of the the Properties dialogIllustration 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.

Screenshot of the Assign Macros dialogIllustration 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.

Screenshot showing the Properties dialog with multiselectionIllustration 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:

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

Screenshot of the Configuration dialogIllustration 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 :

Sonraki resimde Özelleştir diyalogunun Olaylar sekmesi görünmektedir:

 

Screenshot showing the Configuration dialogs Event tab pageIllustration 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: 

        e = 2.718

        Print e                        ' displays "2.718"

        Print "e =" ; e                ' displays "e = 2.718"

        Print "e =" , e                ' displays "e =     2.718"

        ' Ü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&

        ' "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:

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:

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: 

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: 

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 ö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.: 

 Calc belgesi bunları destekler: 

Sunum ve Çizim belgeleri bunları destekler: 

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: 

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

Kütüphane elemanları

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.

Sample module structureIllustration 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

Note graphics marks a special text section

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.

Note graphics marks a special text section

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:

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 graphics marks a special text section

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.

Note graphics marks a special text section

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. LineIncrementKüçü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 BlockIncrementBü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. 

Screenshot showing an example dialogIllustration 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.

Note graphics marks a special text section

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:

İlaveten, şifre korumalı kütüphanelerde derlenmiş Basic kod binary biçim kullanılarak saklanır.

Pay attention to the following important text section

Ş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:

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                ' Stream: Dialog dosyası

    |  |  |--dialog-lb.xml        ' 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: 

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: 

[<OfficePath>/program] $ pkgchk my_package.zip 

OpenOffice.org kurulumundan paketleri silmek için uygulanacak karşı adımlar da gereklidir: 

Pkgchk programını '--help' veya '-h' parametreleri ile çalıştırırsanız tüm seçenekler hakkında detaylı bilgiye ulaşabilirsiniz.

Pay attention to the following important text section

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.

Note graphics marks a special text section

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_packages
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.

[ Previous document | Content Table | Next document ]