You are on page 1of 15

indekiler

Web Programcl
Fscommand ve iki Flash
animasyonu arasnda iletiim
Fiyat: 9.000.000 TL
(KDV ve gnderim creti dahil)
Sipari iin:
http://abone.vogel.com.tr
CHIP WORKSHOPda BU AY
CHIP Workshop
Klasrn
ayralaryla
birlikte sipari
edebilir ve
kendi arivinizi
oluturabilirsiniz.
Kesin, biriktirin,
kendi arivinizi oluturun
CHIP Workshop Klasr
>> >>
Flash Serisi
Nesneler
Photoshop Serisi
Kabartma Yzeyli ekiller
Excel Serisi
USERFORMLAR LE ALIMAK - 1
Web Programcl
65 CHIP Workshop >>
H
atrlayacaksnz, getiimiz ay ge-
tURL() fonksiyonuyla Flash ile web
sayfas arasnda iletiim kurmu,
hatta Flash animasyonumuz zerinden
web sayfamz kontrol edebilmeye rnek
olarak Flash animasyonu iinden sayfam-
zn arka plan rengini deitirmitik. Bu ay
ise Flash-JavaScript arasnda etkileim ku-
rabilen bir baka fonksiyon olan fscom-
mand() global fonksiyonunu kullanacaz.
nce fonksiyonumuzu biraz tanyalm.
fscommand()
Flash 3 ile kullanlmaya balanan fscom-
mand sayesinde Flash animasyonu, Stan-
dalone Player (Flash animasyonlarnn ken-
di bana alabilmelerini salayan film oy-
natc ya da Host aplikasyonu (Flash ani-
masyonuna alabilmesi iin evsahiplii
yapan web tarayc veya Macromedia Di-
rector gibi harici aplikasyonlar) ile iletiim
kurabilmektedir.
Fscommandin kullanld balca 3 du-
rum sz konusudur:
1. Standalone Playere belli bir takm ko-
mutlar gndermek iin,
2. Web taraycdaki JavaScripte herhangi
bir komut gndermek iin,
3. Macromedia Director filmindeki Lin-
goyla iletiime gemek iin.
Biz bu durumlardan ikincisi zerinde du-
racaz. Ancak ilki ile de ilgili biraz bilgi ve-
relim.
Fscommand() fonksiyonunun kullanm
aadaki gibidir.
fscommand(komut, argman)
komut Uygulamaya gnderilen komut
dizesi (string). Standalone Player iin kulla-
nlan sabit komut isimleri olabilecei gibi,
JavaScript iin kendi tanmladmz bir de-
er de olabilir.
argman Uygulamaya gnderilen komut-
la ilgili parametre dizesi (string). Standalo-
ne Player iin kullanlan sabit komut isimle-
ri olabilecei gibi, JavaScript iin kendi ta-
nmladmz bir deer de olabilir.
Komut ve argman deerleri, ActionSc-
ript ifadeleri olmad srece ift trnak ii-
ne yazlmaldr. rnein kendi bana al-
acak Flash animasyonunun tam ekran ola-
rak almasn salamak iin animasyonu-
nuzda Flash aksiyonu olarak aadaki de-
erin girilmesi gerekir.
fscommand(fullscreen, true);
Standalone Playera gnderilen bu ko-
mut sayesinde oynatc Flash animasyonu-
nu tam ekran bir pencere iinde gstermesi
gerektiini anlar. Standalone Player iin
kullanlabilecek komut ve argmanlar un-
lardr.
<< <<
Fscommand ve iki Flash
animasyonu arasnda iletiim
Bu ay Flashin web sayfasyla iletiim kurabilmesine imkan veren bir dier nemli fonksiyon olan fscom-
mand fonksiyonunu tanyp, nasl kullanldn reneceiz. Ayrca bu fonksiyonu kullanarak iki farkl
Flash animasyonu arasnda iletiim kurmann yolunu greceiz.

Web Programcl
>> >>
<< CHIP Workshop 66
Bu tabloya bakarak kendi bana ala-
cak Flash animasyonunun hem tam ekran
olarak alp hem de film boyutunu orijinal
tutmasn salamak iin animasyonunuzda
Flash aksiyonu olarak aadaki deerlerin
ikisinin de u ekilde girilmesi gerektiini
syleyebiliriz.
fscommand(fullscreen, true);
fscommand(allowscale, false);
fscommand ile JavaScript etkileimi
fscommand fonksiyonu ile web sayfasnda-
ki JavaScripte bilgi gndermek iin Flashta
tek yapmanz gereken ey fscommand ile
bir komut ve bir argman yazmaktr. Asl
yaplacak ilem web sayfasnn kodlarnda
yer alr. Diyelim ki aynen geen ay olduu
gibi Flashtan web sayfamza JavaScript
yardmyla nce bir mesaj gnderen sonra
da sayfamzn arka plan rengini deitiren
bir uygulamay bu defa fscommand meto-
duyla yapmak istiyoruz. O zaman buyurun,
atlyemize geelim.
1. Flash pencerenizde bo bir sayfa an ve
bir isim vererek uygulamanz uygun bir ye-
re kaydedin. Oluturduunuz yeni sayfan-
zn iine buton yapmak iin bir ekil izin.
Bir yuvarlak olabilir mesela.
2. izmi olduunuz ekli seili hale getirin
ve Flash mensndeki Insert / Convert to
Symbol seeneini tklayn ya da klavyeniz-
deki [F8] tuuna basn. Alan pencereden
Button radyo dmesini sein ve OK tuu-
na basn. izmi olduunuz ekil artk bu-
ton haline geldi.
3. izmi olduunuz ekli seili halde iken
ve Action panelinden fscommand() acti-
on'n ift tklayn. Action script penceresi
iinde semi olduunuz action ile ilgili
kodlar belirecektir.
4. Kodlarn stnde yer alan Command ala-
nna mesaj goster Parameters alanna ise
Flash animasyonundan selam yazn. Bu
durumda ActionScript panelindeki kodlar
fscommand("mesaj goster",
"Flash animasyonundan selam");
eklinde olacaktr.
5. Flash dosyanz kaydedin ve menden Fi-
le / Publish seeneini tklayarak ya da
[Shift+F12] tularna basarak Flash dosya-
nz yaynlayn. Bu durumda .fla dosyanzn
kaytl olduu klasrde HTML ve SWF olarak
iki yeni dosya daha oluacaktr.
6. Bu noktada Flash dosyamz hazr. Artk
SWF dosyasn kullanacak olan HTML dok-
mannda Flash'i kontrol edecek JavaScript
kodlarn oluturabiliriz. HTML dosyanz
HTML editrnzde ya da Notepad'te an.
HTML sayfanzda Flash filminizi sayfanza
ekleyen kodlarda <OBJECT> taks iine
ID="Film"
parametresini ekleyin. <OBJECT> taks
iinde NAME isimli bir parametre olmad-
ndan emin olun. Varsa silin. Aksi takdirde
JavaScript-Flash etkileimi Netscape 6.2 ve
st versiyonlarda almayacaktr.
allowscale true ya da false Flash filminin boyutunun alan pencere ile
birlikte deimesi iin true, orijinal boyutunda
sabit kalmas iin false deerini semek gerekir.
exec applikasyon_ismi Flash filminin harici bir aplikasyonu
altrmasnda kullanlr. Argman olarak
kullanlacak deer uygulamann ismidir. Gerektii
durumda greli ya da salt yol adresini de eklemek
gerekebilir.
C:/WINDOWS/NOTEPAD.EXE gibi
fullscreen true ya da false Flash filminin tam ekran bir pencerede almas
iin true, orijinal boyutunda bir pencerede
almas iin false deerini sein.
quit Flash filmini sona erdirip Standalone Player
kapatr.
showmenu true ya da false Flash filminin gsterildii Standalone Playerda
sa tklanmas durumunda ekranda men
grnp grnmemesini kontrol eder. Mennn
grnmesi iin true deerinin seili olmas
gerekir.
trapallkeys true ya da false Baz durumlarda animasyonunuzun klavye
tularna duyarl olmas gerekebilir. Mesela oyun
uygulamalarnda olduu gibi Bu durumda true
deerli trapallkeys komutu, klavye vurularn
Flash animasyonunuza gnderecektir.
Komut Argman levi
Web Programcl
67 CHIP Workshop >>
<< <<

7. HTML sayfanzda Flash filminizi sayfan-


za ekleyen kodlarda <EMBED> taks iine
NAME="Film" swLiveConnect="true"
parametrelerini ekleyin. <EMBED> taks
iinde ID isimli bir parametre olmadndan
emin olun. Varsa silin.
8. </HEAD> taksnn hemen stne aa-
daki script kodlarn ekilde grld gibi
yazn
<SCRIPT language="JavaScript">
function Film_DoFSCommand(komut,
param) {
if (komut=="mesaj goster") {
alert(param);
document.bgColor="Red";
}
}
</SCRIPT>
<SCRIPT language="VBScript">
on error resume next
Sub Film_FSCommand(ByVal command,
ByVal args)
call Film_DoFSCommand(command, args)
end sub
</SCRIPT>
9. HTML dosyanz kaydedip altrdnz-
da Flash SWF dosyanz iindeki buton
HTML sayfanzda grnecektir. Butona tk-
ladnzda ise nce bir JavaScript mesaj
belirecek.
10. OK tuuna basnca ise sayfanzn arka
plan renginin krmzya dntne ahit
olacaksnz.
Bylece fscommand fonksiyonu yard-
myla bir Flash animasyonu iinden HTML
sayfamza mdahale etmi ve sayfamzn
arka plan rengini deitirmi olduk.
Nasl alyor?
Fscommand fonksiyonuyla JavaScripte
gnderilen bir komutu alglayabilmek iin
belirli formatta isme sahip bir JavaScript
fonksiyonu tanmlamamz gerekir. Format
u ekildedir.
function movieID_DoFSCommand(komut,
param) {
if (komut=="komutumuz") {
// fonksiyonumuzdan
yerine getirmesini istediimiz ileri
// buraya yazyoruz.
}
}
Fonksiyonumuzun isminde yeralan mo-
vieID, HTML sayfanzda Flash filminizi say-
fanza ekleyen kodlarda <EMBED> taks ii-
ne ki NAME="Film" ve <OBJECT> taks iin-
deki ID="Film" parametrelerinin deeri olan
Film deeri olmaldr.
Fonksiyon tanmmz iindeki en i ks-
ma ise fonksiyonumuzdan yerine getirme-
sini istediimiz ileri sralyoruz. Mesela bir
mesaj kutusunun grnmesi ve arka plan
rengini deitirecek kodlar olabilir bunlar.
Bu durumda script'imiz u ekilde gr-
necek.
function Film_DoFSCommand(komut,
param)
if (komut=="mesaj goster") {
//eer gnderilen komut mesaj gster ise
alert(param);
// param deeri olan Flash
animasyonundan selam
// dizesini gster.
document.bgColor="Red";
// arkaplan rengini
deitir.
}
}
ki Flash animasyonu arasnda
haberleme
StudioWebin bu ve bundan nceki son sa-
ysnda Flashten JavaScripte, JavaSc-
riptten de Flashe bilgi gndermenin yolla-
rn rendik. JavaScriptin web sayfalar
zerindeki kontrol gcnden hareketle, -
renmi olduumuz bu yntemlerle ayn
sayfada, hatta iki farkl frame ya da iki fark-
l pencerede yer alan iki farkl Flash animas-
yonunun birbiriyle haberlemesini salaya-
biliriz. Nasl m? Bilgiyi nce Flash uygula-
malarnn birinden HTML sayfasndaki Ja-
vaScripte, ondan da dier Flash uygulama-
sna gndererek. Bu yntem sayesinde bir-
biriyle etkileim iinde olabilen ilgin Flash
uygulamalar gerekletirebilirsiniz. rne-
in iki farkl kullanc tarafndan paylalan
bir oyun program ya da pop-up pencere-
sindeki bir Flash uygulamasnda elde edilen
deerlerin bir dierine tanmas veya akta-
rlmas olabilir.
Bu seferki atlyemizde, ayn sayfada yer
alacak iki Flash uygulamasndan birine giri-
len deer bir dierinde gzkecek.
1. Flash pencerenizde bo bir sayfa an ve
bir isim vererek uygulamanz uygun bir ye-
re kaydedin. Oluturduunuz yeni sayfan-
zn iine bir metin ekleyin ve isminizi gi-
rin yazn.
2. Metin alanna ait Properties panelinden
metin tipi olarak Input Text deerini sein.
Ayrca metnimizin etrafnda bir izgi olu-
turmak iin Show border around text buto-
nunu tklayn. Var alanna ise deiken ismi
olarak girdiAlani deerini girin.
3. izmi olduunuz eklin altna dme
yapmak amacyla bir dikdrtgen izin ve bu
dikdrtgenin stne static olacak ekilde
Gnder metnini girin.
4. Dikdrtgeni ve stndeki metnin ikisini
birden seili hale getirin ve Flash mensn-
deki Insert / Convert To Symbol seeneini
tklayn ya da klavyenizdeki [F8] tuuna ba-
sn. Alan pencereden Button radyo d-
mesini sein ve OK tuuna basn. izmi ol-
duunuz ekil artk buton haline geldi.
5. Butonunuz seili halde iken Action pane-
linden fscommand() action'n ift tklayn.
Fscommand ile ilgili alan alanlara gerekli
bilgilerin girilmesi gerekecek. Command
alanna bilgiyiGonder yazn. Parameters
alanna ise girdiAlan ifadesini girip, sa-
nda bulunan Expression ifadesini seili
hale getirin. Bu durumda ActionScript pen-
ceresindeki kodlarnz aadaki gibi grn-
melidir:
on (release) {
fscommand("bilgiyiGonder",
girdiAlani);
}
Web Programcl
>> >>
<< CHIP Workshop 68
Flash dosyanz kaydedin. Menden File
/ Publish seeneini tklayarak ya da
[SHIFT+F12] tularna basarak Flash dosya-
nz yaynlayp SWF dosyasn alabilirsiniz.
6. Flash pencerenizde baka bir bo sayfa
an ve farkl bir isim vererek uygulamanz
ayn yere kaydedin. Oluturduunuz yeni
sayfanzn iine bir metin ekleyin. Ve Bura-
ya isminiz gelecek yazn.
Metin alanna ait Properties panelinden
metin tipi olarak Dynamic Text deerini se-
in. Ayrca metnimizin etrafnda bir izgi
oluturmak iin Show border around text
butonunu tklayn. Var alanna ise deiken
ismi olarak isim deerini girin. Filminizi
yaynlayp SWF dosyasn oluturun.
7. Ayn klasrde iki adet SWF dosyas elde
etmi olduk. Ayn klasrde bo bir HTML
sayfas oluturun, yaynlanma annda olu-
mu baka HTML dosyalar varsa onlar sile-
bilirsiniz. nk ihtiyacmz olmayacak. Her
iki Flash animasyonunu da oluturduunuz
bu sayfaya ekleyecek standart kodlar ilave
edin.
69 CHIP Workshop >>

