>>

‹çindekiler

CHIP Workshop Klasörü
Kesin, biriktirin, kendi arflivinizi oluflturun
CHIP WORKSHOP’da BU AY
Web Programc›l›¤›
Fscommand ve iki Flash animasyonu aras›nda iletiflim

Flash Serisi
Nesneler

Photoshop Serisi
Kabartma Yüzeyli fiekiller

CHIP Workshop Klasörü’nü ayraçlar›yla birlikte siparifl edebilir ve kendi arflivinizi oluflturabilirsiniz.
Fiyat: 9.000.000

Excel Serisi
USERFORM’LAR ‹LE ÇALIfiMAK - 1

TL

(KDV ve gönderim ücreti dahil)

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

Web Programc›l›¤›

<<

Fscommand ve iki Flash animasyonu aras›nda iletiflim
Bu ay Flash’in web sayfas›yla iletiflim kurabilmesine imkan veren bir di¤er önemli fonksiyon olan fscommand fonksiyonunu tan›y›p, nas›l kullan›ld›¤›n› ö¤renece¤iz. Ayr›ca bu fonksiyonu kullanarak iki farkl› Flash animasyonu aras›nda iletiflim kurman›n yolunu görece¤iz.
at›rlayacaks›n›z, geçti¤imiz ay getURL() fonksiyonuyla Flash ile web sayfas› aras›nda iletiflim kurmufl, hatta Flash animasyonumuz üzerinden web sayfam›z› kontrol edebilmeye örnek olarak Flash animasyonu içinden sayfam›z›n arka plan rengini de¤ifltirmifltik. Bu ay ise Flash-JavaScript aras›nda etkileflim kurabilen bir baflka fonksiyon olan fscommand() global fonksiyonunu kullanaca¤›z. Önce fonksiyonumuzu biraz tan›yal›m.

H

Fscommand’in kullan›ld›¤› bafll›ca 3 durum söz konusudur: 1. Standalone Player’e belli bir tak›m komutlar göndermek için, 2. Web taray›c›daki JavaScript’e herhangi bir komut göndermek için, 3. Macromedia Director filmindeki Lingo’yla iletiflime geçmek için. Biz bu durumlardan ikincisi üzerinde duraca¤›z. Ancak ilki ile de ilgili biraz bilgi verelim. Fscommand() fonksiyonunun kullan›m› afla¤›daki gibidir.
fscommand(komut, argüman)

