BilgiTeknoloji.net    
b i l g i   t e k n o l o j i   y a z ı l ı m

Ana Sayfa

Marjinal XML Access Pratik Uygulamalar Projeler Ekonometri Dilimiz Çetrefil İletişim
 

Uygulama Dosyalarında Kaynak (Resource) Bölgeleri

Çok sürümlü uygulamalarda her sürüm için program dosyalarını ayrı ayrı değiştirmek yerine, farklı kaynak dosyaları oluşturup bunları program içinde kullanmak yararlıdır. Resim, simge, diyalog kutusu, menü gibi bir çok öğeyi içinde barındırabilen kaynak dosyaları program dosyalarına bağlandıktan sonra program kodlarında değişiklik yapmaya gerek kalmadan kaynak dosyalarını değiştirmek yeterli olur.

Kaynak dosyaları derleme aşamasında uygulama dosyalarına gömülür. Bunlar EXE veya DLL dosyaları olabilir. Internet Explorer bu dosyalardaki kaynak öğelerini RES protokolünü kullanarak gösterme yeteneğine sahip.

RES dışında ABOUT, VBScript, Javascript gibi protokollerle Internet Explorer'ın başka neler yapabildiğini yazının devamında bulacaksınız.

  • Uygulama Dosyalarında Kaynaklar
  • Kendi Uygulamanızda Kaynak Bölgelerini Kullanın
  • VB ve Delphi'de Kaynak (resource) Kullanımı
  • Kaynak Bölgelerini Internet Explorer'da Görüntülemek
  • Internet Explorer'da RES ve ABOUT protokolü


UYGULAMA DOSYALARINDA KAYNAKLAR

Windows uygulama dosyaları derlenmiş kodlar dışında program içinde kullanılacak birçok bileşeni barındırırlar. Örneğin program dosyalarının ikonu, hakkında kutusunda kullanılan bilgiler ve resimler, fare işaretçileri, genel ileti metinleri gibi öğeler çoğunlukla dosyanın içinde özel bir bölgede tutulur. Bu bölge kodların dışında yer alan bir kaynak (RESOURCE) bölgesidir.

Kaynak bölgelerde birçok bileşen bulunabilir. Menü kısayol tuşları (Accelerator), resimler, fare işaretçileri, diyalog kutuları, yazıtipleri, simgeler, menüler, metin listeleri, uygulama sürüm bilgileri kaynaklar bölgesinde tutulabilir. Bunun dışında herhangi bir belge ya da dosya da kaynak bölgesinde yer alabilir.

Kaynak bölgeleri uygulamaların geliştirilme süreçlerinde çok faydalı olabilmektedir. Birkaç dilde dağıtılan bir uygulama için kodlar arasında iletileri arayıp tercüme etmek, ekrandaki menülerdeki yazıları, proramdaki her değişiklikten sonra değiştirmekle zaman harcamak gerçekten yorucudur.

Bir uygulamanın farklı dildeki sürümler için farklı kaynak dosyaları hazırlandığında kodlar ve formlar arasında dolaşmadan uygulamanın derlenmesi mümkün olur. Zira değişken bölgeler kodlar arasından ayrıldığı için kullanıcı arayüzünde sonradan değişiklik yapmak kolaylaşır.

Programcılar Windows'taki hesap makinesini geliştirdikten sonra mütercimler gerekli metinleri onlarca dile çevirip kaynak düzenleyici programlarla kaynak dosyası oluşturabilirler. Bu, res ya da rc uzantılı bir dosya olabilir. Sonrasında programcılar her bir dil için gerekli kaynak dosyalarını seçip derleyerek farklı dillerde uygulama dosyaları üretirler. Kaynaklar derlenmiş uygulama dosyaları içinde eksiksiz olarak yer alırlar. Uygulamanın, çalışırken gerektiğinde kaynak bölgesine başvurup menüleri, resimleri ve diğer şeyleri buradan yükleyebilir.

Sadece uygulamanın kendisinden değil, kaynak bölgelerine başka programlar tarafından da ulaşılabilir ve bu bölgelerde değişiklik yapılabilir.

