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