You are on page 1of 16

>> ‹çindekiler

CHIP Workshop Klasörü


Kesin, biriktirin,
kendi arflivinizi
oluflturun
CHIP WORKSHOP’da BU AY CHIP Workshop
Web Programc›l›¤› Klasörü’nü
Frame’ler hakk›nda ayraçlar›yla
merak ettikleriniz
birlikte siparifl
Excel Serisi edebilir ve
LISTBOX VE COMBOBOX
NESNELER‹NE VER‹LER‹ ALMAK
kendi arflivinizi
oluflturabilirsiniz.
Java Serisi
JAVA ile Programlama Bölüm 4
Fiyat: 9.000.000 TL
(KDV ve gönderim ücreti dahil)

Siparifl için:
http://abone.vogel.com.tr

ÅCD yaz›c› testi Å205 Dolardan bafllayan DVD yaz›c›lar ÅCD Klonlama ÅÇekim ÅRötufllama ÅBask› ÅTEST: 45 dijital foto¤raf makinesi ÅSat›n
yöntemleri ÅCD Etiketi haz›rlama ÅAudio, MP3, Foto¤raf CD’si yazma alma dan›flman› ÅBenzersiz Plug-in efektleri ÅTV’nizde foto¤raf gösterisi
ÅFilm kopyalama ÅYaz›labilir CD’lerin teknik ayr›nt›lar›... ÅProfesyonel çekim için foto¤raf kursu ÅPortre, Sualt›, Do¤a, Ürün çekim
yöntemleri...

ÖZEL SAYI’lar Bayilerde, www.chip.com.tr, www.hepsiburada.com’da


Web Programc›l›¤›
<<
Frame’ler hakk›nda
merak ettikleriniz
Web tasar›m›n›n vazgeçilmezlerinden frame’leri yaln›zca kendi amaçlar›n›za
hizmet etmeleri için s›k› kontrol alt›nda tutun.

F
rame’ler web sayfalar›nda faydaland›- görünecek html sayfalar› ise farkl› arka plan sol.html
¤›m›z önemli ve bir o kadar da kulla- rengine sahipler. <html>
n›fll› unsurlardand›r. Baz› durumlarda Bu en temel frameset yap›s›n› olufltur- <head>
olmazsa olmazd›rlar. Ayn› pencere içerisinde mak için üç adet HTML sayfas› yazmam›z ge- <title>sol</title>
birden fazla web sayfas›n› gösterebilmenin rekir. Birincisi her iki sayfay› da ekranda gös- </head>
en kolay yolu frameset kullanmaktan geçer. terecek olan frameset’i kullanacak sayfa (fra-
Ayr›ca çok kompleks kod yazmak gerektiren me.html), di¤er ikisi ise ekran›n solunda ve <body bgcolor="#cccccc">
baz› ifllevleri frameset kullanarak basit bir fle- sa¤›nda iki ayr› frame olarak görünecek olan <h2>Soldaki sayfa</h2>
kilde çözebilmemiz mümkün olmaktad›r. Bu iki ayr› html sayfas› (sol.html ve sag.html). Bu
bak›mdan frame’ler baz› durumlarda web üç sayfan›n kodlar› ise afla¤›daki gibidir.
tasar›mc›lar›n s›kça baflvurduklar› yöntem- </body>
lerdir. Ancak web ziyaretçileri aç›s›ndan du- frame.html </html>
rum her zaman öyle olmayabilir. Özellikle <html>
geçmifl y›llarda baz› kullan›c›lar›n frame kul- <head> sag.html
lan›lan sayfalardan hiç hofllanmad›klar› bi- <title>frame</title> <html>
linmektedir. Ne var ki baz› durumlarda frame </head> <head>
kullanmak kaç›n›lmaz oluyor. Bu bak›mdan <title>sag</title>
olsa gerek taray›c› üretici firmalar›n ve web <frameset cols="130,*" rows="*"> </head>
tasar›mc›lar›n frame’lerden vazgeçmeye hiç <frame src="sol.html" name="soldaki">
de niyetleri yok. Hatta üstüne üstlük bir de <frame src="sag.html" name="sagdaki">
frame’lerin bir türevi olan IFRAME’lerin web </frameset> <body bgcolor="#aaaaaa">
standartlar›na ilave edildi¤ini hemen belirte- <h2>Sa¤daki sayfa</h2>
lim. Bu ayki StudioWeb’de web sayfalar›m›z- <noframes> </body>
daki frame’leri nas›l tam kontrolümüz alt›n- <body bgcolor="#ffffff"> </html>
da tutabilece¤imizi ve nas›l daha kullan›fll› </body> Fark ederseniz frameset’i içerisinde bar›n-
hale getirebilece¤imizi ö¤renece¤iz. </noframes> d›ran sayfam›z›n <body> tak›lar› aras›nda hiç
bir bilgi yok. Çünkü bu sayfan›n içeri¤i zaten
Frame’leri kontrol </html> iki farkl› HTML sayfas›n›n bir kombinasyonu
JavaScript’in html elementlerini kontrol ede-
bilme meziyetinden frame’ler de nasibini al-
d›lar. Di¤er tüm HTML elementlerini oldu¤u
gibi frame’leri de JavaScript ile kontrol edebi-
liriz. Böylece sadece HTML sayfalar›m›zdaki
elementleri de¤il, bir frameset içerisinde ta-
n›mlanm›fl frame’lerdeki sayfalar›n element-
lerini de frameset’teki di¤er bir sayfadan
kontrol edebilmemiz söz konusu oluyor. Bu
bak›mdan zaten önemli bir ifllevi yerine geti-
ren frame’lerimiz JavaScript sayesinde daha
dinamik, etkileflimli ve de kullan›fll› bir hal
alabilirler. Daha öncesinde frame’lerin yap›s›
hakk›nda biraz bilgi sahibi olal›m isterseniz.
Frame’ler ayn› taray›c› penceresi içerisin-
de birden fazla sayfay› göstermek amac›yla
kullan›l›rlar. Pencerede, görünecek her bir
sayfa için ayr›lan alana frame ad› verilir. Pen-
cerenizde hangi frame’in hangi alanda hangi
web sayfas›n› gösterece¤inin tan›m›n› ise
frameset ad› verilen element ile yapar›z. Afla-
¤›da görülen sayfan›n kodlar›nda bir frame-
set yer almakta. Frameset’imiz dikey olarak Basit bir frameset yap›s›
ayr›lm›fl iki adet frame’e sahip. Frame’lerde

104• CHIP Workshop >>


>> Web Programc›l›¤›