HTML dosyanzn arka plan rengini be-


yazdan farkl bir ton olarak belirleyin ki Flash
dosyalarn ekranda daha net grebilesiniz.
8. lk Flash uygulamamz isim soran, ikincisi
ise ismi gsterecek uygulama olacak. Her iki
Flash dosyasnn da <OBJECT> taksnn iine
birer ID parametresi ekleyin. <OBJECT> tak-
lar iinde NAME isimli bir parametre olma-
dndan emin olun. Varsa silin. sim soran
uygulamanzn ID deerini Film1, isim gs-
teren uygulamanzn ID deerini ise Film2
olarak girin.
HTML sayfanzda her iki Flash filminin
<EMBED> taklar iine NAME parametreleri-
ni ekleyin. sim soran uygulamanzn NAME
deerini Film1, isim gsteren uygulaman-
zn NAME deerini ise Film2 olarak girin.
<EMBED> taks iinde ID isimli bir paramet-
re olmadndan emin olun. Varsa silin. Ayr-
ca swLiveConnect="true" parametresini de
ekleyin.
9. </HEAD> taksnn hemen stne yandaki
ekilde grld gibi aadaki script kod-
larn yazn
<SCRIPT language="JavaScript">
function Film1_DoFSCommand
(komut, param) {
if (komut=="bilgiyiGonder") {
var ad=param;
document.Film2.SetVariable("/:isim",ad);
}
}
</SCRIPT>
<SCRIPT language="VBScript">
on error resume next
Sub Film1_FSCommand(ByVal command,
ByVal args)
call Film1_DoFSCommand(command, args)
end sub
</SCRIPT>
10. Sayfanz kaydedip altrdnzda sol-
daki Flash filminde bulunan alana girecei-
niz bir deer, dmeye basld anda sada-
ki Flash filminde grnecek.
Burada zerinde en dikkat edilmesi gere-
ken konu ilk Flash dosyasndan gelen param
deerinin (ki bu girilen ismin bilgisini ta-
yor) ad isimli bir JavaScript deikenine kay-
dedilip,
var ad=param;
ikinci filmde yer alan isim adndaki dina-
mik metin alannn deeri olarak atanmas
olaydr. Buradaki isimlendirmelere dikkat
edin.
document.Film2.SetVariable("/:isim",ad);
Notlar:
Geen ayki yazmz okumam olanlar iin
tekrar hatrlatalm. Flash ile JavaScript iletii-
mini her tarayc modeli gerekletirmez.
rendiimiz iletiim metodunu aadaki
modellerde kullanabilirsiniz.
Netscape Navigator 3.0 - 4.7x, ve Netscape
6.2 veya st modeller
(Windows 95/98/NT/2000/XP veya MacOS;
LiveConnect ve Java destekli)
Internet Explorer 3.0 ve st
(Windows 95/98/NT/2000/XP; ActiveX des-
tekli)
Aadaki tarayc modelleri Flash-Ja-
vaScript iletiimini desteklemez:
Macintosh zerindeki Internet Explorerlar
Netscape 2, Netscape 6 ve 6.01 ya da Java
destei olmayan Netscape tarayclar
Flash MX ile beraber tantlan ve iki farkl
Flash filminin haberlemesi iin bir baka
yntem olan Local Connection nesneleri de
mevcuttur.
Local Connection nesneleri hakknda bilgi
edinmek isteyenler http://www.macrome-
dia.com/support/flash/action_scripts/lo-
cal_connection_objects/index.html adresi-
ni ziyaret edebilirler.
Numan Pekgz
numanpekgoz@chip.com.tr
<< <<
Web Programcl
Video: Ayn sayfadaki iki Flash
filmi arasnda haberleme
ki Flash filmi arasndaki haberlemeyi konu
alan atlyemizin eitim videosuyla uygulama-
larn kaynak kodlarn bu ayki eCHIP'te yer alan
StudioWeb+ blmnde bulabilirsiniz.