fscommand()
Flash 3 ile kullan›lmaya bafllanan fscommand sayesinde Flash animasyonu, Standalone Player (Flash animasyonlar›n›n kendi bafl›na çal›flabilmelerini sa¤layan film oynat›c› ya da Host aplikasyonu (Flash animasyonuna çal›flabilmesi için evsahipli¤i yapan web taray›c› veya Macromedia Director gibi harici aplikasyonlar) ile iletiflim kurabilmektedir.

¤er de olabilir. argüman Uygulamaya gönderilen komutla ilgili parametre dizesi (string). Standalone Player için kullan›lan sabit komut isimleri olabilece¤i gibi, JavaScript için kendi tan›mlad›¤›m›z bir de¤er de olabilir. Komut ve argüman de¤erleri, ActionScript ifadeleri olmad›¤› sürece çift t›rnak içine yaz›lmal›d›r. Örne¤in kendi bafl›na çal›flacak Flash animasyonunun tam ekran olarak aç›lmas›n› sa¤lamak için animasyonunuzda Flash aksiyonu olarak afla¤›daki de¤erin girilmesi gerekir.
fscommand(“fullscreen”, “true”);

komut Uygulamaya gönderilen komut dizesi (string). Standalone Player için kullan›lan sabit komut isimleri olabilece¤i gibi, JavaScript için kendi tan›mlad›¤›m›z bir de-

Standalone Player’a gönderilen bu komut sayesinde oynat›c› Flash animasyonunu tam ekran bir pencere içinde göstermesi gerekti¤ini anlar. Standalone Player için kullan›labilecek komut ve argümanlar flunlard›r.
65• CHIP Workshop > >

>>
Komut
“allowscale” “exec”

Web Programc›l›¤›

Argüman
“true” ya da “false”

‹fllevi
Flash filminin boyutunun aç›lan pencere ile birlikte de¤iflmesi için “true”, orijinal boyutunda sabit kalmas› için “false” de¤erini seçmek gerekir. Flash filminin harici bir aplikasyonu çal›flt›rmas›nda kullan›l›r. Argüman olarak kullan›lacak de¤er uygulaman›n ismidir. Gerekti¤i durumda göreli ya da salt yol adresini de eklemek gerekebilir. “C:/WINDOWS/NOTEPAD.EXE” gibi Flash filminin tam ekran bir pencerede aç›lmas› için “true”, orijinal boyutunda bir pencerede aç›lmas› için “false” de¤erini seçin. Flash filmini sona erdirip Standalone Player’› kapat›r.

içinde seçmifl oldu¤unuz action ile ilgili kodlar belirecektir.

“applikasyon_ismi”

“fullscreen”

“true” ya da “false”

“quit”

4. Kodlar›n üstünde yer alan Command alan›na “mesaj goster” Parameters alan›na ise “Flash animasyonundan selam” yaz›n. Bu durumda ActionScript panelindeki kodlar
fscommand("mesaj goster", "Flash animasyonundan selam"); ➝

“showmenu”

“true” ya da “false”

Flash filminin gösterildi¤i Standalone Player’da sa¤ t›klanmas› durumunda ekranda menü görünüp görünmemesini kontrol eder. Menünün görünmesi için “true” de¤erinin seçili olmas› gerekir. Baz› durumlarda animasyonunuzun klavye tufllar›na duyarl› olmas› gerekebilir. Mesela oyun uygulamalar›nda oldu¤u gibi Bu durumda “true” de¤erli “trapallkeys” komutu, klavye vurufllar›n› Flash animasyonunuza gönderecektir.

fleklinde olacakt›r.

“trapallkeys”

“true” ya da “false”

Bu tabloya bakarak kendi bafl›na çal›flacak Flash animasyonunun hem tam ekran olarak aç›l›p hem de film boyutunu orijinal tutmas›n› sa¤lamak için animasyonunuzda Flash aksiyonu olarak afla¤›daki de¤erlerin ikisinin de flu flekilde girilmesi gerekti¤ini söyleyebiliriz.
fscommand(“fullscreen”, “true”); fscommand(“allowscale”, “false”);

5. Flash dosyan›z› kaydedin ve menüden File / Publish seçene¤ini t›klayarak ya da [Shift+F12] tufllar›na basarak Flash dosyan›z› yay›nlay›n. Bu durumda .fla dosyan›z›n kay›tl› oldu¤u klasörde HTML ve SWF olarak iki yeni dosya daha oluflacakt›r. 2. Çizmifl oldu¤unuz flekli seçili hale getirin ve Flash menüsündeki Insert / Convert to Symbol seçene¤ini t›klay›n ya da klavyenizdeki [F8] tufluna bas›n. Aç›lan pencereden Button radyo dü¤mesini seçin ve OK tufluna bas›n. Çizmifl oldu¤unuz flekil art›k buton haline geldi.

fscommand ile JavaScript etkileflimi
fscommand fonksiyonu ile web sayfas›ndaki JavaScript’e bilgi göndermek için Flash’ta tek yapman›z gereken fley fscommand ile bir komut ve bir argüman yazmakt›r. As›l yap›lacak ifllem web sayfas›n›n kodlar›nda yer al›r. Diyelim ki aynen geçen ay oldu¤u gibi Flash’tan web sayfam›za JavaScript yard›m›yla önce bir mesaj gönderen sonra da sayfam›z›n arka plan rengini de¤ifltiren bir uygulamay› bu defa fscommand metoduyla yapmak istiyoruz. O zaman buyurun, atölyemize geçelim. 1. Flash pencerenizde bofl bir sayfa aç›n ve bir isim vererek uygulaman›z› uygun bir yere kaydedin. Oluflturdu¤unuz yeni sayfan›z›n içine buton yapmak için bir flekil çizin. Bir yuvarlak olabilir mesela.
< CHIP Workshop • 66 <

6. Bu noktada Flash dosyam›z haz›r. Art›k SWF dosyas›n› kullanacak olan HTML doküman›nda Flash'i kontrol edecek JavaScript kodlar›n› oluflturabiliriz. HTML dosyan›z› HTML editörünüzde ya da Notepad'te aç›n. HTML sayfan›zda Flash filminizi sayfan›za ekleyen kodlarda <OBJECT> tak›s› içine
ID="Film"

3. Çizmifl oldu¤unuz flekli seçili halde iken ve Action panelinden fscommand() action'›n› çift t›klay›n. Action script penceresi

parametresini ekleyin. <OBJECT> tak›s› içinde NAME isimli bir parametre olmad›¤›ndan emin olun. Varsa silin. Aksi takdirde JavaScript-Flash etkileflimi Netscape 6.2 ve üstü versiyonlarda çal›flmayacakt›r.

Web Programc›l›¤›

<<

10. OK tufluna bas›nca ise sayfan›z›n arka plan renginin k›rm›z›ya dönüfltü¤üne flahit olacaks›n›z.

7. HTML sayfan›zda Flash filminizi sayfan›za ekleyen kodlarda <EMBED> tak›s› içine
NAME="Film" swLiveConnect="true"

on error resume next Sub Film_FSCommand(ByVal command, ➝ ByVal args) call Film_DoFSCommand(command, args) end sub </SCRIPT>

parametrelerini ekleyin. <EMBED> tak›s› içinde ID isimli bir parametre olmad›¤›ndan emin olun. Varsa silin. 8. </HEAD> tak›s›n›n hemen üstüne afla¤›daki script kodlar›n› flekilde görüldü¤ü gibi yaz›n
<SCRIPT language="JavaScript"> function Film_DoFSCommand(komut, param) { if (komut=="mesaj goster") { alert(param); document.bgColor="Red"; } } </SCRIPT> <SCRIPT language="VBScript"> ➝

Böylece fscommand fonksiyonu yard›m›yla bir Flash animasyonu içinden HTML sayfam›za müdahale etmifl ve sayfam›z›n arka plan rengini de¤ifltirmifl olduk.

9. HTML dosyan›z› kaydedip çal›flt›rd›¤›n›zda Flash SWF dosyan›z içindeki buton HTML sayfan›zda görünecektir. Butona t›klad›¤›n›zda ise önce bir JavaScript mesaj› belirecek.

Nas›l çal›fl›yor?
Fscommand fonksiyonuyla JavaScript’e gönderilen bir komutu alg›layabilmek için belirli formatta isme sahip bir JavaScript fonksiyonu tan›mlamam›z gerekir. Format flu flekildedir.
function movieID_DoFSCommand(komut, ➝ param) { if (komut=="komutumuz") { // fonksiyonumuzdan ➝ yerine getirmesini istedi¤imiz iflleri // buraya yaz›yoruz. } }

Fonksiyonumuzun isminde yeralan movieID, HTML sayfan›zda Flash filminizi sayfan›za ekleyen kodlarda <EMBED> tak›s› içine ki NAME="Film" ve <OBJECT> tak›s› içindeki ID="Film" parametrelerinin de¤eri olan “Film” de¤eri olmal›d›r. Fonksiyon tan›m›m›z içindeki en iç k›sma ise fonksiyonumuzdan yerine getirmesini istedi¤imiz iflleri s›ral›yoruz. Mesela bir mesaj kutusunun görünmesi ve arka plan rengini de¤ifltirecek kodlar olabilir bunlar. Bu durumda script'imiz flu flekilde görünecek.
function Film_DoFSCommand(komut, ➝ param) if (komut=="mesaj goster") { //e¤er gönderilen komut “mesaj göster” ise alert(param); // param de¤eri olan “Flash ➝

67• CHIP Workshop > >

>>
animasyonundan selam” // dizesini göster. de¤ifltir. } }

Web Programc›l›¤›

document.bgColor="Red"; // arkaplan rengini ➝

Flash dosyan›z› kaydedin. Menüden File / Publish seçene¤ini t›klayarak ya da [SHIFT+F12] tufllar›na basarak Flash dosyan›z› yay›nlay›p SWF dosyas›n› alabilirsiniz.

‹ki Flash animasyonu aras›nda haberleflme
StudioWeb’in bu ve bundan önceki son say›s›nda Flash’ten JavaScript’e, JavaScript’ten de Flash’e bilgi göndermenin yollar›n› ö¤rendik. JavaScript’in web sayfalar› üzerindeki kontrol gücünden hareketle, ö¤renmifl oldu¤umuz bu yöntemlerle ayn› sayfada, hatta iki farkl› frame ya da iki farkl› pencerede yer alan iki farkl› Flash animasyonunun birbiriyle haberleflmesini sa¤layabiliriz. Nas›l m›? Bilgiyi önce Flash uygulamalar›n›n birinden HTML sayfas›ndaki JavaScript’e, ondan da di¤er Flash uygulamas›na göndererek. Bu yöntem sayesinde birbiriyle etkileflim içinde olabilen ilginç Flash uygulamalar› gerçeklefltirebilirsiniz. Örne¤in iki farkl› kullan›c› taraf›ndan paylafl›lan bir oyun program› ya da pop-up penceresindeki bir Flash uygulamas›nda elde edilen de¤erlerin bir di¤erine tafl›nmas› veya aktar›lmas› olabilir. Bu seferki atölyemizde, ayn› sayfada yer alacak iki Flash uygulamas›ndan birine girilen de¤er bir di¤erinde gözükecek. 1. Flash pencerenizde bofl bir sayfa aç›n ve bir isim vererek uygulaman›z› uygun bir yere kaydedin. Oluflturdu¤unuz yeni sayfan›z›n içine bir metin ekleyin ve “isminizi girin” yaz›n.

3. Çizmifl oldu¤unuz fleklin alt›na dü¤me yapmak amac›yla bir dikdörtgen çizin ve bu dikdörtgenin üstüne static olacak flekilde “Gönder” metnini girin. 6. Flash pencerenizde baflka bir bofl sayfa aç›n ve farkl› bir isim vererek uygulaman›z› ayn› yere kaydedin. Oluflturdu¤unuz yeni sayfan›z›n içine bir metin ekleyin. Ve “Buraya isminiz gelecek” yaz›n. Metin alan›na ait Properties panelinden metin tipi olarak Dynamic Text de¤erini seçin. Ayr›ca metnimizin etraf›nda bir çizgi oluflturmak için Show border around text butonunu t›klay›n. Var alan›na ise de¤iflken ismi olarak “isim” de¤erini girin. Filminizi yay›nlay›p SWF dosyas›n› oluflturun.

4. Dikdörtgeni ve üstündeki metnin ikisini birden seçili hale getirin ve Flash menüsündeki Insert / Convert To Symbol seçene¤ini t›klay›n ya da klavyenizdeki [F8] tufluna bas›n. Aç›lan pencereden Button radyo dü¤mesini seçin ve OK tufluna bas›n. Çizmifl oldu¤unuz flekil art›k buton haline geldi.

5. Butonunuz seçili halde iken Action panelinden fscommand() action'›n› çift t›klay›n. Fscommand ile ilgili aç›lan alanlara gerekli bilgilerin girilmesi gerekecek. Command alan›na “bilgiyiGonder” yaz›n. Parameters alan›na ise “girdiAlan›” ifadesini girip, sa¤›nda bulunan Expression ifadesini seçili hale getirin. Bu durumda ActionScript penceresindeki kodlar›n›z afla¤›daki gibi görünmelidir: 2. Metin alan›na ait Properties panelinden metin tipi olarak Input Text de¤erini seçin. Ayr›ca metnimizin etraf›nda bir çizgi oluflturmak için Show border around text butonunu t›klay›n. Var alan›na ise de¤iflken ismi olarak “girdiAlani” de¤erini girin.
< CHIP Workshop • 68 <
on (release) { fscommand("bilgiyiGonder", girdiAlani); } ➝

7. Ayn› klasörde iki adet SWF dosyas› elde etmifl olduk. Ayn› klasörde bofl bir HTML sayfas› oluflturun, yay›nlanma an›nda oluflmufl baflka HTML dosyalar› varsa onlar› silebilirsiniz. Çünkü ihtiyac›m›z olmayacak. Her iki Flash animasyonunu da oluflturdu¤unuz bu sayfaya ekleyecek standart kodlar› ilave edin.

Web Programc›l›¤›

<<

HTML dosyan›z›n arka plan rengini beyazdan farkl› bir ton olarak belirleyin ki Flash dosyalar›n› ekranda daha net görebilesiniz. 8. ‹lk Flash uygulamam›z isim soran, ikincisi ise ismi gösterecek uygulama olacak. Her iki Flash dosyas›n›n da <OBJECT> tak›s›n›n içine birer ID parametresi ekleyin. <OBJECT> tak›lar› içinde NAME isimli bir parametre olmad›¤›ndan emin olun. Varsa silin. ‹sim soran uygulaman›z›n ID de¤erini “Film1”, isim gösteren uygulaman›z›n ID de¤erini ise “Film2” olarak girin. HTML sayfan›zda her iki Flash filminin <EMBED> tak›lar› içine NAME parametrelerini ekleyin. ‹sim soran uygulaman›z›n NAME de¤erini “Film1”, isim gösteren uygulaman›z›n NAME de¤erini ise “Film2” olarak girin. <EMBED> tak›s› içinde ID isimli bir parametre olmad›¤›ndan emin olun. Varsa silin. Ayr›ca swLiveConnect="true" parametresini de ekleyin.

ikinci filmde yer alan isim ad›ndaki dinamik metin alan›n›n de¤eri olarak atanmas› olay›d›r. Buradaki isimlendirmelere dikkat edin.
document.Film2.SetVariable("/:isim",ad);

Notlar:
Geçen ayki yaz›m›z› okumam›fl olanlar için tekrar hat›rlatal›m. Flash ile JavaScript iletiflimini her taray›c› modeli gerçeklefltirmez. Ö¤rendi¤imiz iletiflim metodunu afla¤›daki 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 destekli) Afla¤›daki taray›c› modelleri Flash-JavaScript iletiflimini desteklemez: Macintosh üzerindeki Internet Explorer’lar Netscape 2, Netscape 6 ve 6.01 ya da Java deste¤i olmayan Netscape taray›c›lar› Flash MX ile beraber tan›t›lan ve iki farkl› Flash filminin haberleflmesi için bir baflka yöntem olan Local Connection nesneleri de mevcuttur. Local Connection nesneleri hakk›nda bilgi edinmek isteyenler http://www.macromedia.com/support/flash/action_scripts/local_connection_objects/index.html adresini ziyaret edebilirler. Numan Pekgöz numanpekgoz@chip.com.tr

10. Sayfan›z› kaydedip çal›flt›rd›¤›n›zda soldaki Flash filminde bulunan alana girece¤iniz bir de¤er, dü¤meye bas›ld›¤› anda sa¤daki Flash filminde görünecek.

9. </HEAD> tak›s›n›n hemen üstüne yandaki flekilde görüldü¤ü gibi afla¤›daki script kodlar›n› yaz›n
<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> var ad=param; ➝

» eCHIP StudioWeb+’da bu ay:
Video: Ayn› sayfadaki iki Flash filmi aras›nda haberleflme
‹ki Flash filmi aras›ndaki haberleflmeyi konu alan atölyemizin e¤itim videosuyla uygulamalar›n kaynak kodlar›n› bu ayki eCHIP'te yer alan StudioWeb+ bölümünde bulabilirsiniz.

Burada üzerinde en dikkat edilmesi gereken konu ilk Flash dosyas›ndan gelen param de¤erinin (ki bu girilen ismin bilgisini tafl›yor) ad isimli bir JavaScript de¤iflkenine kaydedilip,

69 • CHIP Workshop > >

Flash Serisi

Nesneler M

<<

acromedia Flash program›n›n nesne yönelimli (object oriented) bir programlama diline sahip oldu¤undan daha önceki say›lar›m›zda da bahsetmifltik. Nesne yönelimli programlama mant›¤›n› flöyle bir hat›rlad›ktan sonra Flash içerisinde tan›ml› nesneleri ve kullan›mlar›n› inceleyece¤iz. Bildi¤iniz gibi, Flash içerisinde üç farkl› nesne tan›mlayabiliyoruz. Bunlar movie clip, button ve graphic. Bu nesnelere Action Script kodlar› ile eriflerek özelliklerini, de¤erlerini veya durumlar›n› de¤ifltirebiliyoruz. Tabii bu nesnelere eriflirken Flash içerisinde instance name tan›ml›yoruz. Flash içerisinde Action Script ile gelen nesneler de yer almaktad›r. Bu nesnelerin özelliklerini de¤ifltirmemiz veya durum bilgisi için faydalanmam›z Action Script ile mümkün olmaktad›r. Flash içerisinde yer alan nesneler Action Script panelinde Objects kategorisinde yer almaktad›r.

tarih = new date (y›l, [ay, [gün, [saat, [dakika, [saniye, [milisaniye ]]]]]] ) örnekteki s›ras›yla de¤erleri girebiliriz. Günün tarihi; ‹ki sat›rdan oluflan "tarih" isimli dynamic bir text alan› oluflturun.
gunler = ["Pazar", "Pazartesi", "Sal›", "Çarflamba", "Perflembe", "Cuma", "Cumartesi"]; aylar = ["Ocak", "fiubat", "Mart", "Nisan", "May›s", "Haziran", "Temmuz", "A¤ustos", "Eylül", "Ekim", "Kas›m", "Aral›k"]; tarihnesnesi = new Date(); gun = tarihnesnesi.getday(); ay = tarihnesnesi.getMonth(); _root.tarih = tarihnesnesi.getDate()+" "+ aylar[ay]+" "+tarihnesnesi.getFullYear()+" \r"+gunler[gun];

gorisinde yer alan _xmouse ve _ymouse paremetrelerini kullanarak farenin x ve y koordinatlar›n› elde edebiliyoruz. K›saca;
onClipEvent (mouseMove) { x = _root._xmouse; y = _root._ymouse; }

\r ifadesi sat›rbafl› için kullan›lmaktad›r. Sonuç: 1 A¤ustos 2003 Cuma

Array
Array, Türkçe'de dizi olarak geçmektedir. Bu de¤iflkenleri, tek bir tan›mlama yap›p içlerine birden fazla de¤er atayarak kullanabilmekteyiz.

bir movie clip tan›mlay›p yukar›daki aksiyonlar› ekleyin, x ve y de¤iflken isminde iki tane dynamic özellikte text tool oluflturun. Gördü¤ünüz gibi, fare hareket ettikçe koordinatlar› elde etmekteyiz.

Date
Tarih nesnesi Flash'›n çal›flm›fl oldu¤u sistemin saatini ve tarihini vermektedir. Kullan›m flekli; tarih = new date(); ile tan›mlama yap›yoruz. Daha sonra afla¤›daki argümanlar› kullanarak istedi¤imiz bilgileri elde ediyoruz. getDate Ay›n kaç›nc› günü oldu¤unu verir. 3 A¤ustos için: 3 getDay Haftan›n kaç›nc› günü oldu¤unu verir. Pazartesi için: 1 getFullYear Y›l› verir. 2003 getHours Saati verir. 12.15 için: 12 getMilliseconds milisaniyeyi verir getMinutes dakikay› verir. getMonth y›l›n hangi ay›nda oldu¤umuzu verir. getSeconds saniyeyi verir. getTime 1 Ocak 1970 geceyar›s›ndan bu zamana kadar geçen süreyi milisaniye olarak verir. tarih = new date(); belirlerken parantez içine yazaca¤›m›z de¤erler ile tarihi belirliyoruz. Bofl b›rak›rsak sistemin de¤erlerini almaktad›r.

Array, Boolean, Color, Date, Key, Math, MovieClip, Mouse, Number, Object, Selection, Sound, String, XML, XMLSocket Nesne oluflturmak: Nesneler new ifadesi kullan›larak veya Action Script panelinde yer alan Objects kategorisindeki aksiyonlar do¤rudan kullan›larak elde edilir. Burada en çok kullan›lan nesnelerin kullan›mlar›n› inceleyece¤iz.

Kullan›m flekli;
dizi[0] = “ali”; dizi[1] = “fladiye” dizi[2] = “fatih”; dizi[3] = “sevgi”; dizi[4] = “eyüp”; dizi[5] = “didem”;

Mouse
hide ve show olmak üzere iki kullan›m› yer almakta. Mouse.hide(); ile fare imlecini görünmez yap›yoruz. Mouse.show(); fare imleci gözükecektir. Ayr›ca Action panelinde Properties kate-

fleklinde veya daha kullan›fll› bir yöntemle;
22 • CHIP Workshop > >

>>
concat

Flash Serisi

isimler = new Array(“ali”, “fladiye”, “fatih”, “sevgi” , “didem”, “eyüp”)

ilk de¤er dizide 0. de¤iflkendir. Yani dizi elemanlar› s›f›rdan bafllar.

isimler = new Array("ali", "fatih", "eyüp"); isimler.reverse(); trace(isimler); //isimler = eyüp, fatih, ali

Key
Klavye tufllar›na do¤rudan eriflim sa¤lamaktad›r. Key komutu sayesinde nesneleri klavye ile kontrol edebilmekteyiz. Flash ile oyun tasar›m›nda daha çok ihtiyaç duyulmaktad›r.
onClipEvent (enterFrame) { if(Key.isDown(Key.RIGHT)) { setProperty ("", _x, _x+10); }}

slice
dizi içinden eleman ç›karmak için kullan›l›r.
isimler = new Array("ali", "fatih", "eyüp" , "didem"); isim=isimler.slice(1,3); trace(isim);

dizilerin içine yeni elemanlar eklemek veya iki diziyi birlefltirmek için kullan›l›r.
erkek = new Array("ali", "fatih", "eyüp"); k›z = new Array("fladiye", "sevgi", "didem"); isimler=erkek.concat(k›z); trace(isimler);

join
dizideki elemanlar›n tümünü aralar›na istenilen bir karakter ekleyerek tek bir string haline çevirir.
erkek = new Array("ali", "fatih", "eyüp"); isimler=erkek.join("-"); trace(isimler);

// slice(1,3) ilk de¤er kaç›nc› elemandan bafllayaca¤›n›, ikinci de¤er ise ifllemin kaç›nc› elemanda bitece¤ini belirtmektedir. 1. eleman fatih, 3. eleman ise didem'dir. 1. ve 2. elemanlar için slice ifllemi uygulan›r.
// sonuç: fatih, eyüp

veya
onClipEvent (enterFrame) { if(Key.isDown(39)) { setProperty("", _x, _x+10); }}

sort
Dizideki elemanlar› belirli bir s›raya dizmek için kullan›l›r.
isimler = new Array("ali", "fatih", "eyüp", “fladiye”, “sevgi”, “didem”); isimler.sort(); trace(isimler); // ali,didem,eyüp,fatih,sevgi,fladiye

Yukar›daki kodlar bir movie clip’e atanm›flt›r. Klavyeden sa¤ ok tufluna bas›ld›¤›nda movie clip bulundu¤u yerden sa¤a do¤ru 10 piksel kaymaktad›r. Key.isDown() parantez içine afla¤›daki klavye kodlar› yaz›larak yukar›daki örnekteki gibi kullan›labilir. 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 oluflturun ve afla¤›daki kodu ekleyin.
onClipEvent (enterFrame) { trace (Key.getAscii()); }

toString
join metodu ile ayn›d›r, yaln›z de¤erler aras›na yaln›z virgül eklenerek tek bir string elde edilir.

push
bir dizinin sonuna ekleme yapar. Atama yap›lan say› de¤iflkeni toplam de¤er say›s›n› verir.
isimler = new Array("ali", "fatih", "eyüp"); say›=isimler.push(“fladiye”, “sevgi”, “didem”); trace(say›); trace (isimler);

splice
Dizi içindeki elemanlar› silmek için kullan›l›r. splice(,) kaç›nc› elemandan bafllay›p kaç tane silinece¤ini belirtilir.
isimler = new Array("ali", "fatih", "eyüp", "sezen", "pelin", "bahar"); isimler.splice(3,3); trace(isimler); // ali,fatih,eyüp

unshift
push komutunun tersidir, dizinin bafl›na ekleme yapar.
isimler = new Array("ali", "fatih", "eyüp"); say›=isimler.unshift(“fladiye”, “sevgi”, “didem”); trace(say›); trace (isimler);

shift
dizideki ilk eleman› ç›kartmak için kullan›l›r.
isimler = new Array("ali", "fatih", "eyüp"); isim=isimler.shift(); trace(isimler); //isim = ali , isimler= fatih, eyüp

pop
dizideki son eleman› ç›kartmak için kullan›l›r.
isimler = new Array("ali", "fatih", "eyüp"); isim=isimler.pop(); trace(isimler); //isim = eyüp , isimler= ali, fatih

movie’yi test edin, her bast›¤›n›z tuflun ascii de¤erini elde edeceksiniz. Key.getCode(); eklerseniz Flash içerisinde kullanabilmek için tufllar›n kodlar›n› elde edeceksiniz. Macromedia Flash ile ilgili her türlü soru ve isteklerinizi bize iletebilirsiniz.
Ali YÜCEL aliyucel@chip.com.tr

reverse
dizi içindeki elemanlar›n s›ralan›fl›n› tersine çevirir.
< CHIP Workshop • 23 <

Photoshop Serisi

<<

Kabartma Yüzeyli fiekiller
fi›k görünen grafikler haz›rlamak için mutlaka eklenti paketlerini kullanman›z gerekmez. Do¤ru efektleri yerinde kullanarak siz de baflar›l› çal›flmalar yapabilirsiniz.

Y›pranm›fl pasl› ›zgara
Öncelikle ortalama 300x300 piksellik saydam (transparent) arka plana sahip bir belge oluflturarak iflleme bafllayal›m. Daha sonra yukardan afla¤› do¤ru seçim arac›n› kullanarak çizgi fleklinde bir seçim yap›n ve içini siyah renk ile doldurun. Daha sonra resimde görüldü¤ü gibi 2 kat kal›nl›¤›nda, siyah çizgiyi de içine alacak flekilde afla¤› do¤ru ikinci bir seçim daha oluflturun. Edit menüsünden Define pattern seçene¤ini seçin. fiimdi [Ctrl+A] ile resmin tümünü seçin. Edit menüsünden Fill seçene¤ini ve Pattern'i seçin. Ekran çizgilerle dolunca tekrar tümünü seçin [Ctrl+A] ve kopyalay›p [Ctrl+C] tekrar yap›flt›r›n [Ctrl-V]. Edit / Transform seçene¤i alt›ndan Rotate 90 degrees CW'yi seçin ve Layer menüsünden bu iki katman› Merge down ile birlefltirin. Filter / Distort / Spherize seçene¤ini 40 de¤eri ile kullan›n. Lasso arac›n› seçin ve k›r›k flekli için bir bölümü seçip silin. Smudge arac›yla baz› çizgileri resimdeki gibi uzat›n. fiimdi [Ctrl] tufluna bas›l›yken katmana t›klay›p flekli seçin. Seçim geçerliyken yeni bir katman yarat›p pas rengi ile doldurun. Filter / Blur / Gaussian blur seçene¤ini 1 de¤eri ile kullan›n. Bir önceki katman üzerinde Render / Lighting efektini kullan›n. Burada transparency iflaretli ve mountains de¤eri de 10 olmal›. Daha sonra Filter / Noise seçene¤ini 20 de¤eri ile kullan›n. Son olarak 5 de¤erinde feather uygulay›p Image / Adjust / Hue-saturation seçene¤i ile saturation de¤erini biraz azalt›n.

Eski havaland›rma borusu
Önce arka plan› beyaz olan 300 x 300 piksellik bir belge oluflturun. Oluflturmak istedi¤iniz boruyu 50 piksel çap›nda Paintbrush arac› ile ekrana çizin. Magic Wand arac›yla fleklinizi belirleyin. Seçim geçerliyken yeni bir katman oluflturup griyle doldurun. Gaussian blur filtresini 11 de¤eri ile kullan›n. Filter / Render / Lighting efektini seçin ve sa¤daki resimdeki ayarlar› aynen uygulay›n. Burada ›fl›k sol üstten gelecek flekilde yerlefltirilmelidir. fiimdi yeni bir katman oluflturup çizgi arac›n› seçin ve 2 piksel kal›nl›¤›nda çeflitli çizgiler çizin. [Ctrl] tufluna basarken bu katmana t›klay›p çizgileri seçin. Yeni bir katman daha oluflturun ve seçimi beyaz ile doldurup Filter / Blur / Gaussian blur seçene¤ini 1 de¤eri ile kullan›n. Ard›ndan katman saydaml›¤›n› (transparency) %50 yap›n. Move arac› ile beyaz çizgileri bir miktar sa¤a ve afla¤› kayd›r›n. Image / Adjust / Hue-saturation seçene¤i ile boruyu renklendirebilirsiniz.

23• CHIP Workshop > >

>>
Gümüfl para

Photoshop Serisi

Yeni bir RGB belge oluflturarak bafllay›n ve bunun tam ortas›na seçim (marquee) arac› ile bir daire oluflturup Edit / Fill / 50% grey seçene¤i ile boyay›n. Seçim geçerliyken yeni bir katman daha oluflturun ve 5 piksellik bir Edit / Stroke ifllemi uygulay›n. Paran›n içindeki flekli istedi¤iniz bir yerden seçip dairenin tam ortas›na gelecek gibi yap›flt›r›n. Sa¤daki resimdeki ayarlarla Stylize / emboss filtresini uygulay›n. Layer efektlerinde outer glow uygulay›p renk olarak siyah› seçin. Büyük gri dairenin oldu¤u katmana geçin ve 6 ya da 7 de¤eri ile Noise filtresini uygulay›n. Daha sonra Render / Lighting efektini sa¤daki resimdeki ayarlar ile bu katmana uygulay›n. Texture channel için mavi seçin ve height olarak 6 de¤eri verin. Ayn›s›n› stroked daire katman› için de uygulay›n ve bu katmana depth 3 ve blur 3 de¤erleri ile gölge verin. Arkaplan hariç tüm katmanlar› birlefltirin. Son olarak sa¤daki resimdeki ayarlarla Lighting efekt uygulay›n.

Elektrik teli
Öncelikle 200 x 200 piksel boyutlar›nda bir belge oluflturun. Ard›ndan serbest çizim kalemi ile elektrik telinizin olmas›n› istedi¤iniz flekilde bir çizim yap›n. Daha sonradan direct selection arac› ile bu flekli istedi¤iniz gibi yönlendirebilirsiniz. fiimdi katman penceresine geri dönüp yeni bir katman oluflturun ve tekrar Paths penceresini seçin. Sa¤ üstteki oka t›kay›n ve aç›lan menüden stroke subpath'i seçin. Art›k bu path’e gerek kalmad›¤› için silebilirsiniz. Burada karfl›n›za gelecek olan bir diyalog kutusu Paintbrush ayarlar›n› kullanmak isteyip istemedi¤inizi soracakt›r. Bu pencerede OK tufluna t›klay›n. Çizgiler seçmifl oldu¤unuz ön plan rengi ve yine seçmifl oldu¤unuz f›rça flekli ve kal›nl›¤› ile doldurulacakt›r. Yani e¤er k›rm›z› bir kablo istiyorsan›z önceden ön plan rengi için k›rm›z› seçmeyi unutmay›n. fiimdi son olarak Layer / Layer effects / Bevel & emboss seçene¤ini seçip innerbevel’i default ayarlarla uygulay›n.

KISA KISA

» Lighting efekti: Kabartmalar için birebir
Photoshop içinde Filters menüsü alt›nda Render seçene¤inde yer alan Lighting Effects omni, spot ve directional ›fl›k kaynaklar›n›n kullan›m› ile Photoshop içinde yarat›lm›fl nesneleri gerçe¤e daha çok yaklaflt›r›rken boyut kazand›rmas› aç›s›ndan da oldukça iyi bir filtredir. Bunun için seçiminizi yapt›ktan sonra Layers penceresi alt›nda yer alan Channels kart›na geçip yeni bir renk kanal› oluflturun (Alpha). Daha sonra Lighting Effects'i bu kanal› kullanarak uygulad›¤›n›zda daha hofl efektler elde edebilirsiniz.

< CHIP Workshop • 24 <

Excel Serisi

<<

USERFORM’LAR ‹LE ÇALIfiMAK - 1
Excel’de program yapmak di¤erlerine benzemez. Hem zevkli hem kullan›fll›d›r. Biraz bilgi ile çözülemeyecek fley yoktur Excel’de…

A

rt›k Excel’i biraz ileri düzey kullanan okuyucular›m›z sürekli Excel komutlar›n› anlatan makalelerden s›k›ld›lar. Bunu posta kutumuza gelen mesajlardan anl›yoruz. Hatta iki ayd›r yapt›¤›m›z yar›flmalara olan ilgi ve kat›l›m da bunun bir göstergesi olmufltur. O halde bize düflen görev, Excel’i biraz da olsa ileri düzey bir flekilde ö¤retmenin temellerini atmakt›r. Elbette ki VBA konusunu, yani di¤er bir deyiflle makrolar konusunu birkaç ayl›k makalede bitirmemiz mümkün de¤il. Ancak burada baz› k›staslar› vermek ve baz› örnekler sunmak yerinde olacakt›r. Konuya duyulan ilgi bu sahada yaz›lm›fl kaynak eserlerle doyurulabilir. Biz bu ay UserForm kullanarak Excel sayfas›na veri girmek, girilen veriyi silmek vb. konular› ele alaca¤›z. Bu noktada tekrarlamak istiyorum ki, daha önce bu konu hakk›nda az da olsa bilgisi olan arkadafllar söylediklerimizi ve uygulamaya çal›flt›klar›m›z› rahatl›kla anlayabilecekken, konu hakk›nda hiçbir bilgisi olmayan arkadafllar ise zorlanacaklard›r. Buna ra¤men söylediklerimizi hiç flafl›rmadan uygularlarsa sorun olmayacakt›r. Ancak bir uzmanl›k konusu olan VBA’y› da bir ç›rp›da kavrayabileceksiniz demek de istemiyorum.

fiekil 1

adet sütunumuz oldu¤unu belirleyelim. 4 adet sütunumuz var. Bunlardan ilk s›rada olan› “S›ra No” sütunudur. Bu sütunun de¤erinin otomatik olarak artmas›n› istiyorsak bunun için bir nesne eklemeyece¤iz. E¤er buraya girilecek olan de¤erleri manuel olarak belirteceksek mecburen UserForm’a bir nesne de bunun için ekleyece¤iz. “UserForm’a ekleyece¤imiz nesne nedir?” sorusu akl›n›za tak›ld› ise hemen fiekil-3’e göz at›n.

UserForm Nerede?
Excel’in Çal›flma sayfalar›n›n hemen arkas›nda bulunan VBE (Visual Basic Editor) penceresine bakarsan›z UserForm’lar›n burada sakland›klar›n› göreceksiniz. Ancak “Excel’in çal›flma sayfas›n›n arkas›na bakmak da ne demek?” diye hay›flanmay›n hemen. Excel menülerinden Araçlar / Makro / Visual Basic Düzenleyicisi komutuna t›klad›¤›n›zda önünüze gelen pencere VBE penceresidir. E¤er klavye kullanma al›flkanl›¤›n›z fazla ise [ALT]+[F11] tufllar›na bast›¤›n›zda da ayn› pencere ile karfl›laflacaks›n›z. Bu pencereyi inceleme ve aç›klama iflini burada maalesef anlatmayaca¤›m. Çünkü bu çok ayr› bir konu ve sayfalarca anlat›lsa da bitmez. VBE penceresinde de Insert / UserForm komutuna t›klad›¤›n›zda Ekran›n›z›n görüntüsü fiekil-1’deki gibi olacakt›r. Hemen fark etti¤iniz gibi UserForm1 ad›nda bir nesne ekran›n sol taraf›nda görüntülendi. Bir de ekran›n›z›n herhangi bir

yerinde (En son nerede b›rak›lm›flsa) Toolbox (Araç Kutusu) ad›nda baflka bir pencere aç›ld›. Bu pencere UserForm’lar›n olmazsa olmazlar›ndand›r. E¤er UserForm'la çal›fl›yorsan›z ayn› anda Toolbox da ekranda aç›k olmal›d›r. E¤er aç›k de¤ilse ya o an UserForm seçili de¤ildir ya da Toolbox’u kapatm›fls›n›zd›r. E¤er UserForm seçili oldu¤u halde Toolbox yoksa View menüsünden Toolbox komutunu seçili hale getirin. Toolbox üzerinde flöyle k›sa bir araflt›rma yap›n. Fare ile tek tek simgelerin üzerlerine gelerek adlar›n›n ne oldu¤unu ö¤renmeye çal›fl›n. Çünkü afla¤›daki sat›rlarda ifllemleri bunlar› ö¤rendi¤inizi varsayarak gerçeklefltirece¤iz. Öncelikle Excel çal›flma kitab›m›zdaki sayfalar› organize etmeye çal›flal›m. ‹sterseniz bütün Çal›flma sayfalar›n› silip tek bir çal›flma sayfas›n› b›rakal›m ve buna da “VeriTabani” ad›n› koyal›m. “VeriTabani” sayfas›n› fiekil-2’deki düzenleyip, Çal›flma kitab›n› “CariHesabim.XLS” olarak kaydedelim.

fiekil 3

fiekil-3’te de görüldü¤ü gibi UserForm nesnesi üzerine 3 adet Label, 3 adet TextBox ve 1 adet de CommandButton nesnesi ekledik. fiimdilik bu nesnelere herhangi bir isim vermiyoruz. Ekledi¤imizde hangi isimleri kullan›yorlarsa o isimler ile kalmas›n› istiyoruz. Olay› tam kavrayamam›fl olan arkadafllar›m›z ise eklenen Label nesnelerini fiekil-3’te farkl› isimlendirdi¤imizi sanacaklar. Oysa durum böyle de¤il. Nesnelerin bir ço-

fiekil 2

fiekil 4

Excel’de oluflturaca¤›m›z veritaban›m›z hemen hemen haz›r. Sadece görsellik aç›s›ndan iyi olmas› için C ve D sütunlar›n› Para format›na çevirerek ondal›klar›n› s›f›r yapman›z yeterli olacakt›r. fiimdi UserForm’u tasarlamal›y›z. Öncelikle veritaban› tablomuza bakal›m ve kaç
36• CHIP Workshop > >

>>
Ne yapaca¤›z?

Excel Serisi

¤unun hem Caption (Bafll›k) hem de Name (‹sim, Ad) özellikleri vard›r. Biz fiekil-3’te sadece Caption özelliklerini de¤ifltirdik. fiekil4’te Label1 nesnesini seçtik ve Properties (Özellikler) penceresinden bahis konusu özelliklere bakt›k. UserForm’un tasar›m› bitti ise art›k kodlamaya geçebiliriz demektir.

KAYDET dü¤mesine t›klad›¤›m›zda TextBox1 nesnesindeki veri B2 hücresine, TextBox2 nesnesine yazd›¤›m›z veri C2 hücresine, Textbox3 nesnesindeki veri de D2 hücresine yaz›lacak. Son olarak A2 hücresine ne yaz›laca¤› sorusu kald› geriye. O da çok basit. A2 hücresine 1 yaz›lacak. fiimdi bahsetti¤imiz bu ifllemleri gerçeklefltirelim. Bunu yapabilmek için tasar›m aflamas›nda iken KAYDET dü¤mesine fare ile çift t›klayarak UserForm’a ait kod sayfas›n› aç›n. Aç›lan bofl beyaz sayfaya da afla¤›daki kodu yaz›n.
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

‹flin flakas› bir yana, bu asl›nda sizlere söylemek istedi¤im çok önemli bir nokta idi. O da flu: Excel bir veritaban› program› de¤ildir. Veritabanlar›nda bulunan özellikleri Excel’den beklemek yanl›fl olur. Çünkü hep tekrarlad›¤›m›z gibi, Excel bir hesap tablosudur ve mükemmel bir hesap tablosudur. Ancak yine de Excel veritaban› programlar›n› yönetebilir ve kendisi de basit bir veritaban› özelli¤ine sahip olabilir. Buradaki basit ifademi sak›n yanl›fl anlamay›n. ‹lerki safhalarda bu söylediklerimiz daha net anlafl›lacakt›r. fiimdi konumuza dönelim. Öncelikle flunu istiyoruz: KAYDET dü¤mesine her t›klad›¤›m›zda veriler bir alt sat›ra yaz›ls›n. Bunu yapabilmek için bir bilgiye sahip olmam›z gerekiyor. Bu bilgi de flu: En son veriyi hangi hücreye yazd›raca¤›n›z. Bunun için Excel sayfam›zda bulunan dolu hücreleri sayd›rmam›z gerekiyor. Sayd›raca¤›m›z dolu hücreler A sütunu için gerçekleflsin. Bu sayd›rma ifllemini, daha rahat anlayabilmek için Excel ifllevleriyle gerçeklefltirelim. Bunun için E1 hücresine afla¤›daki formülü yaz›n.
=BA⁄_DE⁄_DOLU_SAY(A1:A100)+1

mas›n diye uzun ifadeler yerine k›sa ifadeler kullanabiliriz. [E1] de bu k›sa ifadelerden biridir. Afla¤›da yaz›lanlar hep ayn› fleyi ifade ederler.
Cells(1,5) Cells(1,“E”) Range(“E1”) [E1]

Formülü yazd›¤›n›zda fiekil-6’daki sonuç ile karfl›laflacaks›n›z.

Kodu yazd›ktan sonra ister klavyeden [F5] tufluna bas›n, isterseniz Run menüsünden Run komutunu çal›flt›r›n ya da araç çubu¤u üzerinden Çal›flt›r (Run) dü¤mesine t›klay›n. UserForm çal›flacakt›r. Form üzerinde bulunan TextBox’lar› fiekil-5’tekine benzer doldurarak KAYDET dü¤mesine t›klay›n. Verilerinizin 2. sat›ra s›ra ile yaz›ld›¤›n› göreceksiniz.

fiekil 6

fiekil 5

Bu formülde A1:A100 aras›ndaki hücrelere bak›ld› ve kaç tane dolu hücre oldu¤u say›ld›. Dolu hücre say›s› 2 olarak bulundu. Yazd›raca¤›m›z veri bir sonraki hücrede olaca¤› için dolu hücre say›s› 1 art›r›ld›. Olay bu kadar. O zaman biraz önce yazd›¤›m›z kodda bir de¤ifliklik yapaca¤›z. Cells(2,”A”)’da 2 sabiti yerine sürekli de¤iflen E1 hücresindeki sonucu yazaca¤›z. Bunun için bu sat›rlar› afla¤›daki gibi de¤ifltirece¤iz.
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

Son olarak akla tak›labilecek bir noktay› aç›klayal›m. Daha önce A sütununa yazd›ran kodu en üste yazm›flt›k. Bu defa ise en alta yazd›k. Bunun nedeni flu. E1 hücresindeki verinin 3 oldu¤unu varsayal›m. KAYDET dü¤mesine t›klan›ld›¤›nda A3 hücresine veri yazd›r›lacak. Ancak E1 hücresindeki say› da an›nda de¤iflecek ve 4 olacak. Bundan sonraki verileri B4, C4 ve D4’e yazacakt›. ‹flte buna engel olmak için basit bir önlemdi bu. Daha sonra E1 hücresindeki formülü kod sayfas›na tafl›yaca¤›m›z için buna çok da kafa yorman›za gerek olmad›¤› kanaatindeyim. Art›k her t›klamada veriler bir sonraki hücreye yaz›l›yor. Fakat fark›ndas›n›z ki programc›l›k sadece program yapmakla bitmiyor. Program yapmaktaki en önemli unsur HATA DENET‹M‹’ni do¤ru yapmakt›r. Ne demek istedi¤imizi aç›klayal›m. “M. Temel Korkmaz”a ait verileri bir defa kaydettiniz. Ancak yanl›fll›kla KAYDET dü¤mesine bir daha t›klad›¤›n›zda ne olacak? Yine ayn› veriyi bir sonraki sat›ra yazd›racak. Buna birkaç noktadan önlem alabiliriz. Bunlardan bir tanesi UserForm üzerine yeni bir dü¤me eklemek. Bu dü¤menin ifli en son veriyi silmek olsun. O halde yeni dü¤meye SON SATIRI S‹L bafll›¤›n› (Caption) koyal›m ve afla¤›daki kodu bu dü¤meye 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

Tamam, tamam hemen k›zmay›n. Ben de fark›nday›m. Kaydet dü¤mesine her t›klad›¤›n›zda ayn› sat›rlar›n üzerine yaz›yor. Sinir edici bir durum. Asl›nda hep bir alt sat›ra yaz›lmas› gerekiyordu. Ama bana hiç k›zmay›n. Çünkü yukar›da ne söylediysem ben onu yapt›m. Veriler A2, B2, C2 ve D2’ye yaz›ld›. ‹nan›n bundan baflka bir fley söylemedim.
< CHIP Workshop • 37 <

Burada k›sa bir aç›klama yapmak istiyorum. Kodlama yap›l›rken bazen sat›rlar uza-

Hat›rlarsan›z E1 hücresinde dolu sat›r say›s›n›n bir fazlas› vard›. Oysa bu defa sadece dolu sat›r say›s›n› bulacak ve o say›ya tekabül eden sat›r›n içeri¤ini boflaltaca¤›z. Burada silmek yerine boflaltmak ifllemini kullan›yoruz. Hata denetimimiz halen bitmifl de¤il. Çünkü A sütununa sürekli olarak 1 yaz›yor. Asl›nda bunu de¤ifltirmenin kolay oldu¤unu hemen anlad›n›z. Yap›lmas› gereken ifllem basit. Cells([E1], "A").Value = 1 sat›r›n› Cells([E1], "A").Value = [E1] – 1 olarak de¤ifl-

Excel Serisi

<<

tirmek yeterli olacakt›r. Bir hata denetimi daha yapmal›y›z. TextBox nesnelerinin her üçü de bofl oldu¤u halde verileri kaydetmeye çal›fl›yor. Bunu yapmamal›. En az›ndan s›ra numaras›n› vermemeli. O halde flöyle yapal›m E¤er 1. TextBox nesnesi bofl ise ya da 2. ve 3. Textbox nesneleri bofl ise veri kayd› yapmay›p bizi uyars›n. Bunun için kodlar› afla¤›daki gibi düzenleyebiliriz. Unutmay›n ki bu bizim akl›m›za gelen en k›sa çözüm. Siz zamanla farkl› çözümler üretebilirsiniz.
Private Sub CommandButton1_Click() If TextBox1 = "" Then MsgBox "isim Girmelisiniz" Else If TextBox2 = "" And TextBox3 = "" Then MsgBox "Alacak ve Ödeme kutular› ayn› ➝ anda bofl 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

Biz bu denetimleri flu an haz›rlad›¤›m›z veritaban›na göre yap›yoruz. Elbette ki daha ince ayarlar da yapmam›z gerekiyor. Mesela TextBox2 ve TextBox3 nesnelerine sadece ve sadece say›sal de¤erler girilebilmelidir. Bu konuya dilerseniz bir sonraki ay de¤inelim. fiimdi sayfa üzerinde bulunan dolu hücreleri sayma ifllemini kodlar›m›z›n aras›na alal›m ve sayfay› bu tür ifllemlerden kurtaral›m. Bunun için kodlar›n aras›na afla¤›daki sat›r› ekleyece¤iz:
Dim DoluSay As Integer DoluSay = WorksheetFunction. CountA([A1:A100]) + 1 ➝

Bu dü¤meye t›klan›ld›¤›nda TextBox’lar›n içerisi boflalt›lm›fl olacakt›r. Buraya kadar olan k›sm› anlad›ysak yeni bir iflleme giriflelim. Bir çok alacakl› ve borçluyu tablo veritaban›na kaydetti¤imizi varsayal›m. Muhtelif zamanlarda “M. Temel Korkmaz” bazen alacakl› olmufl, bazen de ödeme yapm›fl. ‹ste¤imiz fley ise “M. Temel Korkmaz”a ait raporun ne oldu¤udur. Tablomuz fiekil-9’daki gibi olsun.

Tabi bu ifllemi gerçeklefltirdikten sonra kod içerisinde bulunan bütün [E1] ifadelerini DoluSay de¤iflkeni ile de¤ifltirmeliyiz. K›sacas› kodlar afla¤›daki gibi olacakt›r.
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 bofl 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 = "" ➝ 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 ➝

fiekil 9

UserForm’u çal›flt›rd›¤›n›zda fiekil-7 ve fiekil-8’deki görüntüleri alman›z mümkün olacakt›r.

Biliyorsunuz ki Excel’de rapor alman›n onlarca yöntemi bulunuyor. fiimdi biz bunlardan bir ya da bir kaç›n› kullanal›m. UserForm üzerine bir dü¤me daha ekleyelim ve bunun bafll›¤›n› da "RAPOR" olarak de¤ifltirelim.

fiekil 7

Cells(DoluSay - 1, "C").Value = "" Cells(DoluSay - 1, "D").Value = "" End Sub

Bu kodu çal›flt›rd›¤›n›zda e¤er TextBox1 nesnesine herhangi bir isim girmediyseniz isim girmeniz için bir uyar› mesaj› verilecektir. E¤er veritaban›nda bulunan isimlerden bir tanesini yaz›p RAPOR dü¤mesine t›klarsan›z sonuç fiekil-10’daki gibi olacakt›r. fiekil-10’da da görüldü¤ü gibi veri sayfas›ndaki isimler Textbox1’de yaz›lan isime göre s›ralanm›flt›r. Ancak s›ralanan veriler liste olarak dökümü al›nsa da bir sonuç dön-

Bir de kolayl›k olmas› aç›s›ndan UserForm’un üzerine TextBox’lar› temizleme dü¤mesi yerlefltirelim ve Bu dü¤meye de afla¤›daki kodlar› ekleyelim.
Private Sub CommandButton3_Click() TextBox1 = "" TextBox2 = "" TextBox3 = "" End Sub

fiekil 8

fiekil 10 38 • CHIP Workshop > >

>>

Excel Serisi

dürmedi¤i için pek bir ifle yaramayacakt›r. O halde sayfa üzerinde AltToplam’lar ald›rmam›z gerekmektedir. Bunun için RAPOR dü¤mesinin kodunu afla¤›daki gibi de¤ifltirelim. Kodu çal›flt›rmadan önce fiekil-11’de görüldü¤ü gibi UserForm üzerine bir adet TextBox daha ekleyelim. Bu TextBox da bize rapor sonucunu gösterecektir.
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 ➝

t›kl› olacakt›r. O halde yeni bir UserForm oluflturaca¤›z. Bunun amac› da “Müflteri ‹smi Kay›t Formu” olacak. Bu yeni Formumuz fiekil-12’deki gibi olabilir. Ama yapmam›z gereken bir ekleme daha var. O da Excel Tablomuza bir sayfa daha eklemek. Yeni ekleyece¤imiz çal›flma sayfas›n›n ad› “Kisiler” olacakt›r. Ve görünümü de fiekil13’tekine benzemelidir.

sini silip yerine ComboBox1 nesnesi koyal›m. fiu ana kadar ilk UserForm’un koduna yazd›¤›m›z bütün TextBox1 yaz›lar›n› ComboBox1 olarak de¤ifltirelim. Aksi takdirde hata ile karfl›lafl›r›z. fiimdi UserForm’un üzerinde bofl bir yere çift t›klay›n ve Kod sayfas›na gidin. Kod sayfas›ndaki görüntü fiekil-15’teki gibi olacakt›r.

fiekil 15 fiekil 13

Yeni ekleyece¤imiz müflteri isimlerini art›k öncelikle buraya girece¤iz. Bunun için yapmam›z gerekenler çok basit; daha önceki formda kulland›¤›m›z kodlar›n hemen hemen ayn›s›n› kullanaca¤›z. Bunun için yeni haz›rlad›¤›m›z formun üzerinde bulunan KAYDET dü¤mesine çift t›klay›n ve aç›lan pencereye afla¤›daki 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 ➝

Dikkat ederseniz UserForm’un Click olay› aç›ld›. Bu UserForm’un varsay›lan olay›d›r. Ancak biz flimdi yazaca¤›m›z kodu UserForm’un bafllama yani Initialize olay›na yazaca¤›z. Bunun için kod penceresinin sa¤ üst köflesinde bulunan olay kutusundan Initialize olay›n› seçin (fiekil-16).

Userform’u çal›flt›r›p rapor al›nca verilerin yaz›ld›¤› en son hücreye alt toplamlar al›nacakt›r. Bu alt toplamlar›n veritaban›na herhangi bir zarar› olmayacakt›r. Bunun nedeni ise, siz yeni bir kay›t ekledi¤inizde A sütununa bu alt toplam etki etmedi¤inden yeni veri bu alt toplamlar›n üzerine yaz›lacakt›r. Her rapor ald›¤›n›zda ise tekrar istedi¤iniz alt toplam al›nacakt›r.

fiekil 16

fiekil 11

fiekil 14

Buraya kadar her fley yolunda gibi görünüyor. Ancak baz› de¤ifliklikler yaparak program›n›z› kullanacak kiflilere kolayl›k sa¤layabilirsiniz. Rapor al›rken her defas›nda isim yazmak s›k›nt› verebilir. Bunun yerine ComboBox nesnesinden isim seçmek daha man-

fiekil 12 < CHIP Workshop • 39 <

Hangi sayfada olursan›z olun Userform’dan yapm›fl oldu¤unuz bütün Müflteri ‹sim Kay›tlar› “Kisiler” sayfas›na alt alta yaz›lacakt›r. Bu formu flimdilik burada b›rak›yoruz. Çünkü bu form üzerine yeni eklemeleri önümüzdeki ay yapaca¤›z. Tekrar ilk haz›rlad›¤›m›z UserForm’a geçelim. Burada flunu yapaca¤›z. Madem art›k müflteri isimlerini sürekli olarak girdi¤imiz baflka bir UserForm ve baflka bir veri tablomuz var, o halde o verileri TextBox’a yazmaktansa ComboBox’dan seçmek daha mant›kl› olacakt›r. ‹lk UserForm’daki TextBox1 nesne-

Bu ayki konumuzu burada pat diye kesiyoruz. Çünkü bize ayr›lan yer bu kadar. Hem sizler de konu üzerine biraz çal›flm›fl olursunuz. Not: Ödüllü animasyon yar›flmam›z sonuçland›. Dereceye giren arkadafllar›m›za ödülleri gönderildi. Dereceye giren arkadafllar›m›z›n adlar›n› ve bulunduklar› yerleri burada yaz›yoruz. Asl›nda birçok arkadafl›m›z soruyu do¤ru olarak çözmüfl. Ancak biz kodlamay› ve çal›flmay› en iyi yapan arkadafllar›m›z› seçmek durumunda kald›k. 1. Recep Güdü 3. Umut Acar 2. Yüksel Özdek Samet Ünal Onur Karanc› Haluk Cengiz Fatih Çopur Ayr›ca yukar›daki di¤er dört arkadafl›m›za da 1.ye verdi¤imiz Makrolar kitab›n› hediye olarak gönderdik. Yani bu arkadafllar›m›z›n kodlamas› da taraf›m›zdan çok be¤enildi.
M. Temel Korkmaz temelkorkmaz@excel.gen.tr

Sign up to vote on this title
UsefulNot useful