Kaynak dosyalarını ve uygulama dosyalarındaki kaynak bölgelerini düzenlemek için yardımcı bir çok araç olmakla birlikte Visual Studio da iyi bir kaynak düzenleyicidir.

Visual Studo .NET programında Windows'taki calc.exe dosyasını açtığınızda dosya içindeki kaynak bölgesi listeleniyor.



VS.NET, calc.exe dosyasının diyalog kutusu kaynağını istediğimiz gibi düzenleyip dosyayı bu haliyle kaydedebilmemizi sağladı.



Akıllı Windows, temel bileşenlerinden Calc.exe'nin değiştiğini anlayıp Dllcache'de tuttuğu yedeklerden geri yükleyip Calc.exe'yi yeniledi ve hesap makinesinin garip görünümünü sadece bir an için görebildik.


KENDİ UYGULAMANIZDA KAYNAK BÖLGELERİNİ KULLANIN

Delphi, Visual Basic, Visual C++ gibi uygulamalarda kaynak bölgeleri kolaylıkla kullanılabiliyor. Öncelikle bir kaynak dosyasının oluşturulması gerekiyor.

Visual Basic 6'da kaynakları düzenlemek için bir Add-in mevcuttur. Add-ins / Add-in Manager menüsünden VB6 Recource Editor'u yükledikten sonra Tools menüsü altına bu ek uygulama yerleşiyor.



Bu uygulama ile yeni bir RES dosyası oluşturabilir ya da var olan RES dosyaları uygulamaya eklenebilir.

VB Resource Editor'ü kullanmadan da RES dosyalarını uygulamaya eklemek mümkündür. Proje dosyalarının listelendiği Project Explorer (CTRL + R) penceresinde Add File komutu ile RES dosyası seçilebiliyor. Sonrasında uygulama derlendiğinde bu RES dosyası uygulamanın derlenmiş dsyası içine kaydedilir.



Visual Basic'te kaynak bölgesindeki bilgilere ulaşmak yeterince kolaydır. LoadResData, LoadResPicture, LoadResString fonksiyonları ile kaynak bilgileri kolaylıkla elde edilebilir.

Image1.Picture = LoadResPicture("BITMAP_CHIP", vbResBitmap)

Yukarıdaki gibi tek satırlık bir kodla kaynak bölgesinde kayıtlı bir resim form üzerindeki resim göstericiye yüklenebilir.

Fare işaretçileri (cursor) ya da simgeler (icon) kaynak bölgesinde Cursor bölümünden alınır. Aşağıdaki kod kaynak bölgesindeki Cursor başlığı altında bulunan CURSOR_OK adlı işaretçiyi fare işaretçisi olarak yükler.

Dim cursor As StdPicture
Set cursor = LoadResPicture("CURSOR_OK", vbResCursor)
Screen.MousePointer = vbCustom
Screen.MouseIcon = cursor

Tabii ki RES dosyasının içinde bu ad ile tanımlı bir işaretçi bulunmalıdır. Form küçük resimleri (icon) de fare işaretçilerine benzer şekilde yüklenebilir.

Dim ikon As StdPicture
Set ikon = LoadResPicture("CURSOR_CHIP", vbResCursor)
Set Me.Icon = ikon

Metin bilgileri ise kaynak dosyasında String Table altında grup halinde bulunurlar ve sayısal isimler alırlar. Bu değerlere ulaşmak için LoadResString işlevi aşağıdaki şekilde kullanılır.

MsgBox LoadResString(101)

Kaynak bölgelerini Delphi'de kullanmak da VB'dekine benzer şekildedir. Kod bloğunda implementation satırından sonra gelen {$R *.dfm} satırının altına {$R chip.res} eklenmeli. Chip.res dosyasını VB Resource Editor'de hazırlamış olmamıza rağmen onu Delphi'de de kullanabiliyoruz zira kaynak dosyaları çoğunlukla standarttır.

implementation

{$R *.dfm}
{$R chip.res}

Yukarıdaki ifade Chip.res dosyasının kaynak (resource) bölgesine alınması gerektiği anlamına geliyor. Bu durumda VB'de olduğu gibi benzer komutları aşağıdaki şekilde kullanabiliriz.