olacak. Frame’lerin sayfada nas›l görünece¤i- ript’in gözüyle görmeye çal›flal›m. E¤er tara-
nin tan›m› ise frameset tak›lar›nda yap›l›yor. y›c›lar›n obje yap›s›n› gösteren DOM tablosu- Windows
<frameset cols="130,*" rows="*"> na bakacak olursak frame objesinin hiyerar- Frame Self Top Parent
<frame src="sol.html" name="soldaki"> flik olarak frame içinde gösterilen html sayfa-
<frame src="sag.html" name="sagdaki"> lar›ndan daha üst pozisyonda oldu¤unu gö-
</frameset> rürüz.
Bunun neden böyle oldu¤unu düflünür- document history location
Buradaki cols="130,*" ifadesi sayfan›n sü- sek, bir frameset, alt›nda birden fazla html
tun olarak iki parçaya bölünmesi gerekti¤ini, sayfas›n› bar›nd›rabilir gerçe¤iyle frame’lerin
sol parçan›n 130 piksellik bir geniflli¤e sahip sayfalardan daha üst pozisyonda olmalar›
ancher link image form
olmas› gerekti¤ini, sayfan›n geri kalan›n› ise mant›kl›. Bizim örne¤imiz de bir frameset ve
sa¤daki sayfan›n kaplamas› gerekti¤ini ta- bunun alt›nda bulunan iki adet sayfadan button
n›ml›yor. Pencerenizi yatay olarak iki parçaya olufluyor. frame.html sayfas› içerisinde Ja- checkbox
bölmek isterseniz vaScript’in gözünde canlanan fley afla¤›daki-
radio
ne benzer bir diyagram asl›nda.
<frameset rows="130,*" cols="*"> Dikkat edecek olursan›z JavaScript’in ta- textarea
<frame src="ust.html" name="ustteki"> n›d›¤› fley solda ve sa¤da görünen sayfalar›n hidden
<frame src="alt.html" name="alttaki"> html doküman isimleri de¤il frameset içeri-
password
</frameset> sinde tan›mland›klar› referans isimleridir. Ya-
gibi bir frameset tan›m› iflinizi görürdü. ni ‘soldaki’ ve ‘sagdaki’ diye adland›r›lan reset
<frameset> tak›lar›n›zda kullanabilece¤i- isimleri. Bu diyagramdan anlafl›lmas› gere- select
niz çeflitli öznitelikler de mevcuttur. Bunlar ken ise flu:
submit
frame’ler aras›nda s›n›r koyup koymama gibi Frameset (ya da framesetin bulundu¤u
çeflitli özellikleri kontrol ederler. Bunlardan sayfa) üst obje iken frame’lerde gösterilen Dom tablosu text
baz›lar› flunlard›r: sayfalar alt obje olarak kabul ediliyor. Bir üst
border obje parent,en üst obje top anahtar kelime- }
bordercolor leri ile tan›mlan›rken alt objeler child ya da
cols frameset içinde alm›fl olduklar› referans </script>
frameborder isimleri ile tan›n›yorlar. Yani frameset örne- </head>
framespacing ¤imizdeki üst obje iki adet alt objeye sahip,
id soldaki ve sagdaki. <body bgcolor="#cccccc">
Bu yap› kullan›larak bir frameset içinde <h2>Soldaki sayfa</h2>
Ayn› flekilde <frame> tak›s›n›n da alabile- bulunan sayfalara ve ilgili sayfalar›n nesnele-
ce¤i baz› öznitelikler flunlard›r. rine ulaflarak bu nesnelerin özelliklerini de- <form>
bordercolor ¤ifltirmemiz mümkün olabilmektedir. <input type="button" value="fon rengi" p
frameborder onClick="renklendir()">
framespacing Frame’deki bir sayfadan </form>
id di¤erini kontrol edin
marginheight fiimdi gelelim bir frame içinde bir sayfadan </body>
marginwidth bir di¤erine nas›l ulaflabilece¤imizi ö¤renme- </html>
name ye. Bunun için üç sayfadan oluflan yukar›daki
scrolling ilk frame’i kullanarak ilginç bir örnek yapaca- fiimdi frame.html sayfas›n› web taray›c›-
src ¤›z. fiimdi sol.html sayfan›z›n kodunu aynen n›zda aç›n. Sol frame’deki dü¤meye t›klay›n.
afla¤›da görüldü¤ü gibi güncelleyip kayde- E¤er kodlarken bir hata yapmad›ysan›z sa¤
‹flin buraya kadar olan bölümü s›rf html’- din. frame’deki sayfan›n arka plan renginin her
di. fiimdi bu frame yap›s›n› bir de JavaSc- bas›flta de¤iflti¤ini göreceksiniz.
sol.html Bu, JavaScript kullanarak frame içindeki
<html> bir sayfadan bir di¤erinin arka plan rengini
Frameset <head> kontrol ediyorsunuz anlam›na geliyor! fiimdi
top, parent
<title>sol</title> kodumuzu biraz inceleyelim.
(frame.html)
frame.html sayfas›nda dikkat edilecek tek
<script language="javascript"> nokta frameset içerisinde kullan›lan sayfala-
r›n isimleri (soldaki ve sagdaki). As›l ifllem ise
fonrengi = new Array("red", "blue", p sol.html sayfas›ndaki kodda gerçeklefliyor.
Frame Frame "yellow", "green", "gray", "white", "black")
soldaki sa¤daki fonrengi = new Array("red", "blue", p
(sol.html) (sag.html) function renklendir() { "yellow", "green", "gray", "white", "black")
rastgelesayi = Math.floor(7*Math.random()) sat›r› ile 7 adet eleman› olan bir dizi yara-
parent.sagdaki.document.bgColor= p t›yoruz. Elemanlar ise standart html renk
Frameset içindeki hiyerarflik yap›
fonrengi[rastgelesayi] isimlerinden olufluyor (Tabii ki ‹ngilizce ol-
<< CHIP Workshop • 105
Web Programc›l›¤›
<<
mak zorundalar). Kullan›c› dü¤meye bast›¤› objeye ç›kmam›z daha sonra da sagdaki
anda JavaScript renklendir() fonksiyonunu isimli sayfaya ulaflmam›z gerekiyor. Frameset
ça¤›r›yor. bu fonksiyonun içerdi¤i koda bir DOM modeline göre bir alt objeden (yani top, parent
bakal›m flimdi. frame içindeki bir sayfadan) üst frame obje- (frame.html)
sini parent ya da top anahtar kelimesi ile Ja-
rastgelesayi = Math.floor(7*Math.random()) vaScript’e ifade edebiliyoruz. Bu ifade bizi bir
üst seviyeye ç›karacakt›r. Bundan sonraki
Sat›r›n›n yapt›¤› ifl 0 ile 6 aras›nda rasgele ad›m ise bir afla¤› seviyeye yani ulaflmay› Frame Frame
bir tamsay› üretip rastgelesayi de¤iflkenin amaçlad›¤›m›z sagdaki sayfas›na olacak soldaki sa¤daki
de¤eri olarak kaydetmek. Yani bu de¤iflken (sol.html) (sag.html)
alabilece¤i de¤erler sadece 0 ile 6 aras›nda parent.sagdaki
bir tamsay›d›r. Bir sonraki ad›mda ise Art›k framesetteki di¤er sayfaday›z. Ama-
Bir frame’den bir di¤erine DOM kullana-
script’imizin as›l can al›c› noktas› gerçeklefli- c›m›z bu sayfan›n arkaplan rengini de¤ifltir- rak geçebilmek için önce üst (parent) ob-
yor. Script’imiz bu bildiri sayesinde sa¤daki mekti. Bunu document objesinin bgColor jeye ulaflmak gerekir
sayfan›n fon rengini de¤ifltiriyor. property’sine de¤er vererek gerçeklefltirece-
¤iz. Yapaca¤›m›z son fley ise ilgili sayfa obje- ‹ç içe iki frameset’te kontrol
parent.sagdaki.document.bgColor= p sini ve property’sini adres listemizin devam›- mekanizmas›
fonrengi[rastgelesayi] na yazmak olacak. ‹lk bölümdeki örne¤imiz en basit frame yap›-
s›n› kaps›yordu. Ama bazen iç içe frame-
Bu bildirideki eflitli¤in sa¤ taraf› fonrengi parent.sagdaki.document.bgColor set’lerden oluflan yap›lar da kullanmak zo-
dizisinin herhangi bir eleman›n› yani bir ren- runda kalabiliriz. fiimdiki örne¤imiz böyle ya-
gi ça¤›r›r. Diyelim ki rastgele say›m›z 0 olarak Arka plan rengi yerine sayfan›n baflka bir p›lar söz konusu oldu¤unda frame’deki say-
üretildi. O zaman eflitli¤in sa¤ taraf› fonren- özelli¤ini de¤ifltirmek isteyebilirsiniz. Bu du- falar aras› kontrol mekanizmas›n›n nas›l iflle-
gi[0] de¤erini al›r ki bu da fonrengi dizimizin rumda yapman›z gereken ilgili obje ve ilgili di¤ini görmemizi sa¤layacak.
ilk eleman› olan "red", yani k›rm›z› de¤eri de- property ya da metodu seçip kullanmak ola- Bu sefer sa¤ taraftaki sayfam›z da içinde
mektir. cak. Diyelim sag.html sayfam›zda form1 is- bir frameset yap›s› bar›nd›r›yor olacak. Yine
Konumuz olan frame’leri as›l ilgilendiren minde bir formun button1 isimli dü¤mesinin öncelikle bu yap›y› oluflturacak html kodlar›-
olay ise eflitli¤in sol taraf›nda gerçeklefliyor. üzerindeki yaz›y› de¤ifltirmek isteseydik yaz- n› görelim.
De¤eri red , yani k›rm›z› olacak fleyi burada mam›z gereken adres listesi afla¤›daki gibi
bildiriyoruz. ‹ste¤imiz frameset içindeki sag- olacakt›. anaframe.html
daki isimli sayfan›n arka plan rengini de¤ifl- <html>
tirmek oldu¤u için, DOM tablosuna göre ilgili parent.sagdaki.document.form1. p <head>
nesnenin yol adresini yazarak o nesneye ula- button1.value="merhaba"; <title>anaframe</title>
fl›yoruz. Script’imiz frame objesinin iki alt ob- </head>
jesinden biri oldu¤undan di¤er alt obje olan fiimdi dilerseniz bir de iç içe iki frame-
sagdaki sayfas›na ulaflmak için önce bir üst set’ten oluflan bir örnekle devam edelim. <frameset cols="130,*" rows="*">
<frame src="sol2.html" name="soldaki">
<frame src="sagframe.html" p
name="sagdaki">
</frameset>

<noframes>
<body>

</body>
</noframes>

</html>

sol2.html

<html>
<head>
<title>sol</title>
</head>

<body bgcolor="#cccccc">
<h2>Soldaki sayfa</h2>
Sol frame’deki dü¤meye her bas›flta sa¤ frame’in arka plan rengi de¤iflmekte </body>
</html>

106• CHIP Workshop >>


>> Web Programc›l›¤›

rastgelesayi = Math.floor(8*Math.random())
parent.sagdaki.ustteki.document. p
bgColor=fonrengi[rastgelesayi]
}

</script>

</head>
<body bgcolor="#cccccc">
<h2>Soldaki sayfa</h2>

<form>
<input type="button" name="kendi renk"p
value="kendi rengi"onClick="renkkendi()">
<p>
<input type="button" name="ust enk" p
value="üst renk" onClick="renkust()">
</form>

</body>
</html>

‹ç içe iki framesetten oluflan bir sayfa


alt.html

sagframe.html </head> <html>


<html> <head>
<head> <body bgcolor="#aaaaaa"> <title>alt</title>
<title>sag frame</title> <h2>Alttaki sayfa</h2> <script language="javascript">