eCHIP StudioWeb+da bu ay:


Flash Serisi
M
acromedia Flash programnn nes-
ne ynelimli (object oriented) bir
programlama diline sahip oldu-
undan daha nceki saylarmzda da bah-
setmitik. Nesne ynelimli programlama
mantn yle bir hatrladktan sonra
Flash ierisinde tanml nesneleri ve kulla-
nmlarn inceleyeceiz. Bildiiniz gibi,
Flash ierisinde farkl nesne tanmlaya-
biliyoruz. Bunlar movie clip, button ve grap-
hic. Bu nesnelere Action Script kodlar ile
erierek zelliklerini, deerlerini veya du-
rumlarn deitirebiliyoruz. Tabii bu nes-
nelere eriirken Flash ierisinde instance
name tanmlyoruz.
Flash ierisinde Action Script ile gelen
nesneler de yer almaktadr. Bu nesnelerin
zelliklerini deitirmemiz veya durum bil-
gisi iin faydalanmamz Action Script ile
mmkn olmaktadr.
Flash ierisinde yer alan nesneler Action
Script panelinde Objects kategorisinde yer
almaktadr.
Array, Boolean, Color, Date, Key, Math,
MovieClip, Mouse, Number, Object, Selecti-
on, Sound, String, XML, XMLSocket
Nesne oluturmak:
Nesneler newifadesi kullanlarak veya Acti-
on Script panelinde yer alan Objects katego-
risindeki aksiyonlar dorudan kullanlarak
elde edilir.
Burada en ok kullanlan nesnelerin kul-
lanmlarn inceleyeceiz.
Mouse
hide ve show olmak zere iki kullanm yer
almakta.
Mouse.hide(); ile fare imlecini grnmez
yapyoruz.
Mouse.show(); fare imleci gzkecektir.
Ayrca Action panelinde Properties kate-
gorisinde yer alan _xmouse ve _ymouse
paremetrelerini kullanarak farenin x ve y
koordinatlarn elde edebiliyoruz. Ksaca;
onClipEvent (mouseMove) {
x = _root._xmouse;
y = _root._ymouse;
}
bir movie clip tanmlayp yukardaki ak-
siyonlar ekleyin, x ve y deiken isminde iki
tane dynamic zellikte text tool oluturun.
Grdnz gibi, fare hareket ettike koor-
dinatlar elde etmekteyiz.
Date
Tarih nesnesi Flash'n alm olduu siste-
min saatini ve tarihini vermektedir.
Kullanm ekli;
tarih = new date(); ile tanmlama yapyo-
ruz. Daha sonra aadaki argmanlar kul-
lanarak istediimiz bilgileri elde ediyoruz.
getDate Ayn kanc gn olduunu verir.
3 Austos iin: 3
getDay Haftann kanc gn olduunu
verir. Pazartesi iin: 1
getFullYear Yl verir. 2003
getHours Saati verir. 12.15 iin: 12
getMilliseconds milisaniyeyi verir
getMinutes dakikay verir.
getMonth yln hangi aynda olduumuzu
verir.
getSeconds saniyeyi verir.
getTime 1 Ocak 1970 geceyarsndan bu za-
mana kadar geen sreyi milisaniye olarak
verir.
tarih = new date(); belirlerken parantez
iine yazacamz deerler ile tarihi belirli-
yoruz. Bo brakrsak sistemin deerlerini
almaktadr.
tarih = new date (yl, [ay, [gn, [saat,
[dakika, [saniye, [milisaniye ]]]]]] ) rnekte-
ki srasyla deerleri girebiliriz.
Gnn tarihi;
ki satrdan oluan "tarih" isimli dynamic
bir text alan oluturun.
gunler = ["Pazar", "Pazartesi", "Sal", "aramba",
"Perembe", "Cuma", "Cumartesi"];
aylar = ["Ocak", "ubat", "Mart", "Nisan",
"Mays", "Haziran", "Temmuz", "Austos",
"Eyll", "Ekim", "Kasm", "Aralk"];
tarihnesnesi = new Date();
gun = tarihnesnesi.getday();
ay = tarihnesnesi.getMonth();
_root.tarih = tarihnesnesi.getDate()+" "+
aylar[ay]+" "+tarihnesnesi.getFullYear()+"
\r"+gunler[gun];
\r ifadesi satrba iin kullanlmaktadr.
Sonu:
1 Austos 2003
Cuma
Array
Array, Trke'de dizi olarak gemektedir. Bu
deikenleri, tek bir tanmlama yapp ileri-
ne birden fazla deer atayarak kullanabil-
mekteyiz.
Kullanm ekli;
dizi[0] = ali;
dizi[1] = adiye
dizi[2] = fatih;
dizi[3] = sevgi;
dizi[4] = eyp;
dizi[5] = didem;
eklinde veya daha kullanl bir yn-
temle;

