Director MX 2004 ile Not Defteri Uygulaması
Murat Çorlu Tarih: 7/11/2005 Yorum: 0 adet
Okunma : 359 Tutanlar: Bu yazıyı 0 kişi tuttu.
Kullanıcılarına birşeyler üretme şansı verdiğiniz her uygulamanızda üretilen şeyin kaydedilebilmesi adeta bir esas olmuştur. Zira kaydedilemeyen uğraşlar kullanıcıyı uygulamadan soğutacaktır. En basitinden bir Not tutma aracı yaptığımızda kullanıcıya "Notunu burada yaz, sonra yazdığını not defterine kopyala, orada kaydet" gibi bir çözüm üretmekden bir programcı olarak utanç duymalıyız.
Tamam, kullanıcımızın uğraşını bir dosyaya kaydettik. Ama bir de şu kaydettiğimiz dosyayı çift tıklayarak uygulamamızda açtırabilsek hiç de fena olmazdı. Gelin kullanıcılarımızı bu dertten de kurtaracak bir çözüm üretelim…
Ne Lazım?
Bu çalışmada Director MX 2004 ve registry düzenlemek için BuddyAPI Xtra kullanacağız. Bu Xtra 2 fonksiyon kullanımına kadar ücretsiz. http://www.mods.com.au adresinden temin edebilirsiniz.
Önce Birkaç Teorik Bilgi
Windows’ta exe ve com uzantılı dosyalar hariç tüm dosyalar bir exe veya com uzantılı dosyayla ilişkilendirilerek çalışırlar. Örneğin doc uzantılı Word dosyalarımız, Word.exe uygulaması sayesinde çalışır. Biz günlüğüm.doc adlı bir Word dokümanımıza çift tıkladığımızda sistem word.exe uygulamasına çift tıkladığımız dokümanın tam yolunu göndererek çalıştırır. Yani çalıştırılacak dosya şöyle yazılmış olur: Word.exe d:\Belgelerim\gunlüğüm.doc Çalıştırılacak uygulama dosyasının adından sonraki bölüm (burada d:\Belgelerim\gunlüğüm.doc) komut satırı (commandline) olarak geçer. Word uygulaması çalıştığında komut satırını kontrol eder ve bir şey gönderilmişse onu çözümleyip dosyayı açar. Eğer biz de Director ile yaptığımız projektöre gönderilen bir komut satırı verisini okursak biz de bu yöntemi kullanabiliriz.
Ama bir dakika! Daha önce aklımıza takılacak bir sorun var; Windows doc uzantılı bir dosyaya çift tıklandığında Word uygulamasının açılacağını nereden biliyor? Bu bilgiler Windows’ta registry editor’de tutulur. Registry Editor Windows’un adeta kalbi gibidir. Registry konusuna çok detaylı girmeyeceğim, zira hem konumuz değil hem de sadece bu konudan onlarca ders çıkar. İşimizle ilgili bölümüne bakacak olursak, bütün dosya ilişkilendirmeleri Registry’de HKEYCLASSESROOT bölümünde tutulur. İsterseniz Başlat -> Çalıştır ‘a basıp çıkan pencereye regedit yazarak Registry Editor’ü inceleyebilir, HKEYCLASSESROOT’daki ilişkilendirmeye göz gezdirebilirsiniz. Ama hiçbirşeyi değiştirmemeniz konusunda sizi uyarıyorum.
Az Laf, Çok İş. İcraata Başlayalım
Amacımız basit bir not tutma aracı yapmak olsun. Boş bir Director uygulaması açalım. Ve ilk sprite’ımıza adı "MetinKutusu" olan bir field member’ı koyalım. Kutunun altına yazılarımızı kaydetmek için bir Kaydet butonu, son karenin FrameScript’ine de filmimizi orada bekletecek olan aşağıdaki kodu yazalım:
on exitFrame me
go the frame
end


Öncelikle Kaydet düğmesinin kodunu oluşturalım. FileIO Xtra’sı (Director’un mevcut xtralarındandır) ile MetinKutusu’ndaki metni bir dosyaya kaydedecek kodumuz şöyle olacaktır:
on mouseUp me
str = member("MetinKutusu").text
fio = new(xtra "fileIO")
fio.setFilterMask("Bizim Not Defteri,*.bnd")
fn = fio.displaySave("Metni Kaydet...","not.bnd")
if fn<>"" then
fio.createFile(fn)
fio.openFile(fn, 2)
fio.writeString(str)
fio.closeFile()
fio = 0
end if
end
Kodumuzu satır satır şu şekilde okuyabiliriz:
- Bana tıklandığında… (Aslında mouse’un sol düğmesi benim üzerimdeyken basılıp bırakıldığında…)
- MetinKutusu adlı elemanımızın içindeki metni str adlı değişkenimize ata
- fio değişkenimizi bir FileIO nesnesi yap.
- Bu satırda Kaydet penceresindeki varsayılan dosya formatını belirliyoruz. Ben bnd diye bir dosya uzantısı uydurdum. İstediğiniz uzantıyı Dosya Tanımı, *.uzantı şeklinde yazabilirsiniz.
- Kaydet penceresini göster. Sonucunu fn değişkenine ata. Bu pencereden ya kaydedilecek dosyanın yeri ve adı ya da boş bir metin gelir. Boş gelmesi İptale basıldığı manasına gelir.
- Eğer İptal’e basılmamışsa…
- Pencerede verilen konum ve isimdeki dosyayı oluştur.
- Aynı dosyayı aç.
- Dosya içine str değişkenimizdeki metni yaz.
- fio nesnesini kapat.
- fio değişkenini nesne olmaktan çıkar.
Filmimizi çalıştırıp istediğimiz metni bnd uzantılı dosyalar olarak kaydedebiliriz. İlk aşama tamam, ancak Windows bizim bnd uzantımızı tanımadı doğal olarak. Dosyamız da aşağıdaki gibi görünüyor:

Şimdi bnd uzantısını projemizle ilişkilendirecek kodu yazalım. Bir Movie Scipt oluşturup içine aşağıdaki kodu yazalım:
on prepareMovie()
EditWindowsRegistry()
end prepareMovie
on EditWindowsRegistry()
UygulamaYolu = the applicationPath & the applicationName & " %1"
Yaz = baWriteRegString(".bnd", "", "BizimNotDefteri", "HKEY_CLASSES_ROOT")
Yaz = baWriteRegString("BizimNotDefterishellopencommand", "",
UygulamaYolu, "HKEY_CLASSES_ROOT")
end EditWindowsRegistry
Burada prepareMovie olayı yani filmin çalışmaya hazırlandığı an ve EditWindowsRegistry fonksiyonu var. Film çalışmaya hazırlanırken ilişkilendirmeyi yapmak için EditWindowsRegistry fonksiyonunu çalıştırıyoruz. Bu fonksiyonun kodunu şu şekilde okuyabiliriz:
- UygulamaYolu değişkenine uygulamamızın bulunduğu klasör – Uygulamamızın adı ve " %1" metnini atıyoruz. Burada %1 Windows’un buraya çift tıklanan dosyanın yolu ve adını yazması için verilen bir komut.
- BuddyApi Xtra’sının WriteReString fonksiyonu sayesinde, Registry’de "HKEYCLASSESROOT" bölümüne bnd uzantımız için BizimNotDefteri adlı bir dosya formatı oluşturuyoruz.
- Yine WriteReString fonksiyonu sayesinde, BizimNotDefteri formatımızın aç komutuna UygulamaYolu değişkenimizdeki içeriği veriyoruz.
Uygulamamızı Projektör yapıp çalıştırırsanız, bnd uzantılı dosyalarımızın artık projektörümüzün ikonuyla göründüğünü ve çift tıklandığında uygulamamızın çalıştığını görürsünüz. Tabi çift tıklandığında komut satırındaki bilgiyi okuyan bir kod yazmadığımız için sadece uygulama çalışıyor şimdilik. Hadi sizi sıkmayayım da şu kodu da yazıp meseleyi mutlu sona erdirelim. Bu kodu da bir Movie Script olarak yazacağız. Yeni bir Movie Script oluşturarak içine aşağıdaki kodu yazınız:
on startMovie me
if length(the commandLine) > 0 then
fio = new(xtra "fileio")
openFile(fio, the commandLine, 1)
oku = readFile(fio)
put oku into field "MetinKutusu"
closeFile(fio)
fio = 0
end if
end
Kodumuzu satır satır okuyalım:
- Filmimiz başladığında…
- Eğer komut satırının uzunluğu 0 karakterden fazlaysa. Yani komut satırında bir değer varsa, yani bir dosya çift tıklanarak çalışmışsak… Komut satırındaki metni gördüğünüz gibi the commandLine ile alıyoruz.
- Dosyayı aç.
- Dosyayı oku ve içeriğini oku değişkenine ata.
- oku değişkeninin içeriğini MetinKutusu field elemanının içine yaz.
- Dosya bağlantısını kapat.
- fio değişkenini nesne olmaktan çıkar.
Bitti Mi, Bitmedi
Sanırım mantığı çözdük. Aynı mantıkla uygulamalarımız tarafından oluşturulan dosyalarımıza güzel özellikler ekleyebiliriz. Şimdi dersin en önemli kısmındayız; "Ben bu bilgiyi işlerimde nasıl kullanırım?" sorusunun cevabını bulma aşaması…
Herkese kolay gelsin.
Kaynak Dosyaları:
Uygulama Kaynak Dosyası (.rar, 8 Kb)
Yazar Hakkında http://www.muratcorlu.com
İçeriğe kayıtlı yorum bulunmuyor. İlk yorumu siz buradan ekleyebilirsiniz.
Ders
İlişkili ders bulunamadı.
MMIstanbul Adobe UG
ColdFusion, Flex, AIR, Flash, PDF, Dreamweaver, Fireworks, Photoshop, Illustrator, iNdesign, Premiere, Soundbooth, Lightroom, InCopy, JRun, LiveCycle, Acrobat, AfterEffects, Resmi Adobe Kullanıcı Grubu.
Etkinlikler
Fuar
CeBIT 2008 Bilişim Eurasia 7 - 12 Ekim 2008' de
CeBIT 2008 Bilişim Eurasia 7 - 12 Ekim 2008' de
CeBIT Bilişim Eurasia bu yıl 7 – 12 Ekim tarihlerinde düzenleniyor
Adını dünyanın en büyük on fuarı arasına yazdırarak, İstanbul’u Avrasy...
Kategori: Fuar
Kimler Burada? 
Son 1 dakika içinde MMIstanbul' da 305 (2 kayıtlı, 303 ziyaretçi) kullanıcı varmış. Login durumda olanlar aşağıda:
MMIstanbul Blog'undan
Neler Yapılabilir?
Yeni bir portal, 30 civarında online / offline etkinlik, seminer vb rağmen MMIstanbul sanıyoruz ki halen hakettiği ilgiyi göremedi. " ...
500 Hatası Hakkında!
Reklam, MMIstanbul ve Yeni Projeler (Durumumuz Bu Tarzında)
Ne Nedir Kampanyası Başlıyor!
Çok Merak Edenler için; MMIstanbul Geliştirme Ekibi ve Çalışma Ortamımız