</head> </body> fonrengi = new Array("red", "blue", p


</html> "green", "white", "black", "navy","teal", "silver")
<frameset rows="50%,50%">
<frame src="ust.html" name="ustteki"> San›r›m buraya kadar her fley anlafl›l›r va- function renkust() {
<frame src="alt.html" name="alttaki"> ziyette. fiimdi yine JavaScript’in bu yap›y› na- rastgelesayi = Math.floor(8*Math.random())
</frameset> s›l gözünde canland›rd›¤›na bir bakal›m. parent.ustteki.document.bgColor= p
<noframes> Görüldü¤ü üzere anaframe’in alt objesi, fonrengi[rastgelesayi]
<body> sagframe’in de alt›nda iki adet alt obje var. }
ust ve alt. Sanki anaframe büyükbaba rolün-
</body> de iken alt ve ust ise torun rolünde gibi. sagf- function renksol() {
</noframes> rame anaframe’in alt objesi iken alt ve ust rastgelesayi = Math.floor(8*Math.random())
isimli alt objelerinin ise üst objesi rolünde. top.soldaki.document.bgColor = p
</html> fiimdi s›ra geldi bu yap›ya JavaScript ile biraz fonrengi[rastgelesayi]
etkileflim katmaya. sol2.html ve alt.html say- }
ust.html falar›n› afla¤›daki gibi güncelleyip kaydedin. </script>
</head>
<html> sol2.html
<head> <html> <body bgcolor="#aaaaaa">
<title>ust</title> <head> <h2>Alttaki sayfa</h2>
</head> <title>sol</title>
<script language="javascript"> <form>
<body bgcolor="#999999"> <p>
<h2>Üstteki sayfa</h2> fonrengi = new Array("red", "blue", p <input type="button" value="üst renk" p
"green", "white", "black", "navy", "teal","silver") onClick="renkust()">
</body> </p>
</html> function renkkendi() { <p>
rastgelesayi = Math.floor(8*Math.random()) <input type="button" value="sol renk" p
alt.html document.bgColor=fonrengi[rastgelesayi] onClick="renksol()">
<html> } </p>
<head> </form>
<title>alt</title> function renkust() {
<< CHIP Workshop • 107
Web Programc›l›¤›
<<
</body> Frameset
</html> top, parent
fiimdi anaframe.html sayfas›n› taray›c›- (frame.html)
n›zda açarsan›z afla¤›daki gibi bir görüntü ile
karfl›laflacaks›n›z.
Görülen dü¤melere t›klayarak farkl› say-
falar›n fon rengini nas›l de¤ifltirebildi¤inizi Frame Frame
bir gözlemleyin. Taktik tamamen bir önceki soldaki sa¤daki
örne¤imizin ayn›s›. Sadece bu sefer ilgili say- (sol.html) (sag.html)
falara ulaflmak için biraz daha çaba sarf et-
mek gerekiyor. Zira bu sefer iç içe iki frameset
yap›s› söz konusu. Önce sol2.html sayfas›n-
daki script koduna bir göz atal›m.
renkkendi() fonksiyonu sadece kendi bu-
lundu¤u sayfan›n rengini de¤ifltiriyor. Çünkü Frame
Frame
adres listesinde baflka bir sayfaya ulafl›m söz soldaki soldaki
konusu de¤il. (sol.html) (sol.html)
document.bgColor=fonrengi[rastgelesayi]
renkust() fonksiyonu önce bir üst obje fra- ‹ç içe iki framesetten oluflan sayfam›z›n hiyerarflik obje yap›s›
meset yap›s›na ç›k›yor (anaframe) daha son-
ra ise onun bir alt› olan objeye ki o da bir fra-
meset (sa¤frame). Sagframe’in referans ismi- set’teki bir sayfada tan›mlanm›fl JavaScript <noframes>
nin sagdaki oldu¤una dikkat edin lütfen. fonksiyonunu ça¤›r›p kullanacak. <body bgcolor="#ffffff">
parent.sagdaki </body>
Ulafl›lmak istenen bir sonraki ad›m ise frame3.html </noframes>
sagframe’in alt objesi olan sayfa (ust.html), <html>
referans ismi ise ustteki. <head> </html>
parent.sagdaki.ustteki <title>frame3</title>
son olarak ta bu sayfan›n ilgili objesi ve </head> sol3.html
ona ait olan property’si ekleniyor. <frameset cols="130,*" rows="*"> <html>
parent.sagdaki.ustteki.document.bgColor <frame src="sol3.html" name="soldaki"> <head>
fiimdi de alt.html sayfas›ndaki script ko- <frame src="sag3.html" name="sagdaki"> <title>sol</title>
dumuzu inceleyelim. ust.html sayfas›na na- </frameset>
s›l ulaflabilece¤imizi art›k biliyoruz. Çünkü <script language="javascript">
burada durum tamamen ilk örne¤imizdeki-
nin ayn›s›.
parent.ustteki.document.bgColor= p
fonrengi[rastgelesayi]
Peki soldaki sayfaya nas›l ulaflaca¤›z? Siz
de tahmin edersiniz ki önce en üst seviye olan
anaframe’e kadar ç›k›p oradan soldaki sayfa-
ya inmemiz gerekiyor. ‹flte burada bizi en üst
seviyeye ç›karacak olan top anahtar kelimesi-
ni kullan›yoruz. Sonra da bir alt objenin refe-
rans ismi olan soldaki ismini.
top.soldaki.document.bgColor = p
fonrengi[rastgelesayi]

Frameler aras› JavaScript


fonksiyonlar›n›n ortaklafla kullan›m›
Bu noktada ö¤renece¤imiz özellik daha çok
tecrübeli web programc›lar›n› ilgilendiren bir
olay› gerçeklefltiriyor ve çok da önemli bir
yöntem. Çünkü baz› durumlarda bir sayfa
içinden bir baflka sayfada yaz›l› olan script ko-
dundan faydalanmak ya da baflka bir sayfada
tan›mlanm›fl bir fonksiyonu ça¤›r›p kullan-
‹ç içe iki framset’ten oluflan bir yap›da bir frame’den bir di¤erinin özelliklerini, mesela arka
mak isteyebiliriz. fiimdiki örne¤imiz frame- plan rengini de¤ifltirebilirsiniz

108 • CHIP Workshop >>


>> Web Programc›l›¤›

onClick="parent.soldaki.p
renklendir()">
</form>

</body>
</html>

frame3.html sayfas›n› çal›flt›rd›¤›n›zda


sa¤daki sayfadaki dü¤meye bast›kça yine ay-
n› sayfan›n arka plan renginin de¤iflti¤ini
gözlemleyeceksiniz. ‹lk bak›flta çok önemli bir
ifllem de¤ilmifl gibi düflünebilirsiniz. Bir sayfa-
n›n fon rengini yine ayn› sayfadaki bir dü¤-
meye basarak de¤ifltirmek çok çok önemli bir
ifl de¤il elbette, ama burada gerçekleflen as›l
olay rengi de¤ifltiren scriptin soldaki sayfada
oldu¤u ve sa¤daki sayfan›n bu script’e ait
renklendir() fonksiyonunu ça¤›r›p kullanabil-
mesi! sag3.html sayfas›n›n koduna bakacak
olursan›z JavaScript kodu olmad›¤›n› göre-
ceksiniz! Ça¤›rma takti¤imiz afla¤› yukar› ay-
sol frame’de tan›mlanm›fl bir JavaScript fonksiyonunu sa¤ frame içerisinden ça¤›rarak kullan›yoruz. n› temele dayan›yor. DOM modelini kullana-
rak ilgili sayfaya oradan da ilgili fonksiyona
fonrengi = new Array("red", "blue", p ulaflmak burada da iflin temeli.
"yellow", "green", "gray", "white", "black") </body> onClick="parent.soldaki.renklendir()"
</html> Burada kulland›¤›m›z teknik sayesinde
function renklendir() { sayfalar aras›nda dolafl›rken bilgileri topla-
rastgelesayi = Math.floor(7*Math.random()) sag3.html ma, bir baflka sayfaya tafl›ma ya da bir sayfa-
parent.sagdaki.document.bgColor= p <html> daki bilgiyi baflka sayfada kullanma imkan›na
fonrengi[rastgelesayi] <head> sahibiz. fiöyle ki bir frameset kullanarak 0 pik-
} <title>sag</title> sel boyutunda, ekranda görünmese bile as-
</head> l›nda daimi olarak ekranda duran bir frame
</script> oluflturabilir ve önemli JavaScript kodlar›n›z›
</head> <body bgcolor="#aaaaaa"> buraya yazabilirsiniz. Di¤er frame’e ise web
<h2>Sa¤daki sayfa</h2> sitenizi oluflturan içerik sayfalar›n›z› koyabi-
<body bgcolor="#cccccc"> <form> lirsiniz. Bu durumda içerik sayfalar›nda gez-
<h2>Soldaki sayfa</h2> <input type="button" value="fon rengi" p dikçe kullan›c›n›n hareketlerinin bilgisini 0
piksellik frame’de bulunan JavaScript de¤ifl-
kenlerinde saklayabilir, diledi¤iniz anda da
Frameset bu frame’de bulunan de¤iflkenleri okuyarak
top, parent bu bilgilere ulaflabilirsiniz.
(frame.html) Numan Pekgöz
numanpekgoz@chip.com.tr

Frame Frame
soldaki sa¤daki » eCHIP
(sol.html) (sag.html) StudioWeb+’da bu ay:
???????
Bu ayki uygulamalar›m›z›n çal›flmaya haz›r
birer kopyas›n› dergimizin CD’sindeki Studi-
oWeb+ bölümünde bulabilirsiniz. Studi-
Frame Frame oWeb+’›n bu ayki say›s›nda yine frame’lerle
soldaki soldaki ilgili ilginç bir uygulama bulacaks›n›z. Ja-
(sol.html) (sol.html) vaScript yard›m›yla sayfalar›n›z› bedava ser-
vis veren sunucular›n banner ve reklamlar›n›
Bir frame alt objesine ulaflabilmek için önce alt objenin parent üst objesine ulaflmam›z gerekir. içeren framelerinden kurtarabilirsiniz

<< CHIP Workshop • 109


Excel Serisi
<<
LISTBOX VE COMBOBOX
NESNELER‹NE VER‹LER‹ ALMAK
Excel’de kullan›labilecek birçok kestirme yol vard›r. Birilerinin bu yollara iflaret koymas› gerekir ki,
“Excel yolu”ndan gelip geçenler, bu ara sokaklar› da ö¤renebilsin.

Soru 1 Merhaba, yaz›lar›n›z› ve sitenizi ilgiy- yöntem daha bulunmaktad›r. Bu da, List- rüntüsü fiekil-3’deki gibi olmal›.
le takip ediyorum. Ben sorular›n cevaplar›n› Box’un RowSource özelli¤idir. ‹lk olarak AddI- Yukar›da, Initialize olay›na yazd›¤›m›z kod-
kendim yapabiliyorum. Yaln›z daha farkl› tem metodunun nas›l kullan›ld›¤›n› çeflitli lar› silin ve yerine afla¤›daki kodlar› ekleyin.
yöntemlerin olup olmad›¤›n›, aralar›ndaki yöntemlerle inceleyelim.
farklar› ö¤renmek istiyorum. Hangi yöntemi UserForm1 üzerine bir adet ListBox1 nesnesi Private Sub UserForm_Initialize()
tercih etmeliyiz, bunu aç›klaman›z› istiyo- ekleyin. (fiekil-1) Dim i As Integer
rum. Sorum flu: AddItem yöntemiyle User- UserForm1’in Initialize (bafllama) olay›na For i = 1 To 9
Form üzerine çizdi¤imiz bir Listbox nesnesi- afla¤›daki kodu yaz›n. ListBox1.AddItem Cells(i, 1).Value
ne veri ekleyebiliyoruz, bundan baflka daha Private Sub UserForm_Initialize() Next i
kolay yöntem var m› varsa yukar›da belirtti- ListBox1.AddItem "M. Temel Korkmaz" End Sub
¤im gibi aralar›ndaki fark nedir? Hangisini ListBox1.AddItem "Cemil Gökmen" Kodu çal›flt›rd›¤›n›zda fiekil-4’deki görün-
tercih etmeliyiz? (Cafer Aktun) ListBox1.AddItem "Cafer Ulusoy" tü ile karfl›laflacaks›n›z. Bu da istedi¤imiz bir
ListBox1.AddItem "Hasan Akyüz" sonuçtur.
Cevap 1: Öncelikle hemen belirteyim ki, ge- ListBox1.AddItem "Nevzat Adagide" Art›k ikinci metoda geçmenin zaman› gel-
nelde ListBox ve ComboBox nesneleri hemen ListBox1.AddItem "Mustafa Öztürk" di demektir. ListBox’un RowSource Özelli¤ini
hemen bir çok ifllemde ayn› görevi yüklenir ListBox1.AddItem "Mehmet Yetim" kullanaca¤›z. Biraz önce Form’a yazd›¤›n›z
ve ayn› özellikleri kullan›rlar. Benim burada End Sub kodlar› tekrar silin ve bu defa Initialize olay›-
size aktaraca¤›m örnekler sadece ListBox na afla¤›daki kodu yaz›n.
nesnesi için olacakt›r. E¤er uygun özellikleri Run dü¤mesine t›klay›p formu çal›flt›rd›¤›n›z- Private Sub UserForm_Initialize()
siz ComboBox nesnesinde bulabilirseniz ora- da fiekil-2’deki görüntüyü elde edeceksiniz. ListBox1.RowSource = "Sayfa1!A1:A9"
da da kullanabilirsiniz. Buraya kadar olan yöntemde hemen flu- End Sub
fiimdi sorular›n›za cevap bulmaya çal›fla- nun fark›na vard›k ki, e¤er verilerimizi AddI-
l›m. Sizin de anlad›¤›n›z gibi, asl›nda AddI- tem metodu ile kod sayfas›na yaz›p listeye Kodu çal›flt›rd›¤›n›zda elde edece¤iniz gö-
tem metodundan farkl›, s›k kullan›lan bir ekleyeceksek, bütün verileri tek tek bir defa- rüntü fiekil-4’deki görüntüden farkl› olmaya-
ya mahsus girmemiz gerekecektir. cakt›r. Ben yine de size son örnek olarak Row-
Bu defa, verilerimizi Excel çal›flma sayfa- Source’yi kod kullanmadan nas›l gerçekleflti-
s›ndan yine AddItem metodu ile ListBox1 rebiliriz, bunu göstermek istiyorum. Bu defa
nesnesine ald›ral›m. Çal›flma sayfas›n›n gö- yazd›¤›n›z bütün kodlar› silin. Yani User-
Form1’in kod sayfas›ndaki Initialize olay› da-
hil, bütün kodlar› silin.
1) Tasar›m modunda iken, yani VBA pencere-
sinde iken, UserForm1’i aç›n.
2) ListBox1 nesnesini fare ile t›klayarak seçin.
3) Sol tarafta bulunan Properties penceresin-
den RowSource özelli¤ini seçin. (Nesnelere
ait özelliklerin kullan›m›n› detay› ile ö¤rene-
bilmek için elinizde bulunan “Excel ‹le Prog-
ramlama | Makrolar” adl› Kitab›m›z›n “User-
Form” bölümüne bak›n›z.)
4) RowSource özelli¤inin hemen sa¤›ndaki
bofl hücreye “Sayfa1!A1:A9” yaz›n.
5) Formu çal›flt›r›n.
Formu çal›flt›rd›¤›n›zda hiç kod yazmad›-
¤›n›z halde A1:A9 hücreleri aras›ndaki verile-
rin ListBox1 nesnesine atand›¤›n› göreceksi-
fiekil-1: UserForm1 nesnesi üzerindeki fiekil-2: ListBox1 nesnesine AddItem me- niz. (fiekil-5)
ListBox1 nesnesi. todu ile eklenen veriler.