Nesneler
22 CHIP Workshop >>
<< <<
isimler = new Array("ali", "fatih", "eyp");
isimler.reverse();
trace(isimler);
//isimler = eyp, fatih, ali
slice
dizi iinden eleman karmak iin kullanlr.
isimler = new Array("ali", "fatih", "eyp" ,
"didem");
isim=isimler.slice(1,3);
trace(isim);
// slice(1,3) ilk deer kanc elemandan
balayacan, ikinci deer ise ilemin ka-
nc elemanda biteceini belirtmektedir. 1.
eleman fatih, 3. eleman ise didem'dir. 1. ve
2. elemanlar iin slice ilemi uygulanr.
// sonu: fatih, eyp
sort
Dizideki elemanlar belirli bir sraya dizmek
iin kullanlr.
isimler = new Array("ali", "fatih", "eyp",
adiye, sevgi, didem);
isimler.sort();
trace(isimler);
// ali,didem,eyp,fatih,sevgi,adiye
splice
Dizi iindeki elemanlar silmek iin kullan-
lr.
splice(,) kanc elemandan balayp ka
tane silineceini belirtilir.
isimler = new Array("ali", "fatih", "eyp", "sezen",
"pelin", "bahar");
isimler.splice(3,3);
trace(isimler);
// ali,fatih,eyp
isimler = new Array(ali, adiye, fatih,
sevgi , didem, eyp)
ilk deer dizide 0. deikendir. Yani dizi
elemanlar sfrdan balar.
concat
dizilerin iine yeni elemanlar eklemek veya
iki diziyi birletirmek iin kullanlr.
erkek = new Array("ali", "fatih", "eyp");
kz = new Array("adiye", "sevgi", "didem");
isimler=erkek.concat(kz);
trace(isimler);
join
dizideki elemanlarn tmn aralarna iste-
nilen bir karakter ekleyerek tek bir string
haline evirir.
erkek = new Array("ali", "fatih", "eyp");
isimler=erkek.join("-");
trace(isimler);
toString
join metodu ile ayndr, yalnz deerler ara-
sna yalnz virgl eklenerek tek bir string el-
de edilir.
push
bir dizinin sonuna ekleme yapar. Atama ya-
plan say deikeni toplam deer saysn
verir.
isimler = new Array("ali", "fatih", "eyp");
say=isimler.push(adiye, sevgi, didem);
trace(say);
trace (isimler);
unshift
push komutunun tersidir, dizinin bana ek-
leme yapar.
isimler = new Array("ali", "fatih", "eyp");
say=isimler.unshift(adiye, sevgi, didem);
trace(say);
trace (isimler);
shift
dizideki ilk eleman kartmak iin kullan-
lr.
isimler = new Array("ali", "fatih", "eyp");
isim=isimler.shift();
trace(isimler);
//isim = ali , isimler= fatih, eyp
pop
dizideki son eleman kartmak iin kullan-
lr.
isimler = new Array("ali", "fatih", "eyp");
isim=isimler.pop();
trace(isimler);
//isim = eyp , isimler= ali, fatih
reverse
dizi iindeki elemanlarn sralann tersine
evirir.
Key
Klavye tularna dorudan eriim sala-
maktadr. Key komutu sayesinde nesneleri
klavye ile kontrol edebilmekteyiz. Flash ile
oyun tasarmnda daha ok ihtiya duyul-
maktadr.
onClipEvent (enterFrame) {
if(Key.isDown(Key.RIGHT)) {
setProperty ("", _x, _x+10);
}}
veya
onClipEvent (enterFrame) {
if(Key.isDown(39)) {
setProperty("", _x, _x+10);
}}
Yukardaki kodlar bir movie clipe atan-
mtr. Klavyeden sa ok tuuna basldn-
da movie clip bulunduu yerden saa do-
ru 10 piksel kaymaktadr.
Key.isDown() parantez iine aadaki
klavye kodlar yazlarak yukardaki rnekte-
ki gibi kullanlabilir.
BACKSPACE (9).
CAPSLOCK (20).
CONTROL (17).
DELETEKEY (46).
DOWN (40).
END (35).
ENTER (13).
ESCAPE (27).
HOME (36).
INSERT (45).
LEFT (37).
PGDN (34).
PGUP (33).
RIGHT (39).
SHIFT (16).
SPACE (32).
TAB (9).
UP (38).
Bir movie clip oluturun ve aadaki ko-
du ekleyin.
onClipEvent (enterFrame) {
trace (Key.getAscii());
}
movieyi test edin, her bastnz tuun
ascii deerini elde edeceksiniz.
Key.getCode(); eklerseniz Flash ierisin-
de kullanabilmek iin tularn kodlarn el-
de edeceksiniz.
Macromedia Flash ile ilgili her trl soru
ve isteklerinizi bize iletebilirsiniz.
Ali YCEL
aliyucel@chip.com.tr
Flash Serisi
>> >>
<< CHIP Workshop 23
Photoshop Serisi
23 CHIP Workshop >>
<< <<
Kabartma Yzeyli ekiller
k grnen grafikler hazrlamak iin mutlaka eklenti paketlerini kullanmanz gerekmez.
Doru efektleri yerinde kullanarak siz de baarl almalar yapabilirsiniz.

ncelikle ortalama 300x300 piksellik saydam