Fare işaretçisi yüklemek için:
Screen.Cursors[999] := LoadCursor(HInstance, 'CURSOR_CHIP');
Screen.Cursor := 999;

Resim yüklemek için:
image1.Picture.Bitmap.handle:= LoadBitmap(HInstance,'BITMAP_CHIP');

Uygulama simgesi:
Application.Icon.Handle := LoadIcon(hInstance,'CHIP_SUXX');

Metin bilgisi:
ShowMessage(LoadStr(101));


KAYNAK BÖLGELERİNİ INTERNET EXPLORER’DA GÖRÜNTÜLEMEK

Kaynak bölgeleri sadece uygulamalar içinde görüntülenmekle kalmayıp standart bir protokolle gösterilmeleri sağlanmıştır. RES protokolü HTTP ve diğerlerine benzer şekilde kullanıldığında kaynak bölgelerinden belge yüklenebilir.

Internet Explorer’da görüntülenen “Sayfa Görüntülenemedi” gibi uyarıların bulunduğu sayfalar aslında DLL dosyalarındaki kaynak bölgelerinden alınırlar.

Internet Explorer bir sayfayı açamadığında about:NavigationCanceled başlığında ileti sayfası gösterir. Bu aslında ABOUT protokolünün bir uygulamasıdır. Registry’de

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\AboutURLs

ağacı altında Internet Explorer’ın ABOUT ile kullanabileceği başlıklar yer alır.



Internet Explorer’ın yaptığı şey aslında NavigationCanceled’in karşılığını bulup açmaya çalışmaktır. Bu durumda about:NavigationCanceled sayfası aslında res://shdoclc.dll/navcancl.htm kaynağını işaret eder. Bu kaynak winnt\system32\shdoclc.dll dosyasındaki NAVCANCL.HTM öğesidir. Bu durumda about yerine res ile başlayan karşılığı yazmak aynı işi yapar.



Kayıt Defteri’nde (Registry) bu ağaç altında oluşturulan yeni başlıklar Internet Explorer tarafından tanınabilir. Oraya eklediğimiz CHIP başlığı, Internet Explorer’da about:chip yazdığımızda bizi http:/www.chip.com.tr adresine yönlendiriyor.



About protokolünin işi yukarıdan anlaşılabileceği gibi sayfa yönlendirme değil. About’un devamındaki herşey aslında Internet Explorer’ın sayfasına geçirilir. Bu, Internet Explorer’ın tanıdığı her türlü web içeriği olabilir.

Internet Explorer’da 'about: deneme' yazıldığında sayfada deneme yazısı görüntülenir. İki nokta işaretinden sonra herhangi bir HTML içeriği de yazılabilir.

about:Web sayfamız <a href= “http://www.chip.com.tr”>burada</a>



Internet Explorer’ın, dosyaların kaynak bölgelerinden, tanıyabileceği her türlü belgeyi yükleme yeteneği vardır. Kaynaklarda bulunan html, xml, resim, metin gibi içerikleri Internet Explorer yükleyebilir. Bu açıdan kaynak gösterici görevi yapmaktadır. Aşağıdaki şablona uygun olacak şekilde adres yazıldığında Internet Explorer uygulama dosyasındaki kaynak öğesini görüntüler.

res://dosya_adı[/kaynak_tür_kodu]/kaynak_adı

Kaynak adı Resource Editor’de kaynak yüklendikten sonra görüntülenen addır. Kaynak seçilip Edit Properties menüsü açılarak bu ad değiştirilebilir.



Edit Properties penceresinde Type alanı kaynak tür kodunu, ID ise kaynak adını ifade ediyor. Kaynak tür kodu değiştirilirse Resource Editor penceresinde o türe ait bir dal açılır ve öğe buraya yerleştirilir.



Res ile adres tanımlaması yapılırken kaynak tür kodu kısmına Edit Properties’teki Type değeri yazılmalıdır.

Resim, cursor gibi temel öğeler dışındaki dosyaları kaynak bölgesine yüklemek için Add Custom Resource komutu kullanılıyor. Dosya seçildiğinde geçerli olarak Custom adlı yeni bir ağacın altına yerleştiriliyor.