61• CHIP Workshop >>


>> Excel Serisi

ne geçin. Kategoriler listesinden Genel ko-


mutunu t›klay›n. Tamam dü¤mesine t›kla-
y›n. C1 hücresinde 34 rakam›n› göreceksiniz.
Bilgisayar›n›z› bir sonraki gün açt›¤›n›zda B1
hücresi 1 gün artacak dolay›s› ile C1 hücresi
de bir say› artacakt›r.
PERSONAL.XLS DOSYASI DA NED‹R?
Soru 3:Açt›¤›m her Excel çal›flma kitab› mak-
ro ile aç›l›yor. Neden? Teflekkürler. (Mehmet
Serin)
Cevap 3:Nas›l desem bilemiyorum ki. ‹yi
desem bir türlü, olmaz, kötü desem baflka
fiekil-3: Sayfa üzerindeki hücrelerde bulu- türlü. Bu Personal.XLS dosyas›ndan çekti¤i-
fiekil-4: Sayfadaki verileri For Next dön-
nan verileri ListBox’a aktaraca¤›z miz nedir?
güsünü kullanarak AddItem Metodu ile
Listbox’a aktard›k. Bu k›sa ve dertli giriflten siz de anlad›n›z
Evet, geldik son soruya, hangisini neden ki, bu tür sorunlarla sadece siz karfl›laflm›yor-
tercih edece¤iz. E¤er verilerimiz, sizin de he- nu sadece tablo olarak kullanan arkadafllar›- sunuz. fiimdi, siz bir zamanlar bilgisayar›n›z-
men fark edece¤iniz gibi, her biri ayr› ayr› m›z Excel’i kendilerine göre özellefltirmeyi da bir dosya haz›rlarken Makro kaydetmek
yerlerde kullan›labilecek yöntemler. E¤er lis- bilmediklerinde bu tür s›k›nt›lar yaflamakta- istediniz. Bu ifllemi yaparken do¤al olarak
teniz çok uzun ise bu listeyi kod sayfas›na ya- d›rlar. Sizin sordu¤unuz bu gibi sorulara ben- Makro Kaydet komutunu kulland›n›z. Makro-
z›p Listbox’a aktarmak çok zahmetli olacak- zer bir çok soru ile karfl›lafl›yorum. Asl›nda ya- nuzu kaydetmek için makro kaydet pencere-
t›r. Bu uzun listenizi, hücrelerden aktarmak p›lmas› gereken çok basit. Ancak ben sizin si aç›lacakt›r. Bu pencerede Makronun Sakla-
isterseniz ve For Next döngüsünü kullan›rsa- sorunuza cevap verirken göz ard› etti¤iniz naca¤› Yer kutusundan e¤er Kiflisel Makro Ça-
n›z ilk etapta bellekten yer ay›rman›z gereke- basit bir fonksiyon daha kullanarak bugünün l›flma Kitab› komutunu seçmifl ve böylelikle
cektir do¤al olarak. Ancak bana göre en uy- tarihini B1 hücresine yazmaktan kurtarmaya kayd›n›z› yapm›flsan›z, bu makro Perso-
gun yöntem en son gösterdi¤imiz Properties çal›flaca¤›m. nal.XLS ad›nda baflka bir çal›flma kitab›na
penceresini kullanma yöntemidir. ‹stisnai Afla¤›daki ad›mlar› tek tek izlerseniz so- kaydedilecektir. E¤er her defas›nda makro
hallerde yada listenizin sürekli geniflleyece¤i- nuca ulaflaca¤›z demektir. kaydederken Kiflisel Makro Çal›flma Kitab› ko-
ni düflündü¤ünüz zamanlarda ise List- 1) A1 hücresine ifle girifl tarihi olan 01. 01. mutu seçili olursa, makrolar› hep bu dosyaya
Box1.RowSource=”” özelli¤ini kullanman›z 2002 tarihini yaz›n kaydedecektir (fiekil-7-8).
yerinde olur. Yok e¤er az bir veriye sahipseniz 2) B1 hücresine de =Bugün() formülünü girin. Buraya kadar olan k›s›mda hiçbir mahsur
ve sayfaya ba¤l› kalmak istemiyorsan›z en 3) C1 hücresine de =B1-A1 formülünü girin. yokmufl gibi görünüyor. Ancak mahsur olan
uygun yöntem ilk gösterdi¤imiz AddItem Sonuç olarak 03.02.1900 de¤eri C1 hücre- durumu flöyle izah edelim. fiimdi Perso-
yazma yöntemidir. sinde görüntülenecektir. Bu her ne kadar is- nal.XLS dosyas› di¤er XLS dosyalar› gibi
tenilen bir sonuç gibi görünmese de asl›nda C:\Belgelerim ya da seçmifl oldu¤unuz baflka
‹K‹ TAR‹H ARASINDAK‹ FARKI GÜN istenilen sonucun ta kendisidir. Ancak üze- bir varsay›lan klasöre kopyalansa ve bu ka-
OLARAK GÖRMEK rinde küçük bir operasyon yapaca¤›z. darla kalsa problem yoktu. Dosya otomatik
Soru 2: ‹fle bafllayan bir personelin ilk ifle gi- fiimdi C1 hücresini seçin ve B‹Ç‹M>HÜC- olarak XLSTART klasörüne kaydediliyor. fiu an
rifl tarihini A1 hücresine yaz›yorum. Bugünün RELER komutunu t›klay›n. Aç›lan Hücreleri Bi- kulland›¤›m makinedeki iflletim sistemi Win-
tarihini de, B1 hücresine yaz›yorum. C1 hüc- çimlendir penceresinden Say› sayfa sekmesi- dows Me, ve XLSTART klasörünün yolu da
resinde görmek istedi¤im, bu personelin o
güne kadar kaç gündür bizim ifl yerimizde ça-
l›flt›¤›. Bunun için C1 hücresine =B1-A1 for-
mülünü yaz›yorum. Hücrede ise istemedim
bir sonuçla karfl›lafl›yorum. Bunu Excel mi ya-
pam›yor ben mi? Bir türlü anlayamad›m.
(Halil Düflen)
Cevap 2: Genelde Excel’in çal›flma tablosu-

Kutu 1
FORMÜLÜ KEND‹S‹ YAZDI

A ve B sütunundaki 10'ar hücreye rakam-


lar girin. C1 hücresine =A1+B1 formülünü
yaz›n. Bunu C10'a kadar kopyalay›n. fiim-
di A11 ve B11 hücrelerine rakamlar› yaz›n.
Halbuki siz C11'e formül girmemifltiniz.
De¤il mi? fiekil-5: RowSource özelli¤ini Properties penceresinden kulland›¤›m›zda verilerin daha ta-
sar›m modunda iken ListBox’a aktar›ld›¤›n› görüyoruz.

<< CHIP Workshop • 62