(transparent) arka plana sahip bir belge olutura-
rak ileme balayalm. Daha sonra yukardan aa do-
ru seim aracn kullanarak izgi eklinde bir seim ya-
pn ve iini siyah renk ile doldurun. Daha sonra resimde
grld gibi 2 kat kalnlnda, siyah izgiyi de iine
alacak ekilde aa doru ikinci bir seim daha olutu-
run. Edit mensnden Define pattern seeneini sein.
imdi [Ctrl+A] ile resmin tmn sein.
Edit mensnden Fill seeneini ve Pattern'i sein.
Ekran izgilerle dolunca tekrar tmn sein
[Ctrl+A] ve kopyalayp [Ctrl+C] tekrar yaptrn [Ctrl-V].
Edit / Transform seenei altndan Rotate 90 degrees
CW'yi sein ve Layer mensnden bu iki katman Mer-
ge down ile birletirin. Filter / Distort / Spherize seene-
ini 40 deeri ile kullann. Lasso aracn sein ve krk
ekli iin bir blm seip silin. Smudge aracyla baz
izgileri resimdeki gibi uzatn.
imdi [Ctrl] tuuna baslyken katmana tklayp
ekli sein. Seim geerliyken yeni bir katman ya-
ratp pas rengi ile doldurun. Filter / Blur / Gaussian blur
seeneini 1 deeri ile kullann. Bir nceki katman ze-
rinde Render / Lighting efektini kullann. Burada trans-
parency iaretli ve mountains deeri de 10 olmal. Daha
sonra Filter / Noise seeneini 20 deeri ile kullann.
Son olarak 5 deerinde feather uygulayp Image / Ad-
just / Hue-saturation seenei ile saturation deerini
biraz azaltn.
nce arka plan beyaz olan 300 x 300 piksellik bir
belge oluturun. Oluturmak istediiniz boruyu 50
piksel apnda Paintbrush arac ile ekrana izin. Magic
Wand aracyla eklinizi belirleyin. Seim geerliyken yeni
bir katman oluturup griyle doldurun. Gaussian blur filt-
resini 11 deeri ile kullann. Filter / Render / Lighting
efektini sein ve sadaki resimdeki ayarlar aynen uygu-
layn. Burada k sol stten gelecek ekilde yerletirilme-
lidir.
imdi yeni bir katman oluturup izgi aracn sein
ve 2 piksel kalnlnda eitli izgiler izin. [Ctrl] tu-
una basarken bu katmana tklayp izgileri sein. Yeni
bir katman daha oluturun ve seimi beyaz ile doldurup
Filter / Blur / Gaussian blur seeneini 1 deeri ile kulla-
nn. Ardndan katman saydamln (transparency) %50
yapn. Move arac ile beyaz izgileri bir miktar saa ve
aa kaydrn. Image / Adjust / Hue-saturation seenei
ile boruyu renklendirebilirsiniz.
Ypranm pasl zgara
Eski havalandrma borusu
Photoshop Serisi
>> >>
<< CHIP Workshop 24
Yeni bir RGB belge oluturarak balayn ve bunun
tam ortasna seim (marquee) arac ile bir daire
oluturup Edit / Fill / 50% grey seenei ile boyayn. Se-
im geerliyken yeni bir katman daha oluturun ve 5
piksellik bir Edit / Stroke ilemi uygulayn. Parann iin-
deki ekli istediiniz bir yerden seip dairenin tam orta-
sna gelecek gibi yaptrn. Sadaki resimdeki ayarlarla
Stylize / emboss filtresini uygulayn. Layer efektlerinde
outer glowuygulayp renk olarak siyah sein.
Byk gri dairenin olduu katmana gein ve 6 ya
da 7 deeri ile Noise filtresini uygulayn. Daha son-
ra Render / Lighting efektini sadaki resimdeki ayarlar
ile bu katmana uygulayn. Texture channel iin mavi se-
in ve height olarak 6 deeri verin. Aynsn stroked daire
katman iin de uygulayn ve bu katmana depth 3 ve
blur 3 deerleri ile glge verin. Arkaplan hari tm kat-
manlar birletirin. Son olarak sadaki resimdeki ayar-
larla Lighting efekt uygulayn.
ncelikle 200 x 200 piksel boyutlarnda bir belge
oluturun. Ardndan serbest izim kalemi ile elekt-
rik telinizin olmasn istediiniz ekilde bir izim yapn.
Daha sonradan direct selection arac ile bu ekli istedii-
niz gibi ynlendirebilirsiniz. imdi katman penceresine
geri dnp yeni bir katman oluturun ve tekrar Paths
penceresini sein. Sa stteki oka tkayn ve alan me-
nden stroke subpath'i sein. Artk bu pathe gerek kal-
mad iin silebilirsiniz.
Burada karnza gelecek olan bir diyalog kutusu
Paintbrush ayarlarn kullanmak isteyip istemedi-
inizi soracaktr. Bu pencerede OK tuuna tklayn. iz-
giler semi olduunuz n plan rengi ve yine semi ol-
duunuz fra ekli ve kalnl ile doldurulacaktr. Yani
eer krmz bir kablo istiyorsanz nceden n plan rengi
iin krmz semeyi unutmayn. imdi son olarak Layer
/ Layer effects / Bevel & emboss seeneini seip inner-
beveli default ayarlarla uygulayn.
Gm para
Elektrik teli
Photoshop iinde Filters mens al-
tnda Render seeneinde yer alan
Lighting Effects omni, spot ve directi-
onal k kaynaklarnn kullanm ile
Photoshop iinde yaratlm nesnele-
ri geree daha ok yaklatrrken
boyut kazandrmas asndan da ol-
duka iyi bir filtredir. Bunun iin sei-
minizi yaptktan sonra Layers pence-
resi altnda yer alan Channels kartna
geip yeni bir renk kanal oluturun
(Alpha). Daha sonra Lighting Effects'i
bu kanal kullanarak uyguladnzda
daha ho efektler elde edebilirsiniz.
KISA KISA

Lighting efekti: Kabartmalar iin birebir