XML ağacı altındaki kitaplar_xml kaynağını Internet Explorer’da göstermek için

res://c:\project1.exe/xml/kitaplar_xml

komutu yeterlidir.

Temel bileşenler seçildiğinde ise kendilerine ait grupların altına alınıyorlar. Bunları görüntülemek için ise tür adı yerine her türe karşılık gelen bir sayıyı kullanmak gerekiyor.

Bu yönden kaynaklar adlandırılmış tür ve adlandırılmamış tür şeklinde ikiye ayrılıyorlar. Adlandırılmış türdeki kaynaklar için kaynak tür kodu adres satırında kullanılıyor. Adlandırılmamış türdeki bitmap, icon gibi kaynaklar için ise bunların sayısal karşılığı kullanılıyor.

Bitmap türünün karşılığı 2’dir. Bitmap grubu altındaki KOYUN adlı kaynağı göstermek için şu halde aşağıdaki adres kulllanılır.

res://c:\project1.exe/2/koyun



Kaynak türlerinin sayısal karşılığı alttaki tabloda yer alıyor.

Fare işaretçisi (cursor)

1

Resim (bitmap)

2

Simge (icon)

3

Metin (string)

6

Hareketli fare işaretçisi (animated cursor)

21

Hareketli simge (animated icon)

22

Web sayfası (html)

23

Kaynak bölgelerine Internet Explorer’ın adres satırından ulaşabilmek dışında HTML belgelerindeki bağlantı kodlarında kaynak adresi kullanılabilir. Yukarıdaki karikatürü EXE dosyasından alıp bir HTML belgesinde kullanmak için IMG (resim) nesnesinin kaynak alanına res ile başlayan adres aynı şekilde yazılabilir.

<img src="res://c:\project1.exe/2/koyun" />

Yukarıda hazırladığımız programlar dışında bilgisayarda var olan diğer dosyaların kaynak bölgelerine de ulaşılabilir. Örneğin explorer.exe’nin kaynak bölgesindeki resimlere aynı şekilde ulaşma olanağı vardır. Bu durumda uzak web sitesinde bulunan bir html belgesinde istemcinin yerel dosyalarındaki kaynak resimler gösterilebiliyor.

CD’deki explorer.htm <***LİNK DOSYA=explorer.htm /> dosyasında bilgisayarınızdaki explorer.exe içinde bulunan resimler görüntüleniyor. Bu dosyanın kaynağını görüntülemeyip kodları inceleyebilirsiniz.

<img border="0" src="res://explorer.exe/2/143">
<img border="0" src="res://explorer.exe/2/149">
<img border="0" src="res://explorer.exe/2/150">



Resimler tanıdık geliyor, değil mi? Explorer.exe uygulaması Başlat menüsünü ayarlerken bu resimleri kullanıyor.

Res ve About dışında VBScript ve Javascript protokolleri mevcut. Aşağıdaki komutları Internet Explorer'ın adres satırında çalıştırabilirsiniz.

javascript: alert("Mesaj")

vbscript: msgbox("Şu an " & Now())



Bunun dışında Internet Explorer mailto ile başlayan komutları da destekler.

mailto:deneme@deneme.com?subject=Başlık&body=Mesaj İçeriği&cc=yardim@chip.com.tr&bcc=yazi@chip.com.tr

HTML belgelerinde ya da komut satırında mailto kullanıldığında Explorer'ın davranışı öncelikle geçerli E-posta programını aramak olur. Registry'de HKEY_CLASSES_ROOT\mailto\shell\open\command ağacı altındaki default (geçerli) değeri geçerli e-posta programını temsil etmektedir. Buraya calc.exe yazarsanız bilgisayardan e-posta göndermek istediğinizde hesap makinesi programı açılır.



Burayı değiştirmeyi düşünüyorsanız önceki metni bir yere not edin.


DOSYALAR:
res_delphi.rar
(219 kb.)
res_vb.rar
(58 kb.)
EXPLORER.htm


Serkan ŞAHİNOĞLU
(Chip Dergisi, Ağustos 2002)


http://BilgiTeknoloji.net