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