Excel Serisi
36 CHIP Workshop >>
A
rtk Exceli biraz ileri dzey kullanan
okuyucularmz srekli Excel komut-
larn anlatan makalelerden skld-
lar. Bunu posta kutumuza gelen mesajlar-
dan anlyoruz. Hatta iki aydr yaptmz ya-
rmalara olan ilgi ve katlm da bunun bir
gstergesi olmutur. O halde bize den
grev, Exceli biraz da olsa ileri dzey bir e-
kilde retmenin temellerini atmaktr. El-
bette ki VBA konusunu, yani dier bir deyi-
le makrolar konusunu birka aylk makale-
de bitirmemiz mmkn deil. Ancak bura-
da baz kstaslar vermek ve baz rnekler
sunmak yerinde olacaktr. Konuya duyulan
ilgi bu sahada yazlm kaynak eserlerle
doyurulabilir.
Biz bu ay UserForm kullanarak Excel say-
fasna veri girmek, girilen veriyi silmek vb.
konular ele alacaz. Bu noktada tekrarla-
mak istiyorum ki, daha nce bu konu hak-
knda az da olsa bilgisi olan arkadalar sy-
lediklerimizi ve uygulamaya altklarmz
rahatlkla anlayabilecekken, konu hakknda
hibir bilgisi olmayan arkadalar ise zorla-
nacaklardr. Buna ramen sylediklerimizi
hi armadan uygularlarsa sorun olmaya-
caktr. Ancak bir uzmanlk konusu olan
VBAy da bir rpda kavrayabileceksiniz
demek de istemiyorum.
UserForm Nerede?
Excelin alma sayfalarnn hemen arka-
snda bulunan VBE (Visual Basic Editor)
penceresine bakarsanz UserFormlarn bu-
rada saklandklarn greceksiniz. Ancak
Excelin alma sayfasnn arkasna bak-
mak da ne demek? diye hayflanmayn he-
men. Excel menlerinden Aralar / Makro /
Visual Basic Dzenleyicisi komutuna tklad-
nzda nnze gelen pencere VBE pence-
residir. Eer klavye kullanma alkanlnz
fazla ise [ALT]+[F11] tularna bastnzda
da ayn pencere ile karlaacaksnz. Bu
pencereyi inceleme ve aklama iini bura-
da maalesef anlatmayacam. nk bu
ok ayr bir konu ve sayfalarca anlatlsa da
bitmez. VBE penceresinde de Insert / User-
Form komutuna tkladnzda Ekrannzn
grnts ekil-1deki gibi olacaktr.
Hemen fark ettiiniz gibi UserForm1
adnda bir nesne ekrann sol tarafnda g-
rntlendi. Bir de ekrannzn herhangi bir
yerinde (En son nerede braklmsa) Tool-
box (Ara Kutusu) adnda baka bir pencere
ald. Bu pencere UserFormlarn olmazsa
olmazlarndandr. Eer UserForm'la al-
yorsanz ayn anda Toolbox da ekranda ak
olmaldr. Eer ak deilse ya o an User-
Form seili deildir ya da Toolboxu kapat-
msnzdr. Eer UserForm seili olduu
halde Toolbox yoksa View mensnden
Toolbox komutunu seili hale getirin.
Toolbox zerinde yle ksa bir aratr-
ma yapn. Fare ile tek tek simgelerin zerle-
rine gelerek adlarnn ne olduunu ren-
meye aln. nk aadaki satrlarda i-
lemleri bunlar rendiinizi varsayarak
gerekletireceiz.
ncelikle Excel alma kitabmzdaki
sayfalar organize etmeye alalm. ster-
seniz btn alma sayfalarn silip tek bir
alma sayfasn brakalm ve buna da Ve-
riTabani adn koyalm. VeriTabani say-
fasn ekil-2deki dzenleyip, alma kita-
bn CariHesabim.XLS olarak kaydedelim.
Excelde oluturacamz veritabanmz
hemen hemen hazr. Sadece grsellik a-
sndan iyi olmas iin C ve D stunlarn Pa-
ra formatna evirerek ondalklarn sfr
yapmanz yeterli olacaktr.
imdi UserFormu tasarlamalyz. nce-
likle veritaban tablomuza bakalm ve ka
adet stunumuz olduunu belirleyelim. 4
adet stunumuz var. Bunlardan ilk srada
olan Sra No stunudur. Bu stunun de-
erinin otomatik olarak artmasn istiyor-
sak bunun iin bir nesne eklemeyeceiz.
Eer buraya girilecek olan deerleri manuel
olarak belirteceksek mecburen UserForma
bir nesne de bunun iin ekleyeceiz. User-
Forma ekleyeceimiz nesne nedir? sorusu
aklnza takld ise hemen ekil-3e gz atn.
ekil-3te de grld gibi UserForm
nesnesi zerine 3 adet Label, 3 adet Text-
Box ve 1 adet de CommandButton nesnesi
ekledik. imdilik bu nesnelere herhangi bir
isim vermiyoruz. Eklediimizde hangi isim-
leri kullanyorlarsa o isimler ile kalmasn is-
tiyoruz. Olay tam kavrayamam olan arka-
dalarmz ise eklenen Label nesnelerini e-
kil-3te farkl isimlendirdiimizi sanacaklar.
Oysa durum byle deil. Nesnelerin bir o-
<< <<
USERFORMLAR LE ALIMAK - 1
Excelde program yapmak dierlerine benzemez. Hem zevkli hem kullanldr. Biraz bilgi ile
zlemeyecek ey yoktur Excelde