Excel Serisi
<<
bir problemle karfl›laflt›m, sizlerden yard›m
Kutu 2 bekliyorum. Bir Excel çal›flma sayfas›nda,
=TOPLA(…..) HAKKINDA A1 hücresine 2002,

GEREKL‹ B‹LG‹ B1 hücresine 1 ve


C1 hücresine =TAR‹H(A1;B1;1)
Bir sütunda bulunan bilgilerinizi toplamak yazarak C1 hücresinin biçimini gggg yap-
istiyorsan›z en basit kullanaca¤›n›z yön-
t›m ve C1 hücresinde Sal› görüldü. D1 hücre-
tem. =Topla(A1:A100) formülüdür. Hemen
sine mesela;
akl›m›za gelen küçük bir sorun var. A17 ve-
=E⁄ER(C1="Sal›";"nöbetçiyim";"nöbetim
ya A30 gibi hücrelerde say› de¤il de, metin
var ise o zaman ne yapaca¤›z? Hiç önemli yok") formülünü girdi¤imde formül bekle-
de¤il. =Topla(A1:A100) yazmaktan flaflma- nen gibi olumlu yönde çal›flm›yor ve sonuç fiekil-7: Kiflisel Makro Çal›flma Kitab›n› se-
y›n. Bu formül Arada bulunan metin hücre- “nöbetim yok” yaz›yor. Ama C1 hücresine çerseniz Personal.XLS dosyas› oluflur.
lerini gözard› edecek ve toplam›n içerisine do¤rudan Sal› yazd›¤›mda formül olumlu ça-
almayacakt›r. (fiekil-6) Oysa ayn› ifllemi l›fl›yor ve sonuçta istedi¤im flekilde, “nöbetçi- yapmal›y›z. Ancak bunun için çal›flt›¤›m›z
A1+A2 gibi yöntemle deneseydiniz #DE⁄ER yim” yaz›yor. Bunun sebebi ve çözüm yolu sayfa de¤il, baflka bir sayfaya geçelim. Çünkü
hatas›n› alacakt›n›z. nedir? (Tahsin Sönmez) çal›flt›¤›m›z sayfada C1 hücresinin biçimini
Cevap 4: Bariz yap›lan bir yanl›fll›k var. An- de¤ifltirmifltik. fiimdi yeni sayfam›zda hücre-
cak her fley o kadar do¤ru görünüyor ki, ne lere afla¤›dakileri yazal›m.
kadar u¤rafl›rsan›z u¤rafl›n, yanl›fl› bulam›- A1 hücresine 2002
yorsunuz. fiimdi ifllemlerinizi ad›m ad›m ha- B1 hücresine 1
tay› da gösterene kadar birlikte yapal›m. So- C1 hücresine =METNEÇEV‹R p
runuzda da bahsetti¤iniz gibi, (TAR‹H(A1;B1;1);"gggg")
A1 hücresine 2002 D1 hücresine =E⁄ER(C1="Sal›"; p
B1 hücresine 1 "nöbetçiyim";"nöbetim yok")
C1 hücresine =TAR‹H(A1;B1;1) yazal›m. Formülü onaylad›¤›m›zda D1
D1 hücresine =E⁄ER(C1="Sal›"; p hücresindeki sonucun “nöbetçiyim” oldu¤u-
"nöbetçiyim";"nöbetim yok") nu göreceksiniz. (fiekil-13)
yaz›n. Sonucun fiekil-11’deki gibi oldu¤u- Art›k eflitli¤in her iki taraf› da metinsel de-
nu göreceksiniz. ¤er içermekte olup, C1 hücresindeki “Sal›” bir
fiekil-6: Baz› hücrelerde metin oldu¤u C1 hücresindeki de¤er 01.01.2002 olunca görüntü de¤il sonuç ifadesidir. Dolay›s› ile D1
halde hata vermedi¤ini görüyoruz. do¤al olarak, D1 hücresinde de “nöbetim
yok” yazmaktad›r. Takvime bakt›¤›m›zda,
flöyle (fiekil-9). 01.01.2002 tarihinin “Sal›” gününe denk gel-
Kutu 3
C:\Windows\Application Data\Micro- di¤ini görüyoruz. Dolay›s›yla istedi¤imiz KEND‹N‹ZE A‹T BAS‹T ME-
soft\Excel\Xlstart\Personal.XLS olay, C1 hücresinde de tarih yerine “Sal›” gö- NÜ OLUfiTURMAK
(Win 2000 ve XP sürümlerinde bu yollar rünmesini istiyoruz. Bunun için C1 hücresini Excel'de Kendinize ait bir menü olufltura-
farkl› ancak klasör isimleri ayn›d›r.) seçip, Biçim / Hücreler komutunu vererek, Sa- bilirsiniz.
O an aç›k olan dosyan›z› kaydedip kapat- y› sayfa sekmesinden ‹ste¤e Uyarlanm›fl ko- Görünüm>Araç Çubuklar›>Özellefltir>Ko-
mak istedi¤iniz ve bütün ifllemlerinizi ger- mutunu seçerek Tür kutusuna “gggg” yaz›- mutlar>Yeni Menü seçne¤ini istedi¤iniz
çeklefltirdi¤inizde, en son olarak fiekil-10’da- yoruz ki, C1 hücresinde sadece gün k›sm› yaz› yere tafl›man›z ile menü oluflur, sa¤ mo-
ki uyar› mesaj›n› al›rs›n›z. Bu mesaj Perno- ile görünsün. (fiekil-12) ‹fllemleri yap›p Ta- use ile isim verebilirsiniz. Baflka Excel ko-
nal.Xls ye ait bir mesajd›r. Evet dedi¤inizde, mam dü¤mesine t›klad›¤›m›zda C1 hücresin- mutlar›n› bu menünün alt›na sürükleye-
art›k Excel’iniz her aç›ld›¤›nda bu dosya da de “Sal›” yazd›¤›n› görüyoruz. Buna ra¤men bilir, bu komutlar› kullanabilirsiniz. Diler-
birlikte aç›lacakt›r. D1 hücresinde halen “nöbetim yok” yazmak- seniz sa¤ mouse ile kendi makronuzu bu
menüye atayabilirsiniz. Tekrar Görü-
Buraya kadar anlatt›klar›mdan ç›kan k›sa tad›r.
nüm>Araç Çubuklar›>Özellefltir seçene-
sonuç flu: “Personal.xls” dosyas› kiflisel me- San›yorum bunun nedenini anlamak art›k
¤ine geri çekti¤inizde menü kald›r›lm›fl
sajlar›n›z› kaydederken oluflan ve XLSTART daha kolay hale geldi. Yine de ben k›saca izah olur.
klasörüne kaydedilen bir dosyad›r. XLSTART edeyim. Her ne kadar C1 hücresinde “Sal›”
klasörüne kaydedilen bütün dosyalar Ex- yazm›fl olsa da bunun sadece 01.01.2002 so-
cel’in çal›flmas› ile birlikte aktif hale gelirler. nucunun bir görüntüsü oldu¤unu biliyoruz.
fiimdi as›l uyar›m›za geçelim. Formüllerimizde as›l olan görüntü de¤il so-
nuç de¤erdir. D1 hücresinde eflitli¤in sa¤ ta-
E⁄ER FORMÜLÜ NEDEN ‹fiE raf›ndaki ifade “Sal›”, ancak dikkat ederseniz
YARAMIYOR? bunun t›rnak içerisine al›nm›fl oldu¤unu gö-
Soru 4: Merhaba, öncelikle sizlere siteniz receksiniz; yani bir metinsel ifade. Oysa sol
için teflekkür etmek istiyorum. Siteniz saye- taraf›ndaki de¤er C1 yani “Sal›” görüntüsü-
sinde Excel'in gücünü ve yapabileceklerimi nün as›l olan tarihsel de¤eri 01.01.2002. Do- fiekil-14: Özellefltir penceresini Araç Çu-
keflfettim. ‹lgiyle sitenizi takip ediyorum. fiu ¤al olarak 01.01.2002 <>Sal›”. buklar› üzerinde farenin sa¤ tufluna t›kla-
an üzerinde çal›flt›¤›m bir programda, flöyle O halde formülümüzde baz› de¤ifliklikler yarak da çal›flt›rabilirsiniz.

63• CHIP Workshop >>


>> Excel Serisi

fiekil-8: Project penceresinde o an aç›k olan dosya haricinde bir de Personal.XLS dosyas›n›n
aç›k oldu¤unu görüyoruz.

fiekil-12: C1 hücresinde “Sal›” yazd›¤› hal-


de D1 hücresinde yine arad›¤›m›z sonuç
görünmüyor.

kini bana sa¤lad›n›z. Soruma gelince;


Bir firma için tamamen amatör duygular-
fiekil-10: Personal.xls dosyas› otomatik olarak Xlstart klasörüne kaydeder. la Excel uygulamalar› kullanarak bir siparifl
haz›rlama program› yapt›m. Ancak baz› ne-
Cevap 5: Önizleme penceresi ile Userform denlerden dolay›, di¤er kiflilerin eline geçti¤i
ayn› anda aç›k oldu¤unda Excel kilitlenecek- takdirde belirli bir süre sonra çal›flamaz hale
tir. Bu nedenle Önizleme yapabilmek için ön- gelmesini istiyorum. Henüz makro yazmada
ce formu kapatmal›, sonra da önizlemeyi aç- çok usta olmad›¤›mdan bunu baflaramad›m.
mal›s›n›z. Form üzerine yerlefltirdi¤iniz bir Yard›mc› olursan›z sevinirim. E¤er gerekli
CommandButton'a afla¤›daki kodu yaz›n›z. olursa yapt›¤›m uygulamay› verece¤iniz bir
Private Sub CommandButton1_Click() adrese yollayabilirim. fiimdiden teflekkürler
Unload UserForm1 (M.Gürcan ‹LGEN)
ActiveWindow.SelectedSheets.PrintPreview
End Sub Cevap 6: Dosyan›zda VeryHidden olarak
fiekil-9: Personal.xls dosyas› otomatik
Bu kodda sizin de hemen anlayaca¤›n›z gizlenmifl bir sayfa olsun. Bu sayfay› VBA ko-
olarak Xlstart klasörüne kaydeder.
gibi, Önce UserForm kapat›l›yor, sonra da du aç›lmad›¤› sürece kimse göremez. Sizin
Önizleme penceresi aç›l›yor. için haz›rlad›¤›m kodda bu sayfay› "Sayfa1"
hücresindeki formül do¤rulanacak ve “nö- olarak de¤erlendirdim. fiimdi çal›flma kitab›-
betçiyim” ifadesi sonuç olarak atanacakt›r. SADECE EXCEL KULLANARAK n›z›n bir modülüne afla¤›daki kodu yaz›n.
YAPILAN EXCEL PROGRAMINA
USERFORM VE ÖN‹ZLEME PENCERES‹ SÜRE SINIRI KOYMAK Sub Auto_open()
Soru 5: Excel’de haz›rlad›¤›m bir programda Soru 6: Merhabalar, Öncelikle bu siteyi ha- If Worksheets("Sayfa1").Range("A1") = p
kullan›c› tamamen UserForm’lar üzerinde z›rlamakta eme¤i geçen herkese teflekkür "" Then
çal›flacak. Bir UserForm çal›fl›rken Excel'in ederim. Uzun zamandan sonra tekrar beni Worksheets("Sayfa1").Range("A1") = Date
herhangi bir sayfas›n› önizleme yapt›rabilir bilgisayar bafl›na döndürdünüz ve 40 yafl›n- Worksheets("Sayfa1").Range("B1") = Date
miyim? (Ünal fianver) dan sonra yeniden bir fleyler üretmenin zev- Else
Worksheets("Sayfa1").Range("B1") = Date
If Worksheets("Sayfa1").Range("B1") p
- Worksheets("Sayfa1").Range("A1") >= p
30 Then
MsgBox "Süreniz bitti"
End If

fiekil-11: C1 hücresinde arad›¤›m›z tarih belirdi. 01.01.2002 End If


End Sub

Benim MsgBox "Süreniz bitti" yazd›¤›m


yere siz isterseniz dosyay› kapatan bir kod ya
da biri haricinde di¤er sayfalar› silen bir kod
yazabilirsiniz.
M. Temel Korkmaz

fiekil-13: METNEÇEV‹R ifllevini kulland›¤›n›zda do¤ru sonuca ulaflacaks›n›z temelkorkmaz@excel.gen.tr

<< CHIP Workshop • 64


Java Serisi
<<

JAVA ile Programlama Bölüm 4


Geçen dersimizde Java Programlama diline genel bir girifl yaparak bu dilin önemli özelliklerini ve
bu dil ile program yazabilmek için gerekli olan ilk ayarlar›n nas›l yap›laca¤›n› görmüfltük.

erkese yeniden merhaba! Üç say›d›r Geçen hafta verilen uygulaman›n çözümü Su dolu bardagi sahibine getir

H yay›mlanmakta olan Java derslerimi-


zin dördüncüsünde tekrar birlikteyiz.
Geçti¤imiz üç say› boyunca hep programla-
Dersimize son dersimizde verdi¤imiz uygu-
laman›n çözümü ile bafllayaca¤›z. Uygula-
mam›z› tekrar hat›rlatal›m:
‹flte siz her su isteme ifllemi için bu üç ko-
mutu robota vermek yerine, sadece bir defa
“su getir” görevini tan›mlayabilirsiniz. Daha
man›n temelini teflkil eden kavramlara de- Uygulama: Kendi bafl›n›za içerisinde sonra da su istedi¤inizde, sadece bu görevi
¤indik. Bu kavramlar›n asl›nda sadece Ja- isimler saklayan bir dizi yarat›n ve daha son- robota vermeniz, bu üç komutun çal›flt›r›l-
va’da de¤il, tüm programlama dillerinde bu- ra bu dizide kullan›c›dan ald›¤›n›z bir ismi mas› için yeterli olacakt›r. Sonuçta, Java’da
lundu¤unu vurgulamak isterim. Bundan arat›n. E¤er isim dizinin içerisinde bulunursa da metodlar bu flekilde birden fazla komutu
sonraki derslerimizde art›k bu genel kavram- bu ismin indeks numaras›n› ekrana yazd›r›n. tek seferde ve istenildi¤i zaman çal›flt›rabil-
lar›n yan› s›ra daha özel programlama tek- Bulunamazsa ismin bulunamad›¤›na dair bir mek amac›yla tasarlan›r.
niklerini ö¤renece¤iz. mesaj yazd›r›n. Afla¤›daki örnekte (Metod.java), ekrana
Bu dersimizden itibaren iflleyifl ile ilgili bir Çözüm:http://cs.bilgi.edu.tr/~erman/ sadece Merhaba yazan bir metod gösteril-
de¤ifliklikten bahsetmek istiyorum. Bundan kodlar/Ara.java mektedir:
sonra uygulama amaçl› yazaca¤›m›z tüm Not: Örne¤i http://cs.bilgi.edu.tr/~erman/
kodlar› sadece yaz› içerisinde de¤il, online Metod kavram› ve Java’da metodlar kodlar/Mesaj.java dosyas›nda bulabilirsiniz.
olarak da sizlere sunaca¤›m. Böylece ilk ola- Daha önce baz› noktalarda metodlara de¤in- “Mesaj.java“ örne¤inde de görüldü¤ü gi-
rak çal›flan program dosyalar›n› indirebile- mifltik. Metod denilen kavram›n, program bi “MesajGoster“isimli metod, main meto-
cek ve uygulamalar› daha ayr›nt›l› inceleye- içerisinde yaz›lm›fl küçük program parçalar› dunun bitti¤i yerde yarat›lm›flt›r. Ancak bu
bileceksiniz. Kodlar› bulabilece¤iniz adres: oldu¤unu söyleyebiliriz. Metodlar asl›nda
http://cs.bilgi.edu.tr/~erman/kodlar/ flek- önceden tan›mlanm›fl birtak›m ifllem flekille-
lindedir. ridir. Bu flekilde görevleri metodlar alt›nda
Bu dersimizde yine genel kavramlar içeri- oluflturarak gerekti¤inde ça¤›rabiliriz. Bunu
sinde yer alan metodlar› inceleyece¤iz. Bafl- flöyle bir örnekle hayalimizde canland›ral›m:
ka dillerde (C, C++ gibi) fonksiyon olarak da Yazm›fl oldu¤umuz program›m›z› bir ro-
isimlendirilen metodlar›n nas›l yarat›ld›klar›- bota benzetelim. Bu robota çeflitli görevler
n›, nas›l kullan›ld›klar›n› ve ne ifle yarad›klar›- yükleyelim. Bunlardan bir tanesi de “su ge-
n› inceleyece¤iz. Bu dersi okumadan önce tir” görevi olsun. Bu görev flu flekilde tan›m-
önceki üç dersimizi iyice çal›flm›fl, tüm örnek- lans›n:
leri tek tek yazm›fl olman›z› ›srarla tavsiye Mutfaga git
Mesaj.java örne¤i
ederim. Bardaga su doldur

15 • CHIP Workshop >>



>> Java Serisi

metodun da t›pk› main metodu gibi s›n›f›n


içerisinde yarat›ld›¤›na dikkat ediniz. Meto-
dun yarat›lmas› s›ras›nda ilk sat›rda
public static void MesajGoster()

fleklinde metodun ad› ve daha sonra da


{

} Mesaj2.java örne¤i Mesaj3.java örne¤i.


parantezleri içerisinde bu metodun ger-
çeklefltirece¤i komutlar yaz›lmaktad›r. çal›flmaya devam eder. Tabii ki metot ismi todun ( ) parantezleri aras›nda önce tür ad›
Metodun ad›n› yazd›¤›m›z bu ilk sat›ra “MesajGoster”den baflka bir isim de olabilir. ve daha sonra da parametre ad› yaz›larak ve
“metot bildirimi” denilir. Metot bildirimine Sadece buradaki örnekte bir metot yaz›lm›fl birden fazla parametre aras›nda da virgul
iliflkin ayr›nt›lar› bilgilerimiz artt›kça tamam- ve ad› öyle konulmufltur. Bu ak›fl prensibi her kullan›larak tan›t›labilir. Yani:
layaca¤›z. metot için geçerlidir. public static void Metod_Adi(<tür> p
Not: Metotlar› isimlendirirken boflluk b›rak›l- fiimdi ifllerimizi daha da genellefltirelim parmaetre1, <tür> parametre2) {
maz. (Mesaj Goster geçersiz ancak Me- ve ekrana sadece Merhaba de¤il de, istedi- }
saj_Goster gecerli bir metot ismidir) ¤imiz bir mesaj› gönderen bir metot olufltu- fleklinde bildirimi genellemek mümkün-
Not: Main metodu ve s›n›f kavramlar›na ral›m. Asl›nda bu ifli zaten JOptionPane s›n›- dür. Örne¤in:
sonraki derslerimizde de¤inece¤iz. f›n›n showMessageDialog isimli metodu ile public static void M(String mesaj): Sadece
yapabiliyorduk. Ancak bu metodun ad› çok String türünde bir parametre alan ve bu pa-
Metotlar›n ça¤r›lmas› uzun olmakla beraber program içerisinde rametreyi metot içerisinde “mesaj” ile tem-
fiimdi bu Mesaj.java dosyas›n› çal›flt›rmaya birden fazla yerde ça¤›rd›¤›m›zda çok fazla sil eden bir metot bildirimi.
kalkt›¤›m›zda, dosyan›n düzgün bir flekilde yer kaplad›¤›n› görmekteyiz. Bu yüzden ay- public static void Metod2(int x, double y):
çal›flt›¤›n› ancak ekranda hiç bir mesaj yaz›l- n› ifli yapan ve ad› sadece “M” olan bir me- Ad› x olan ve int türünde bir parametre ile
mad›¤›n› göreceksiniz. Sak›n flafl›rmay›n! tot yazal›m. Ancak bu metoda her seferinde ad› y olan ve double türünde bir parametre
Böyle olmas› çok normal. Bir metot yaz›ld›¤› hangi mesaj› yazaca¤›n› da göndermemiz alan ve kendi ad› da Metod2 olan bir meto-
zaman bu onun ayn› zamanda çal›flaca¤› an- gerekecektir. Çünkü her seferinde ekrana dun bildirimi.
lam›na gelmez. Metodun çal›flmas› için sizin baflka bir mesaj yaz›lmas›n› isteyebiliriz. ‹fl- Bu flekilde bildirimi yap›lan bir metodu
onu ça¤›rman›z gerekmektedir. Bunu robota te bu noktada karfl›m›za parametre kavra- ça¤›r›rken de metodun ad› ve daha sonra da
“su getir” emrini vermenize benzetebiliriz. m› ç›kar. ( ) parantezleri içerisine bildirimde verilen s›-
Siz bu emri daha önce tan›tm›fl olsan›z bile, rada ve türlerde de¤erle göndermemiz gere-
emri vermeden robot size su getirmez. Ayn› Metotlar›n Parametreler ile Kullan›m› kir. Mesela M isimli örnek metodumuza her
flekilde yaz›lm›fl bir metodun çal›flmas› için Parametreler yard›m›yla metotlara birtak›m seferinde String türünde farkl› mesajlar gön-
de metodun “program ak›fl›n›n oldu¤u yer- de¤iflkenler göndermemiz mümkündür. Ön- derebiliriz. Gönderilen her bir String de¤eri,
de” ça¤r›lm›fl olmas› gerekir. Bir metodu ça- ceki örneklerimizde MesajGoster isimli ör- metot bildiriminde “mesaj” isimli de¤iflkene
¤›rmak için metodun yarat›ld›¤› flekilde ad›n› nek metodumuzu parametresiz olarak kul- kopyalan›r ve metodun içerisinde de bu de-
ve ad›n yan›na da ( ) parantezlerini ekleme- land›k. Afla¤›daki örnekte M isimli metot, pa- ¤iflken arac›l›¤›yla ele al›n›r. Mesela bildirimi
miz gerekir: rametre ile çal›flan bir metot olup, ekrana, public static void Islem(int sayi, String mesaj)
MesajGoster(); kendisine parametre olarak gönderilen me- fleklinde yap›lm›fl olan bir metodu flu fle-
gibi... O halde örne¤imizde de metodun saj› basmaktad›r. killerde ça¤›rabiliriz:
çal›flmas›n› görmek için main metodu içeri- Not: Örne¤i http://cs.bilgi.edu.tr/~er- Islem(6, “Bugun hava guzel”);
sinde MesajGoster isimli metodumuzu ça¤›- man/kodlar/Mesaj3.java dosyas›nda bula- Islem(12, “Çok çal›flmak laz›m”);
ral›m: bilirsiniz. Islem(4, “Bilgi Üniversitesi Bilgisayar Bilimleri”);
Not: Örne¤i http://cs.bilgi.edu.tr/~erman/ Burada dikkat edilirse 6. sat›rda ça¤r›lan Burada yap›lan fley asl›nda metodun ça¤-
kodlar/Mesaj2.java dosyas›nda bulabilirsi- M metodu 10. sat›rda parametre ile bildiril- r›lmas› neticesinde gönderilen de¤erler, me-
niz. mifltir. Metot bildiriminde parametreler me- tod bildirimi ile tan›mlanan de¤iflkenlere s›-
fiimdi ekranda mesaj›n belirdi¤ini göre- ras›yla kopyalan›r (ya da atan›r.) Öyle ki;
ceksiniz. Bunun nedenini flu flekilde özetle- Islem(6, “Bugun hava guzel”);
yebiliriz: fleklinde metodu ça¤›rd›¤›m›zda 6 de¤eri
Program›m›z ilk çal›flt›r›ld›¤›nda her za- sayi de¤ikenine ve “Bugun hava güzel” de-
man main metodu “otomatik olarak ça¤r›l›r” ¤eri de mesaj de¤iflkenine atan›r ve metod
Daha sonra main metodu içerisinde yaz›lan içinde bu flekilde kullan›l›r.
her sat›rdaki komutlar s›ras›yla çal›flt›r›l›r. Ancak Islem(“Selam”, 12); gibi bir ça¤-
Program ak›fl› MesajGoster(); fleklinde yaz›l- r›m geçerli de¤ildir. Islem isimli metodun bil-
m›fl olan metot ça¤›rma komutuna geldi¤in- diriminde önce int türünde sonra da String
de MesajGoster metodunun yaz›ld›¤› yere türünde parametre yaz›lm›flt›r. Metodu ça¤›-
atlar ve buradaki komutlar› s›ras›yla çal›flt›- Metotlar ça¤r›ld›¤›nda program ak›fl› da
r›rken de ayn› s›raya uymam›z gerekti¤ini
rarak tekrar main metodunda kald›¤› yerden metodun yaz›ld›¤› yere gider. unutmayal›m.

<< CHIP Workshop • 16


Java Serisi
<<
ÖNEML‹ NOT: Özetle, metotlar› bildirirken flan bir diziyi “alfabetikSirala“ isimli metoda
metodun alaca¤› parametreleri tür ve para- gönderiyoruz. Bu metot kendisine paramet-
metre isimlerini yazarak, metotlar› ça¤›r›r- re olarak kar›fl›k s›rada isimlerden oluflan bu
ken de parametreler yerine de¤er göndere- diziyi alfabetik s›rada yeni bir dizi içerisinde
rek ifllem yapmaktay›z. Bu iki ifllemi birbirine oluflturarak geriye de bu yeni diziyi gönderi-
kar›flt›rmamal›y›z. yor.
Not: Örne¤i http://cs.bilgi.edu.tr/~erman/
Metotlarda Geri Dönüfl De¤eri Kavram› kodlar/DiziSirala.java dosyas›nda bulabilir-
Yukar›da da anlatt›¤›m gibi, metotlara birta- Alan.java örne¤i. siniz.
k›m parametreler göndererek baz› ifllemler Diziler metotlara parametre olarak akta-
yapmalar›n› sa¤lar›z. Bu ifllemler kendi içeri- metodun ça¤r›ld›¤› yere göndermektedir. Bu r›l›rken sadece isimlerinin aktar›lmas› yeter-
sinde uygulan›p tamamlanan ifllemler olabi- durumda hesaplanan alan de¤eri, return ifa- lidir. Örne¤imizde 5. sat›rda yarat›lan “liste”
lece¤i gibi, sonunda bir sonuç üretilen ifllem- desi ile metodun ça¤r›ld›¤› 9. sat›ra gönderil- isimli dizimiz, 6. sat›rda metot ça¤r›lmas› s›-
ler de olabilir. ‹flte sonuçta elde edilen bu de- mektedir. Buraya geriye gönderilen de¤er de ras›nda, parantez içerisinde sadece ismi ya-
¤erleri kullanabilmemiz için, metodun bu “sonuc“isimli de¤iflkene atanarak tutulmufl z›larak “alfabetikSirala“isimli metoda akta-
de¤erleri bize geriye göndermesi gerekir. olur. r›lmaktad›r.
Metotlar›n ifllemlerinin tamamlamas› neti- E¤er 9. sat›rda Diziyi parametre olarak alan metot bildi-
cesinde geriye gönderdikleri bu de¤ere “geri sonuc = alanHesapla( Double.parseDouble p riminde ise, parametre k›sm›nda gelecek
dönüfl de¤eri“ denilmektedir. Afla¤›daki ör- (yrcp) ); olan dizinin türü, [ ] sembolü ve bir paramet-
nekte parametre olarak bir çemberin yar›çap ifadesi yerine sadece re ad› yaz›lmas› gerekir. Örne¤imizde yarat-
de¤erini alan “alanHesapla” isimli metot, alanHesapla( Double.parseDouble(yrcp) ); t›¤›m›z “alfabetikSirala“ isimli metodun 12.
çemberin alan›n› hesaplayarak geriye bu de- fleklinde metodu ça¤›rsayd›k, metot içeri- sat›rdaki bildiriminde de, gelecek olan dizi
¤eri bize gönderiyor: sinden alan de¤eri gönderilecek, ancak bu parametresi “dizi“ isimli de¤iflkene aktar›la-
Not: Örne¤i http://cs.bilgi.edu.tr/~erman/ de¤eri tutacak “sonuc” gibi bir de¤iflken ol- cakt›r. Ancak bu de¤iflkenin de bir “String“
kodlar/Alan.java dosyas›nda bulabilirsiniz. mad›¤› için geriye gelen de¤er bofla gidecek- dizisi de¤iflkeni olarak tan›mland›¤›na dikkat
Örnekte de görüldü¤ü gibi, 9. sat›rda kul- ti ve ele al›namayacakt›. ediniz.
lan›c›dan istenen yar›çap de¤eri 10. sat›rda Bu örnekte dikkat edilmesi gereken bir di- “alfabetikSirala“ isimli metoda gelen bu
metoda parametre olarak gönderilmektedir. ¤er konu da; geri dönüfl de¤eri olan metotla- dizi, parametre aktar›m›ndan dolay› art›k
Ama asl›nda parametre olarak gönderilme- r›n bildirimlerinde void yerine bir tür ad› ya- metot içerisinde “dizi“ ismiyle kullan›lacak-
den hemen önce “Double.parseDouble()” z›lmas› gerekti¤idir. Örne¤imizde geriye t›r.
metodu ile bu String türündeki yar›çap de- gönderilen de¤erin türü “double”türünde “System“ s›n›f›n›n “arrayCopy“ isimli me-
¤eri double türüne dönüfltürülmekte ve dö- bir de¤er oldu¤u için oldu¤u için, 16. sat›rda todu, 1. parametre ile ald›¤› bir dizinin, 2. pa-
nüflüm sonucu gelen de¤er “alanHesapla” yap›lan metot bildiriminde metot isiminden rametre ile ald›¤› indeksinden itibaren, 3. pa-
isimli metoda parametre olarak gönderil- hemen önce geri dönüfl de¤erinin türünün rametre ile ald›¤› dizinin, 4. parametre ile al-
mektedir. Gönderilen bu parametre, metot yaz›ld›¤›n› görmekteyiz. Fakat önceki örnek- d›¤› indeksine, 5. parametre ile ald›¤› say›da
bildiriminde belirtilen “yaricap” isimli de¤ifl- lerimizde geri dönüfl de¤eri olmayan metot- eleman› kopyalar. Bu metot yard›m›yla, 14.
kene aktar›lmaktad›r. larda bu k›sma “void”yazm›flt›k. sat›rda oldu¤u gibi metot içerisinde “dizi“
NOT: Bu aktar›m neticesinde, gelen para- ismiyle tutulan orijinal dizimizin tüm ele-
metre art›k metot içerisinde yaricap ismiyle Dizilerin Metodlara Parametre manlar›, “sirali_dizi“ ismiyle yaratt›¤›m›z di-
kullan›lacakt›r. E¤er metot, 1'den fazla para- Olarak Gönderilmesi ziye kopyalanmaktad›r.
metreli bir metot olsayd›, bu durumda gön- Daha önce dizilerin ne amaçla yarat›ld›klar›- “Arrays“ isimli s›n›f›n “sort“ isimli meto-
derilen parametre de¤erleri ayn› s›ra ile, me- n› ve nas›l kullan›ld›klar›n› görmüfltük. Yaz›- du, kendisine parametre olarak verilen bir
tot bildiriminde tan›mlanan parametre de- m›z›n bu k›sm›nda hem metot kullan›m›n› diziyi s›ralamaktad›r. Biz de örne¤imizde bu
¤iflkenlerine aktar›lacakt›. biraz daha pekifltirmek, hem de diziler üze- metodu kullanarak “sirali_dizi“ içerisinde bir
Daha sonra “alanHesapla“metodu kendi- rinde pratik yapmak amac›yla dizilerin me- kopyas›n› ald›¤›m›z dizi isimli dizimizi s›rala-
sine gelen bu parametre'nin, “Math“s›n›f›- totlara aktar›lmas›n› inceleyece¤iz. maktay›z.
n›n “power“metodu yard›m›yla karesini ala- Afla¤›daki örnekte çeflitli isimlerden olu-
rak 3.14 (pi say›s›) ile çarpmakta ve üretilen Dizilerin geri dönüfl de¤eri
sonucu da 17. sat›rda oldu¤u gibi alan de¤ifl- olarak kullan›lmas›
kenine atamaktad›r. Bir diziyi geri dönüfl de¤eri olarak gönderir-
NOT: “Math.power“metodu 1. parametre ile ken benzer flekilde “return“ anahtar sözcü¤ü
kuvveti al›nacak say›y›, 2. parametre ile de önünde dizinin isminin yaz›lmas› yeterlidir.
bu say›n›n kaç›nc› kuvvetini alaca¤›n› belir- Ancak dikkat edilmesi gereken önemli nokta
ler. Geri dönüfl de¤eri olarak da hesaplad›¤› geriye gelen diziyi tutacak de¤iflkenin de bir
sonucu gönderir. dizi de¤iflkeni olmas› gerekti¤idir. Örne¤i-
mizde 16. sat›rda yaz›lan “return“ ifadesi ile
return Anahtar Sözcü¤ü yeni s›ral› dizimizi 6 sat›rda metodu ça¤›rd›-
Alan.java örne¤inde, 18. sat›rda kullan›lan ¤›m›z yere geri dönüfl de¤eri olarak gönder-
“return“ifadesi, önündeki de¤iflken de¤erini DiziSirala.java örne¤i. mekteyiz. 6. sat›ra gelen bu yeni dizi “gelen-

17• CHIP Workshop >>


>> Java Serisi

Dizi“ isimli dizi de¤iflkenine aktar›lmaktad›r. Histogram


Örnekte 19. sat›rda yazm›fl oldu¤umuz örne¤i
ekranlar›
“diziGörüntüle” isimli metod kendisine 1.
parametre ile gönderilen bir dizinin 2. para-
metre ile gönderilen bafll›¤› kullanarak içeri-
¤ini görüntülemektedir. Bu metot yard›m›y-
la orijinal ve s›ralanm›fl dizilerimizin içerikle-
rini de görüntülemekteyiz.
Bu örnekler sayesinde metot ve dizi kulla-
n›m›na iliflkin teknikleri daha iyi anlayaca¤›-
n›z› umuyorum. Yaz› içerisinde verilen ör-
nekleri mutlaka sat›r sat›r yazman›z› öneri-
rim. Böylece hiç fark›nda olmadan Java'da
birçok fleyin pratik hale geldi¤ini göreceksi-
niz.
fiimdi dizilere iliflkin son bir örnekle me-
tot ve dizilerin birlikte kullan›m›n› toparlaya-
l›m.
Not: Örne¤i http://cs.bilgi.edu.tr/~erman/
kodlar/HistogramSinifi.java dosyas›nda bu-
labilirsiniz.
Örne¤imizde 5. sat›rda “JOptionPane“ metodu ile s›ralanmaktad›r. En son olarak da set edilir. (Java'da nesnelerin öntan›ml› me-
isimli s›n›f›n “showInputDialog“ isimli meto- 20. sat›rda, yarat›lan bu dizi “return“ ifadesi totlar›n› sonraki derslerimizde inceleyece-
du, geri dönüfl de¤eri olarak kullan›c›n›n gi- ile metodun ça¤r›ld›¤› 7. sat›ra gönderilir. Bu ¤iz.) En son olarak da metot 36. sat›rda oldu-
rece¤i String bir de¤er göndermektedir ve bu gönderme neticesinde de yarat›lan ve s›ra- ¤u flekilde bu nesneyi showMessageDialog
de¤er de “Integer“ s›n›f›n›n “parseInt“ isimli lan bu dizi, liste isimli dizi de¤iflkenine atan- isimli metoda vererek ekranda görünmesini
metodu içerisine parametre olarak verilerek m›fl olur. sa¤lar.
integer bir say›ya dönüfltürülür. Dönüfltürü- 8. sat›rda, “Histogram“ isimli metot ça- Dikkat ederseniz daha önceki örnekleri-
len bu say› da “uzunluk“ isimli de¤iflkene l›flt›r›lmaktad›r. Bu metot kendisine para- mizde JOptionPane.showMessageDialog
atan›r. Daha sonra 7. sat›rda ”liste“ ismiyle metre olarak verilen bir dizinin her eleman›- isimli metoda hep bir mesaj yaz›yorduk.
yarat›lan dizimiz de, bu uzunluk de¤eri ka- n›n kendisini ve bu eleman›n karakter uzun- Ama bu sefer metoda, “ ” içerisinde yaz›lm›fl
dar olacakt›r. Ama dikkat ederseniz bu sefer lu¤u kadar * simgesini ekrana basar. Metot bir String mesaj› yerine, bir nesne gönder-
dizi yaratma ifllemi bizim yazd›¤›m›z “diziYa- bu ifllemi yapmadan önce ilk olarak “JTextA- dik ve tüm mesaj›m›z› da bu nesne içerisinde
rat“ isimli metod içerisinde yap›lmaktad›r. rea” denilen özel bir Java nesnesi yaratmak- yazd›k.
13. sat›rda tan›mlanan “diziYarat“ isimli tad›r. Bu nesne 25. sat›rda yarat›lmaktad›r. Bu derste en son yapt›¤›m›z örnek size
metot kendisine parametre olarak verilen Java nesneleri ve nesnelerin yarat›lmas› ko- biraz kar›fl›k gelse de sak›n ümitsizli¤e kap›l-
uzunlukta bir String dizisi yarat›r. Daha son- nusunu sonraki dersimizde ayr›nt›l› olarak may›n›z. Bu örnek,sadece bol bol metot ve
ra 16. sat›rda yaz›lan for döngüsü ile bu dizi- görece¤iz. 26. sat›rda “cikis“ isimli String de- dizi kullan›m›n›n irdelenmesi amac›yla veril-
nin elemanlar›n› kullan›c›dan alarak diziye ¤iflkeni de en son ekranda belirecek mesaj› mifltir. Genel yap›y› anlamaya çal›flman›z bi-
yerlefltirir. Bu ifllemi 17. sat›rda oldu¤u gibi, tutmak amac›yla oluflturulmaktad›r. Ancak le size bir çok fleyi ö¤retecektir.
for döngüsünün her i ad›m›nda, kullan›c›dan bu de¤iflken ilk yarat›ld›¤›nda içi bofl bir fle- Bol bol örnek içeren bu dersimizi burada
istedi¤i girifl de¤erini dizinin i. eleman›na kilde oluflturulmaktad›r. 28. sat›rdaki for sonland›r›yoruz. Verilen örnekleri mutlaka
atayarak yapmaktad›r. Daha sonra 19. sat›r- döngüsü ile dizinin her eleman› tek tek ele kendi bafl›n›za yazmaya ve iyice anlayana
da yarat›lan ve içerisine isimler yerlefltirilen al›nacakt›r. 29. sat›rda, i. ad›mdaki eleman kadar bir sonraki örne¤e geçmemeye özen
dizimiz “Arrays“ isimli s›n›f›n “sort“ isimli ve bir tab boflluk karakteri “cikis” de¤iflkeni- gösteriniz. Ayr›ca örneklerin haz›r olarak ya-
ne yaz›l›r. 30. sat›rdaki for döngüsü, i. ad›m- z›l› bulundu¤u tüm dosyalar› http://cs.bil-
da ele al›nan dizi eleman›n›n her karakteri gi.edu.tr/~erman/kodlar/ adresinde bulabi-
için ad›m ad›m * iflaretini yine cikis isimli de- lece¤inizi tekrar hat›rlat›r›m. Önümüzdeki
¤iflkene yazar. En son olarak da 33. sat›rda dersimizde art›k Java programlama dili
“cikis“ isimli de¤iflkenin sonuna “\n“ fleklide içerisinde nesne kavram›n›n ne oldu¤una ve
alt sat›ra geçme karakteri eklenerek 28. sa- s›n›flar›n tasar›m›na ayr›nt›l› olarak de¤in-
t›rdaki döngünün bir sonraki ad›m›na geçer ece¤iz. Böylece daha profesyonel program-
ve ayn› ifllemler di¤er dizi elemanlar› için de lar yazabilmek ad›na bir ad›m daha iler-
tekrarlan›r. Tüm dizi elemanlar› bu flekilde leyece¤iz. Tekrar görüflene dek sizlere
ele al›nd›ktan sonra, 35. sat›rda oldu¤u gibi baflar›lar diliyorum. Kodunuz aç›k olsun...
“cikisEkrani“ isimli nesnenin içerisinde yer Sevgi ve sayg›lar›mla,
alacak yaz›, yine bu nesneye ait öntan›ml› Erman Aykaç
“setText“ isimli metot yard›m›yla “cikis“ ‹stanbul Bilgi Üniversitesi
HistogramSinifi.java örne¤i. isimli de¤iflkenin içerisinde saklanan de¤ere Bilgisayar Bilimleri Bölümü

<< CHIP Workshop • 18

You might also like