ekil 1
ekil 3
ekil 4
ekil 2
in akas bir yana, bu aslnda sizlere sy-
lemek istediim ok nemli bir nokta idi. O
da u: Excel bir veritaban program deildir.
Veritabanlarnda bulunan zellikleri Ex-
celden beklemek yanl olur. nk hep tek-
rarladmz gibi, Excel bir hesap tablosudur
ve mkemmel bir hesap tablosudur. Ancak
yine de Excel veritaban programlarn yne-
tebilir ve kendisi de basit bir veritaban zel-
liine sahip olabilir. Buradaki basit ifademi
sakn yanl anlamayn. lerki safhalarda bu
sylediklerimiz daha net anlalacaktr. im-
di konumuza dnelim.
ncelikle unu istiyoruz: KAYDET dme-
sine her tkladmzda veriler bir alt satra
yazlsn.
Bunu yapabilmek iin bir bilgiye sahip ol-
mamz gerekiyor. Bu bilgi de u: En son veriyi
hangi hcreye yazdracanz. Bunun iin Ex-
cel sayfamzda bulunan dolu hcreleri say-
drmamz gerekiyor. Saydracamz dolu
hcreler A stunu iin gereklesin. Bu say-
drma ilemini, daha rahat anlayabilmek iin
Excel ilevleriyle gerekletirelim. Bunun iin
E1 hcresine aadaki forml yazn.
=BA_DE_DOLU_SAY(A1:A100)+1
Forml yazdnzda ekil-6daki sonu
ile karlaacaksnz.
Bu formlde A1:A100 arasndaki hcrele-
re bakld ve ka tane dolu hcre olduu sa-
yld. Dolu hcre says 2 olarak bulundu.
Yazdracamz veri bir sonraki hcrede ola-
ca iin dolu hcre says 1 artrld. Olay bu
kadar. O zaman biraz nce yazdmz kodda
bir deiiklik yapacaz.
Cells(2,A)da 2 sabiti yerine srekli de-
ien E1 hcresindeki sonucu yazacaz. Bu-
nun iin bu satrlar aadaki gibi deitire-
ceiz.
Private Sub CommandButton1_Click()
Cells([E1], "B").Value = TextBox1.Value
Cells([E1], "C").Value = TextBox2.Value
Cells([E1], "D").Value = TextBox3.Value
Cells([E1], "A").Value = 1
End Sub
Burada ksa bir aklama yapmak istiyo-
rum. Kodlama yaplrken bazen satrlar uza-
Excel Serisi
>> >>
<< CHIP Workshop 37
unun hem Caption (Balk) hem de Name
(sim, Ad) zellikleri vardr. Biz ekil-3te sa-
dece Caption zelliklerini deitirdik. ekil-
4te Label1 nesnesini setik ve Properties
(zellikler) penceresinden bahis konusu
zelliklere baktk.
UserFormun tasarm bitti ise artk kod-
lamaya geebiliriz demektir.
Ne yapacaz?
KAYDET dmesine tkladmzda TextBox1
nesnesindeki veri B2 hcresine, TextBox2
nesnesine yazdmz veri C2 hcresine,
Textbox3 nesnesindeki veri de D2 hcresine
yazlacak. Son olarak A2 hcresine ne yazla-
ca sorusu kald geriye. O da ok basit. A2
hcresine 1 yazlacak. imdi bahsettiimiz
bu ilemleri gerekletirelim.
Bunu yapabilmek iin tasarm aamasn-
da iken KAYDET dmesine fare ile ift tkla-
yarak UserForma ait kod sayfasn an. A-
lan bo beyaz sayfaya da aadaki kodu ya-
zn.
Private Sub CommandButton1_Click()
Cells(2, "A").Value = 1
Cells(2, "B").Value = TextBox1.Value
Cells(2, "C").Value = TextBox2.Value
Cells(2, "D").Value = TextBox3.Value
End Sub
Kodu yazdktan sonra ister klavyeden
[F5] tuuna basn, isterseniz Run mensn-
den Run komutunu altrn ya da ara u-
buu zerinden altr (Run) dmesine tk-
layn.
UserForm alacaktr. Form zerinde
bulunan TextBoxlar ekil-5tekine benzer
doldurarak KAYDET dmesine tklayn. Ve-
rilerinizin 2. satra sra ile yazldn gre-
ceksiniz.
Tamam, tamam hemen kzmayn. Ben
de farkndaym. Kaydet dmesine her tk-
ladnzda ayn satrlarn zerine yazyor.
Sinir edici bir durum. Aslnda hep bir alt sa-
tra yazlmas gerekiyordu. Ama bana hi
kzmayn. nk yukarda ne sylediysem
ben onu yaptm. Veriler A2, B2, C2 ve D2ye
yazld. nann bundan baka bir ey syle-
medim.
masn diye uzun ifadeler yerine ksa ifadeler
kullanabiliriz. [E1] de bu ksa ifadelerden bi-
ridir. Aada yazlanlar hep ayn eyi ifade
ederler.
Cells(1,5)
Cells(1,E)
Range(E1)
[E1]
Son olarak akla taklabilecek bir noktay
aklayalm. Daha nce A stununa yazdran
kodu en ste yazmtk. Bu defa ise en alta
yazdk. Bunun nedeni u.
E1 hcresindeki verinin 3 olduunu var-
sayalm. KAYDET dmesine tklanldnda
A3 hcresine veri yazdrlacak. Ancak E1 hc-
resindeki say da annda deiecek ve 4 ola-
cak. Bundan sonraki verileri B4, C4 ve D4e
yazacakt. te buna engel olmak iin basit
bir nlemdi bu. Daha sonra E1 hcresindeki
forml kod sayfasna tayacamz iin bu-
na ok da kafa yormanza gerek olmad ka-
naatindeyim.
Artk her tklamada veriler bir sonraki
hcreye yazlyor. Fakat farkndasnz ki
programclk sadece program yapmakla bit-
miyor. Program yapmaktaki en nemli unsur
HATA DENETMni doru yapmaktr. Ne de-
mek istediimizi aklayalm.
M. Temel Korkmaza ait verileri bir defa
kaydettiniz. Ancak yanllkla KAYDET d-
mesine bir daha tkladnzda ne olacak? Yi-
ne ayn veriyi bir sonraki satra yazdracak.
Buna birka noktadan nlem alabiliriz. Bun-
lardan bir tanesi UserForm zerine yeni bir
dme eklemek. Bu dmenin ii en son ve-
riyi silmek olsun. O halde yeni dmeye SON
SATIRI SL baln (Caption) koyalm ve aa-
daki kodu bu dmeye ekleyelim.
Private Sub CommandButton2_Click()
Cells([E1] - 1, "B").Value = ""
Cells([E1] - 1, "C").Value = ""
Cells([E1] - 1, "D").Value = ""
Cells([E1] - 1, "A").Value = ""
End Sub
Hatrlarsanz E1 hcresinde dolu satr sa-
ysnn bir fazlas vard. Oysa bu defa sadece
dolu satr saysn bulacak ve o sayya teka-
bl eden satrn ieriini boaltacaz. Bura-
da silmek yerine boaltmak ilemini kullan-
yoruz.
Hata denetimimiz halen bitmi deil.
nk A stununa srekli olarak 1 yazyor.
Aslnda bunu deitirmenin kolay olduunu
hemen anladnz. Yaplmas gereken ilem
basit. Cells([E1], "A").Value = 1 satrn
Cells([E1], "A").Value = [E1] 1 olarak dei-
ekil 5
ekil 6
Excel Serisi
<< <<

tirmek yeterli olacaktr.


Bir hata denetimi daha yapmalyz. Text-
Box nesnelerinin her de bo olduu hal-
de verileri kaydetmeye alyor. Bunu yap-
mamal. En azndan sra numarasn verme-
meli. O halde yle yapalm Eer 1. TextBox
nesnesi bo ise ya da 2. ve 3. Textbox nesne-
leri bo ise veri kayd yapmayp bizi uyarsn.
Bunun iin kodlar aadaki gibi dzenleye-
biliriz. Unutmayn ki bu bizim aklmza ge-
len en ksa zm. Siz zamanla farkl zm-
ler retebilirsiniz.
Private Sub CommandButton1_Click()
If TextBox1 = "" Then
MsgBox "isim Girmelisiniz"
Else
If TextBox2 = "" And TextBox3 = "" Then
MsgBox "Alacak ve deme kutular ayn
anda bo olamaz"
Exit Sub
End If
Cells([E1], "B").Value = TextBox1.Value
Cells([E1], "C").Value = TextBox2.Value
Cells([E1], "D").Value = TextBox3.Value
Cells([E1], "A").Value = [E1] - 1
End If
End Sub
UserFormu altrdnzda ekil-7 ve
ekil-8deki grntleri almanz mmkn
olacaktr.
Biz bu denetimleri u an hazrladmz
veritabanna gre yapyoruz. Elbette ki da-
ha ince ayarlar da yapmamz gerekiyor. Me-
sela TextBox2 ve TextBox3 nesnelerine sa-
dece ve sadece saysal deerler girilebilme-
lidir. Bu konuya dilerseniz bir sonraki ay de-
inelim.
imdi sayfa zerinde bulunan dolu hc-
releri sayma ilemini kodlarmzn arasna
alalm ve sayfay bu tr ilemlerden kurta-
ralm. Bunun iin kodlarn arasna aada-
ki satr ekleyeceiz:
Dim DoluSay As Integer
DoluSay = WorksheetFunction.
CountA([A1:A100]) + 1
Tabi bu ilemi gerekletirdikten sonra
kod ierisinde bulunan btn [E1] ifadeleri-
ni DoluSay deikeni ile deitirmeliyiz. K-
sacas kodlar aadaki gibi olacaktr.
Private Sub CommandButton1_Click()
Dim DoluSay As Integer
DoluSay = WorksheetFunction.
CountA([A1:A100]) + 1
If TextBox1 = "" Then
MsgBox "isim Girmelisiniz"
Else
If TextBox2 = "" And TextBox3 = "" Then
MsgBox "Alacak ve deme kutular ayn
anda bo olamaz"
Exit Sub
End If
Cells(DoluSay, "A").Value = DoluSay - 1
Cells(DoluSay, "B").Value = TextBox1.Value
Cells(DoluSay, "C").Value = TextBox2.Value
Cells(DoluSay, "D").Value = TextBox3.Value
End If
End Sub
Private Sub CommandButton2_Click()
Dim DoluSay As Integer
DoluSay = WorksheetFunction.
CountA([A1:A100]) + 1
Cells(DoluSay - 1, "A").Value = ""
Cells(DoluSay - 1, "B").Value = ""
Cells(DoluSay - 1, "C").Value = ""
Cells(DoluSay - 1, "D").Value = ""
End Sub
Bir de kolaylk olmas asndan User-
Formun zerine TextBoxlar temizleme
dmesi yerletirelim ve Bu dmeye de
aadaki kodlar ekleyelim.
Private Sub CommandButton3_Click()
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
End Sub
Bu dmeye tklanldnda TextBoxla-
rn ierisi boaltlm olacaktr.
Buraya kadar olan ksm anladysak yeni
bir ileme girielim.
Bir ok alacakl ve borluyu tablo verita-
banna kaydettiimizi varsayalm. Muhtelif
zamanlarda M. Temel Korkmaz bazen
alacakl olmu, bazen de deme yapm. s-
teimiz ey ise M. Temel Korkmaza ait ra-
porun ne olduudur. Tablomuz ekil-9daki
gibi olsun.
Biliyorsunuz ki Excelde rapor almann
onlarca yntemi bulunuyor. imdi biz bun-
lardan bir ya da bir kan kullanalm.
UserForm zerine bir dme daha ekle-
yelim ve bunun baln da "RAPOR" olarak
deitirelim.
Private Sub CommandButton4_Click()
If TextBox1 = "" Then
MsgBox "TextBox1 kutusuna birad giriniz"
Exit Sub
End If
Range("A1").AutoFilter
Range("A1").AutoFilter 2, TextBox1
End Sub
Bu kodu altrdnzda eer TextBox1
nesnesine herhangi bir isim girmediyseniz
isim girmeniz iin bir uyar mesaj verilecek-
tir. Eer veritabannda bulunan isimlerden
bir tanesini yazp RAPOR dmesine tklarsa-
nz sonu ekil-10daki gibi olacaktr.
ekil-10da da grld gibi veri sayfa-
sndaki isimler Textbox1de yazlan isime
gre sralanmtr. Ancak sralanan veriler
liste olarak dkm alnsa da bir sonu dn-
ekil 7
ekil 9
ekil 10
ekil 8
38 CHIP Workshop >>
drmedii iin pek bir ie yaramayacaktr. O
halde sayfa zerinde AltToplamlar aldrma-
mz gerekmektedir. Bunun iin RAPOR d-
mesinin kodunu aadaki gibi deitirelim.
Kodu altrmadan nce ekil-11de grl-
d gibi UserForm zerine bir adet TextBox
daha ekleyelim. Bu TextBox da bize rapor so-
nucunu gsterecektir.
Private Sub CommandButton4_Click()
Dim DoluSay As Integer
If TextBox1 = "" Then
MsgBox "TextBox1 kutusuna birad giriniz"
Exit Sub
End If
DoluSay = WorksheetFunction.
CountA([A1:A100])
Range("A1").AutoFilter
Range("A1").AutoFilter 2, TextBox1
Cells(DoluSay + 1, "C") = "=SUBTOTAL(9,C2:C"
& DoluSay & ")"
Cells(DoluSay + 1, "D") = "=SUBTOTAL(9,D2:D"
& DoluSay & ")"
Cells(DoluSay + 1, "B") = Cells(DoluSay + 1, "D")
- Cells(DoluSay + 1, "C")
TextBox4 = Cells(DoluSay + 1, "B")
End Sub
Userformu altrp rapor alnca verilerin
yazld en son hcreye alt toplamlar alna-
caktr. Bu alt toplamlarn veritabanna her-
hangi bir zarar olmayacaktr. Bunun nedeni
ise, siz yeni bir kayt eklediinizde A stunu-
na bu alt toplam etki etmediinden yeni veri
bu alt toplamlarn zerine yazlacaktr. Her
rapor aldnzda ise tekrar istediiniz alt
toplam alnacaktr.
Buraya kadar her ey yolunda gibi gr-
nyor. Ancak baz deiiklikler yaparak prog-
ramnz kullanacak kiilere kolaylk salaya-
bilirsiniz. Rapor alrken her defasnda isim
yazmak sknt verebilir. Bunun yerine Com-
boBox nesnesinden isim semek daha man-
tkl olacaktr. O halde yeni bir UserForm
oluturacaz. Bunun amac da Mteri smi
Kayt Formu olacak. Bu yeni Formumuz e-
kil-12deki gibi olabilir.
Ama yapmamz gereken bir ekleme daha
var. O da Excel Tablomuza bir sayfa daha ek-
lemek. Yeni ekleyeceimiz alma sayfasnn
ad Kisiler olacaktr. Ve grnm de ekil-
13tekine benzemelidir.
Yeni ekleyeceimiz mteri isimlerini ar-
tk ncelikle buraya gireceiz. Bunun iin
yapmamz gerekenler ok basit; daha nceki
formda kullandmz kodlarn hemen he-
men aynsn kullanacaz. Bunun iin yeni
hazrladmz formun zerinde bulunan
KAYDET dmesine ift tklayn ve alan
pencereye aadaki kodlar girin.
Private Sub CommandButton1_Click()
Dim DoluSay As Integer
DoluSay = WorksheetFunction.CountA
(Worksheets("Kisiler").[A1:A100]) + 1
Worksheets("Kisiler").Cells(DoluSay, "A").
Value = TextBox1.Value
End Sub
Hangi sayfada olursanz olun User-
formdan yapm olduunuz btn Mteri
sim Kaytlar Kisiler sayfasna alt alta yaz-
lacaktr. Bu formu imdilik burada brakyo-
ruz. nk bu form zerine yeni eklemeleri
nmzdeki ay yapacaz.
Tekrar ilk hazrladmz UserForma ge-
elim. Burada unu yapacaz. Madem artk
mteri isimlerini srekli olarak girdiimiz
baka bir UserForm ve baka bir veri tablo-
muz var, o halde o verileri TextBoxa yazmak-
tansa ComboBoxdan semek daha mantkl
olacaktr. lk UserFormdaki TextBox1 nesne-
sini silip yerine ComboBox1 nesnesi koyalm.
u ana kadar ilk UserFormun koduna yazd-
mz btn TextBox1 yazlarn ComboBox1
olarak deitirelim. Aksi takdirde hata ile
karlarz.
imdi UserFormun zerinde bo bir yere
ift tklayn ve Kod sayfasna gidin. Kod say-
fasndaki grnt ekil-15teki gibi olacaktr.
Dikkat ederseniz UserFormun Click olay
ald. Bu UserFormun varsaylan olaydr.
Ancak biz imdi yazacamz kodu User-
Formun balama yani Initialize olayna yaza-
caz. Bunun iin kod penceresinin sa st
kesinde bulunan olay kutusundan Initiali-
ze olayn sein (ekil-16).
Bu ayki konumuzu burada pat diye kesi-
yoruz. nk bize ayrlan yer bu kadar. Hem
sizler de konu zerine biraz alm olursu-
nuz.
Not: dll animasyon yarmamz so-
nuland. Dereceye giren arkadalarmza
dlleri gnderildi. Dereceye giren arkada-
larmzn adlarn ve bulunduklar yerleri bu-
rada yazyoruz. Aslnda birok arkadamz
soruyu doru olarak zm. Ancak biz kod-
lamay ve almay en iyi yapan arkadalar-
mz semek durumunda kaldk.
1. Recep Gd
3. Umut Acar
2. Yksel zdek
Samet nal
Onur Karanc
Haluk Cengiz
Fatih opur
Ayrca yukardaki dier drt arkadamza
da 1.ye verdiimiz Makrolar kitabn hediye
olarak gnderdik. Yani bu arkadalarmzn
kodlamas da tarafmzdan ok beenildi.
M. Temel Korkmaz
temelkorkmaz@excel.gen.tr
Excel Serisi
>> >>
<< CHIP Workshop 39
ekil 11
ekil 12
ekil 13
ekil 15
ekil 16
ekil 14

You might also like