<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4599780099173049989</id><updated>2011-10-06T07:35:00.231-07:00</updated><category term='Prototype'/><category term='QtRuby'/><category term='RubyOnRails'/><category term='WxRuby'/><category term='Ruby'/><category term='Ajax'/><category term='Programlama'/><category term='GUI'/><title type='text'>Boş Gezenin Boş Kalfası</title><subtitle type='html'>Tek Millet Tek Dil Tek Devlet Tek Bayrak</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ujk-ujk.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ujk-ujk.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ujk</name><uri>http://www.blogger.com/profile/17064608878054630333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://bp0.blogger.com/_kZL5PIJ9yTM/R7tNwdie6PI/AAAAAAAAAAU/ITLU1BfswtA/S220/bos_gezen.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4599780099173049989.post-9024638836131970432</id><published>2011-03-05T02:57:00.000-08:00</published><updated>2011-03-05T04:07:32.712-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Prototype'/><title type='text'>Prototype AJAX (keşke projax diye bir gem olsaydı)</title><content type='html'>Daha önce Prototype Ajax kabiliyetlerinden bir kısmını kurcalamıştım. Biraz daha derinlere dalmaya ancak fırsat bulabildim. Biraz da server tarafta betik koşturmaca yapayım dedim. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Twit gibi birşeyler&lt;/h3&gt;&lt;br /&gt;Ajax çağrıları aslında daha önce yaptığımız html yada text erişimleri yerine dinamik erişimlerde kullanılır. Yani gelecek olan cevap aslında gönderilen veriyle bağlı olarak server tarafta işlenerek oluşturulur.&lt;br /&gt;Html formlarından server'a veri gönderip almakta kullanılan GET ve POST metodlarını kullanacağız. Ajax bu metodların ikisini de veri göndermek için kullanabilir. &lt;br /&gt;&lt;br /&gt;Yeni denememizde twitter gibi yaptıklarımızı not alacağız (biraz benzer belki). Şimdi bir tane "twit.html.haml" dosyası oluşturalım ve daha önceki "index.html.haml" ile aynı klasöre koyalım :&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;-# Okuyanın anlayabileceği bir zaman bilgisi oluşturalım&lt;br /&gt;- zaman = Time.now.strftime "%d-%b-%Y %H:%M:%S"&lt;br /&gt;- isim = params['isim']  # parametreden gelen ismi al&lt;br /&gt;- twit = params['twit']  # yine parametreden twit al&lt;br /&gt;%li&lt;br /&gt;    %strong&lt;br /&gt;        = isim&lt;br /&gt;    =" - " &lt;br /&gt;    = twit&lt;br /&gt;    ="&amp;lt;br/&amp;gt;"&lt;br /&gt;    = zaman&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;bu dosyayı biraz incelersek ilk önce çağrının yapıldığı anın zaman bilgisi "Time.now" ile alınıp gün ve saat bilgisi şeklinde okuyanın daha rahat anlayabileceği formata dönüştürülüyor. "strftime" metodunu her kullanışımda "ri Time#strftime" yazıp yine formatlarına bakıyorum, ezberleyemedim gitti. Daha sonra yapılan http çağrısından "isim" ve "twit" adı verilmiş parametreleri alıyoruz. Elde ettiğimiz verilerle html formatta bir sayfa hazırlayıp geri dönüyoruz. &lt;br /&gt;&lt;br /&gt;Bu sayfa kodunun sağlıklı çalıştığını test etmek için önce klasörde bir konsol açıp :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;~/prototype$ serve&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;"serve" komutu ile server çalıştırıp (önceki prototype yazısından bakabilirsiniz) tarayıcımızı açalım ve adres olarak :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;http://localhost:4000/twit?isim=Ümit&amp;amp;amp;twit=Evden işe giderken bakkala uğradım.&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;yazalım enter basalım. Şuna benzer bir sayfayla karşılaşırız.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-AVsNQdf9AF4/TXIVqcupHyI/AAAAAAAABfQ/vM0urc7yXEk/s1600/projax_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh5.googleusercontent.com/-AVsNQdf9AF4/TXIVqcupHyI/AAAAAAAABfQ/vM0urc7yXEk/s1600/projax_1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;bir de sayfanın kaynak koduna bakarsak :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;&lt;span class="start-tag"&gt;li&lt;/span&gt;&amp;gt;&lt;br /&gt; &amp;lt;&lt;span class="start-tag"&gt;strong&lt;/span&gt;&amp;gt;&lt;br /&gt;  Ümit&lt;br /&gt; &amp;lt;strong&amp;gt;   -&lt;br /&gt; Evden işe giderken bakkala uğradım.&lt;br /&gt; &amp;lt;&lt;span class="start-tag"&gt;br&lt;/span&gt;&lt;span class="error"&gt;&lt;span class="attribute-name"&gt;/&lt;/span&gt;&lt;/span&gt;&amp;gt;&lt;br /&gt; 24-Feb-2011 21:34:11&lt;br /&gt;&amp;lt;li&amp;gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Bu kodu inceleyince "haml" dosyamızda yazdıklarımızla karşılaştırınca cevabın nasıl oluştuğunu görebilirsiniz. Eh hatasız çalıştırmaya başladığımıza göre şimdi "index.html.haml" dosyamıza geri dönüp kayıtları toplamaya başlıyalım. Önce index dosyasını şöyle değiştirelim :&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;!!!&lt;br /&gt;%html&lt;br /&gt;  %head&lt;br /&gt;    %title Bak Neler Yaptım&lt;br /&gt;    %meta{"http-equiv" =&amp;gt; "Content-Type", :content =&amp;gt; "text/html; charset=utf-8"}&lt;br /&gt;    %script{:type=&amp;gt;"text/javascript", :src=&amp;gt;"prototype.js"}&lt;br /&gt;  %body&lt;br /&gt;    %h1 Yapıyorum - Yapıyorsun - Yapıyorsunuzlar&lt;br /&gt;    %ul{:id=&amp;gt;"sarman"}&lt;/pre&gt;&lt;br /&gt;&amp;nbsp;sayfayı "localhost:4000" adresinde görelim. Bomboş henüz listede&amp;nbsp; birşey yok. Hadi&amp;nbsp; firebug ile listeye bişeyler koyalım, açın firebug konsolları twit atacaz :&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;new Ajax.Updater('sarman', 'twit', { method:'get',&lt;br /&gt;  parameters: { isim: 'Ümit', twit: 'Eve dönerken bakkala uğradım' }&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;tabii ki sizin isim ve twit değerleriniz daha farklı olabilir. Firebug konsolda birkaç noktaya dikkat edelim.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-4anNlceVU24/TXIWfR3YvuI/AAAAAAAABfU/8VJQqo-omM8/s1600/projax_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh4.googleusercontent.com/-4anNlceVU24/TXIWfR3YvuI/AAAAAAAABfU/8VJQqo-omM8/s1600/projax_2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Birincisi, tarayıcı adres satırında boşluklar ve standart karakter setinde olmayan karakterler olamayacağı için bizim girdiğimiz adres bilgisindeki bu geçersiz karakterler server'ın anlayacağı karakterlere dönüştürülmüş, sağolsunlar bunlar için de kod yazmamıza gerek kalmamış. İkincisi burda yapılan çağrının ayrıntılarını, gönderilen verilerin değerlerini, geri çevrilen cevabı ve html görsel karşılığını inceleyebiliyoruz. &lt;br /&gt;&lt;br /&gt;Şimdi başka twit girmeye kalkınca sıralanmıyor, olanın değeri değişiyor. Biz sıralı liste elde etmek için ajax çağrısını şöyle yapmalıyız :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;new Ajax.Updater('sarman', 'twit', { &lt;br /&gt;  &lt;span style="font-weight: bold;"&gt;insertion: 'top',&lt;/span&gt; method:'get',&lt;br /&gt;  parameters: { isim: 'Ümit', twit: 'Akşam maç var hazırlık yapmalı.' }&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Evet, bundan sonra biraz gelen bilgiyi analiz edelim ve sevgili kullanıcıdan eksik parametre gelirse kendisini azarlayıp, yerin dibine sokacak bir rutin yazalım. Bunun için "twit.html.haml" dosyasını şöyle değiştirelim :&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;-# Okuyanın anlayabileceği bir zaman bilgisi oluşturalım&lt;br /&gt;- time = Time.now.strftime "%d-%b-%Y %H:%M:%S"&lt;br /&gt;- isim = params['isim']  # parametreden gelen ismi al&lt;br /&gt;- twit = params['twit']  # yine parametreden twit al&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- if twit.nil? or isim.nil?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    :javascript&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        alert("Doğru dürüst bilgi girin");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- else&lt;/span&gt;&lt;br /&gt;    %li&lt;br /&gt;        %strong&lt;br /&gt;            = isim&lt;br /&gt;        =" - " &lt;br /&gt;        = twit&lt;br /&gt;        ="&amp;lt;br/&amp;gt;" &lt;br /&gt;        = time&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Koyu puntoyla yazılmış kısım ilave olarak gelmiştir. Gördüğünüz gibi gelen ajax çağrısında &lt;span style="font-weight: bold;"&gt;twit&lt;/span&gt; veya &lt;span style="font-weight: bold;"&gt;isim&lt;/span&gt; parametresi boş gelmişse geriye bir javascript dönüyoruz. İlerde bu javascript dönen ajax çağrılarını daha hayırlı işlerde kullanırsınız umarım. Bu ekleme sonrasında tarayıcıdan göndereceğimiz ajax çağrısına da gelen cevaptaki scripti çalıştırması için ilave yapmalıyız. Tarayıcımızı açalım ve firebug ile yeni bir twit atalım:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;new Ajax.Updater('sarman', 'twit', { &lt;br /&gt;  insertion: 'top', method:'get', &lt;br /&gt;  &lt;span style="font-weight: bold;"&gt;evalScripts:'true', &lt;/span&gt;&lt;br /&gt;  parameters: { twit: 'Maçı unut! Blog kapatılmış, protestoya gidiyorum' }&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Yahh! anladınız mı? Ben bu yazıyı hazırlarken, blogspot.com erişimi mahkeme kararıyla kapatıldı. &lt;span style="font-weight: bold;"&gt;Ama size yemin ederim benim suçum yok. Her ne kadar benim blog sayfamda mahkeme yazısı görseniz de benimle alakası yok.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ve benim de daha fazla yazasım yok , hesapta bu twitleri dosyaya falan kaydedecektim. Kalın sağlıcakla...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4599780099173049989-9024638836131970432?l=ujk-ujk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ujk-ujk.blogspot.com/feeds/9024638836131970432/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://ujk-ujk.blogspot.com/2011/03/prototype-ajax-keske-projax-diye-bir.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/9024638836131970432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/9024638836131970432'/><link rel='alternate' type='text/html' href='http://ujk-ujk.blogspot.com/2011/03/prototype-ajax-keske-projax-diye-bir.html' title='Prototype AJAX (keşke projax diye bir gem olsaydı)'/><author><name>ujk</name><uri>http://www.blogger.com/profile/17064608878054630333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://bp0.blogger.com/_kZL5PIJ9yTM/R7tNwdie6PI/AAAAAAAAAAU/ITLU1BfswtA/S220/bos_gezen.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh5.googleusercontent.com/-AVsNQdf9AF4/TXIVqcupHyI/AAAAAAAABfQ/vM0urc7yXEk/s72-c/projax_1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4599780099173049989.post-8647518656190573815</id><published>2011-01-07T14:36:00.000-08:00</published><updated>2011-01-07T14:39:25.771-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='QtRuby'/><title type='text'>RubyQt ile Küçük Bir Zamanlayıcı</title><content type='html'>&lt;a href="http://www.ozgurlukicin.com/pardus2011" target="_blank"&gt;&lt;img alt="Özgürlük İçin... Pardus..." src="http://caracal.ozgurlukicin.com/pardus-counter/timer.php?w=180&amp;amp;h=60&amp;amp;c=mavi" style="height: 60px; width: 180px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-size: x-large;"&gt;Qt&lt;/span&gt; Designer ile Ruby program denemelerim devam ediyor. Daha önce wxRuby ile yaptığım ve çok kullandığım bir uygulamayı Qt designer ile yapmaya karar verdim. Zamanlayıcı uygulamasını işlerimi "multitasking" yönetebilmek için tasarlamıştım. Program aslında çok basit bir geri sayıcı, ayarlanan süre sonunda beni uyarsın diye kuruyorum. Verilen süreyi geriye doğru saydıktan sonra sıfıra gelince uygulama penceresini minimize edip büyüterek uyarıyor. Faydalı bir eser , aynı işte takılıp kalmamı engellemek için kullanıyorum.&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;div align="justify"&gt;Öncelikle QT Designer ile &lt;b&gt;timer.ui&lt;/b&gt; adında bir arabirim hazırlamamız gerekiyor. Yeni arabirimi QWidget olarak seçip designer'ı başlattıktan sonra, form boyutlarını 260x260 olarak değiştiriyoruz. Formun boyutunun değişmesini istemediğmiz için minimumSize ve maximumSize özelliklerini de 260x260 olarak ayarlıyoruz. Formun arkaplan rengini değiştirmek için "styleSheet" özelliği yanındaki (...) düğmesini tıklayarak açılan pencerede, "Add Color" yanındaki dropdown listeden "background-color" seçiyoruz ve RGB olarak (128,255,255) cyan rengi ayarlıyoruz.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_kZL5PIJ9yTM/TSeS6o3QedI/AAAAAAAABeA/eFD_3hylUbk/s1600/timer_bc.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="290" src="http://3.bp.blogspot.com/_kZL5PIJ9yTM/TSeS6o3QedI/AAAAAAAABeA/eFD_3hylUbk/s400/timer_bc.png" width="400" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;Şimdi aşağıdaki objeleri gösterilen isim, konum ve boyutlarla yerleştirelim.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_kZL5PIJ9yTM/TSeUFU_s7hI/AAAAAAAABeE/863zPfMu_1o/s1600/timer_form.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_kZL5PIJ9yTM/TSeUFU_s7hI/AAAAAAAABeE/863zPfMu_1o/s1600/timer_form.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;Kısaca özetlersek, sayılacak zamanı saat ve dakika olarak 2 spinbox üzerinden gireceğiz. &lt;b&gt;Baştan Başla&lt;/b&gt; isimli düğmeye tıklayınca süremiz spinbox'larda belirtilen değerden geriye doğru symaya başlayacak. Kalan süre ortadaki kocaman label'da (result_text) görünecek. Uygulamaya benim daha sonra eklediğim 4 düğme de spinbox'lara sık kullanılan zaman değerlerini kısa yoldan yüklemek için kullanılacak.&lt;/div&gt;&lt;div align="justify"&gt;Maalesef uygulamamızda designer üzerinden ayarlayıp işi bitireceğimiz SIGNAL-SLOT bağlantıları yok, tüm button'lar bizim yazacağımız script'leri çağıracak. Şimdi forma SLOT'lar ekleyip button'larımızı bunlara bağlayacağız. Forma nasıl kendi SLOT'umuzu ekleyeceğimizi &lt;a href="http://ujk-ujk.blogspot.com/2010/11/qt-designer-bolum-2.html" target="_blank"&gt;qt-designer-bolum-2&lt;/a&gt; yazımızda görmüştük. Ekleyeceğimiz SIGNAL-SLOT bağlantıları şöyle :&lt;/div&gt;&lt;pre&gt;&lt;span style="color: black;"&gt;button_15_min, SIGNAL(clicked()), Form, SLOT(button_15_clicked())&lt;br /&gt;button_30_min, SIGNAL(clicked()), Form, SLOT(button_30_clicked())&lt;br /&gt;button_45_min, SIGNAL(clicked()), Form, SLOT(button_45_clicked())&lt;br /&gt;button_1_h, SIGNAL(clicked()), Form, SLOT(button_1_clicked())&lt;br /&gt;pushButton, SIGNAL(clicked()), Form, SLOT(restart()))&lt;/span&gt;&lt;/pre&gt;Designer ile işimiz bu kadar, artık Ruby kodlamaya geçebiliriz. &lt;b&gt;timer.ui&lt;/b&gt; dosyasını kaydedip çıkalım. Şimdi komut satırında :&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color: blue;"&gt;rbuic4 -x -o timer.rb timer.ui&lt;/span&gt;&lt;/blockquote&gt;yazalım ve görselimize karşı gelen Ruby dosyasını üretelim. Dosyayı önceki yazımızdaki gibi düzenleyip slotlara karşı metodları tanımlayalım. &lt;br /&gt;&lt;pre&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;require&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #dd4a4a;"&gt;'timer'&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #0057ae;"&gt;MyWidget&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #0057ae;"&gt;Qt&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;::&lt;/span&gt;&lt;span style="color: #0057ae;"&gt;Widget&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt; slots &lt;/span&gt;&lt;span style="color: #dd4a4a;"&gt;'button_15_clicked()'&lt;/span&gt;&lt;span style="color: black;"&gt;, &lt;/span&gt;&lt;span style="color: #dd4a4a;"&gt;'button_30_clicked()'&lt;/span&gt;&lt;span style="color: black;"&gt;, &lt;/span&gt;&lt;span style="color: #dd4a4a;"&gt;'button_45_clicked()'&lt;/span&gt;&lt;span style="color: black;"&gt;, &lt;/span&gt;&lt;span style="color: #dd4a4a;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="color: #dd4a4a;"&gt;           'button_1_clicked()'&lt;/span&gt;&lt;span style="color: black;"&gt;, &lt;/span&gt;&lt;span style="color: #dd4a4a;"&gt;'restart()'&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;def&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt; initialize parent&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt;&lt;span style="color: #c09000;"&gt;nil&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #c09000;"&gt;super&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #00892b;"&gt;@base&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt;&lt;span style="color: #0057ae;"&gt;Ui_Form&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.new&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #00892b;"&gt;@base&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.setupUi&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #c09000;"&gt;self&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt; &lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;def&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt; button_15_clicked&lt;br /&gt; &lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;def&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt; button_30_clicked&lt;br /&gt; &lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;def&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt; button_45_clicked&lt;br /&gt; &lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;def&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt; button_1_clicked&lt;br /&gt; &lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt; &lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;def&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt; restart&lt;br /&gt; &lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    about &lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #bb1188;"&gt;&lt;b&gt;KDE&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;::&lt;/span&gt;&lt;span style="color: #0057ae;"&gt;AboutData&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.new&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #bf0303;"&gt;"form"&lt;/span&gt;&lt;span style="color: black;"&gt;, &lt;/span&gt;&lt;span style="color: #bf0303;"&gt;"Form"&lt;/span&gt;&lt;span style="color: black;"&gt;, &lt;/span&gt;&lt;span style="color: #bb1188;"&gt;&lt;b&gt;KDE&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.ki18n&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #bf0303;"&gt;""&lt;/span&gt;&lt;span style="color: black;"&gt;), &lt;/span&gt;&lt;span style="color: #bf0303;"&gt;"0.1"&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #bb1188;"&gt;&lt;b&gt;KDE&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;::&lt;/span&gt;&lt;span style="color: #0057ae;"&gt;CmdLineArgs&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.init&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #bb1188;"&gt;&lt;b&gt;ARGV&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;, about)&lt;br /&gt;    a &lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #bb1188;"&gt;&lt;b&gt;KDE&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;::&lt;/span&gt;&lt;span style="color: #0057ae;"&gt;Application&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.new&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #7488ae;"&gt;&lt;i&gt;#u = Ui_Form.new&lt;/i&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;    w &lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #0057ae;"&gt;MyWidget&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.new&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #7488ae;"&gt;&lt;i&gt;#u.setupUi(w)&lt;/i&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;    a&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.topWidget&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt; w&lt;br /&gt;    w&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.show&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;    a&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.exec&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;Şimdi hatasız çalışır ama butonlara tıklamak şimdilik birşey yapmıyor. Ortadaki dört butonun yaptığı iş basit, spinbox'ların içine kestirmeden değer yazıyorlar önce onları düzenleyelim :&lt;br /&gt;&lt;pre&gt;&lt;span style="color: black;"&gt;&lt;br /&gt; &lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;def&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt; button_15_clicked&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #00892b;"&gt;@base&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.hour_spin.setValue&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #c09000;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #00892b;"&gt;@base&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.minute_spin.setValue&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #c09000;"&gt;15&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;def&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt; button_30_clicked&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #00892b;"&gt;@base&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.hour_spin.setValue&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #c09000;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #00892b;"&gt;@base&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.minute_spin.setValue&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #c09000;"&gt;30&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;def&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt; button_45_clicked&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #00892b;"&gt;@base&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.hour_spin.setValue&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #c09000;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #00892b;"&gt;@base&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.minute_spin.setValue&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #c09000;"&gt;45&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;def&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt; button_1_clicked&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #00892b;"&gt;@base&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.hour_spin.setValue&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #c09000;"&gt;1&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #00892b;"&gt;@base&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.minute_spin.setValue&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #c09000;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt; &lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;Çalıştırıp orta sıradaki butonların spinbox'lara değer yazdığını test edelim. İlk çalışmada default olarak 1 saat set edilmesi için "initialize" metodunda "button_1_clicked" çağrılmalıdır. Zamanlama yapmanın koşulu timer kullanmak. QtRuby'de zamanlayıcı Qt::Timer sınıfı ile üretilir. Yeni bir zamanlayıcı üreteceğiz, bunun tıklamasını 1000 ms(1 saniye) ayarlayacağız ve zamanlayıcı çıkış verince çalışmasını istediğimiz rutin için bu zamanlayıcının "timeout()" sinyalini bizim tanımlayacağımız "timeout_block()" metoduna bağlayacağız. Daha sonra da zamanlayıcımızı çalıştırıp, sayacağımız değeri spinbox'lardan alacağımız "restart" rutinini çağıracağız. Bunun için "initialize" metodunu şöyle değiştiriyoruz :&lt;br /&gt;&lt;pre&gt;&lt;b&gt;def&lt;/b&gt; restart&lt;br /&gt;  &lt;span style="color: #00892b;"&gt;@sayac&lt;/span&gt; &lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt; &lt;span style="color: #00892b;"&gt;@base&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.hour_spin.value&lt;/span&gt; &lt;span style="color: #ff9fec;"&gt;*&lt;/span&gt; &lt;span style="color: #c09000;"&gt;3600&lt;/span&gt; &lt;span style="color: #ff9fec;"&gt;+&lt;/span&gt; &lt;span style="color: #00892b;"&gt;@base&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.minute_spin.value&lt;/span&gt; &lt;span style="color: #ff9fec;"&gt;*&lt;/span&gt; &lt;span style="color: #c09000;"&gt;60&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #00892b;"&gt;@bitti&lt;/span&gt; &lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt; &lt;span style="color: #c09000;"&gt;false&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #00892b;"&gt;@bitti_sayac&lt;/span&gt; &lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt; &lt;span style="color: #c09000;"&gt;0&lt;/span&gt;&lt;br /&gt; &lt;b&gt;end&lt;/b&gt;&lt;br /&gt;&lt;/pre&gt;İlk satır saniye olarak değeri hesaplayıp geri sayım sayacına bunu yazıyor. 2. satırda süre bitince saymayı bırakıp animasyona geçtiğimizin bilgisini saklayan değişkeni sıfırlıyoruz. Son satırdaki sıfırladığımız sayacı da animasyon için kullanacağız. Sırada "timeout_block" metodumuz var.&lt;br /&gt;&lt;pre&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;def&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt; timeout_block&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #00892b;"&gt;@bitti&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #c09000;"&gt;true&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #00892b;"&gt;@sayac&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;==&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #c09000;"&gt;1&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #00892b;"&gt;@sayac&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;-=&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #c09000;"&gt;1&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #00892b;"&gt;@sayac&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #c09000;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #00892b;"&gt;@sayac&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #c09000;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #00892b;"&gt;@base&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.result_text.text&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt; (&lt;/span&gt;&lt;span style="color: #bf0303;"&gt;"%02d"&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;%&lt;/span&gt;&lt;span style="color: black;"&gt; (&lt;/span&gt;&lt;span style="color: #00892b;"&gt;@sayac&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;/&lt;/span&gt;&lt;span style="color: #c09000;"&gt;60&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.to_s&lt;/span&gt;&lt;span style="color: black;"&gt;) &lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;+&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #bf0303;"&gt;":"&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;+&lt;/span&gt;&lt;span style="color: black;"&gt; (&lt;/span&gt;&lt;span style="color: #bf0303;"&gt;"%02d"&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;%&lt;/span&gt;&lt;span style="color: black;"&gt; (&lt;/span&gt;&lt;span style="color: #00892b;"&gt;@sayac&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;%&lt;/span&gt;&lt;span style="color: #c09000;"&gt;60&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.to_s&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;br /&gt;  &lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #00892b;"&gt;@bitti_sayac&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;+=&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #c09000;"&gt;1&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #00892b;"&gt;@bitti&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt; ((&lt;/span&gt;&lt;span style="color: #00892b;"&gt;@bitti_sayac&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #c09000;"&gt;5&lt;/span&gt;&lt;span style="color: black;"&gt;) &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;or&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt; ((&lt;/span&gt;&lt;span style="color: #00892b;"&gt;@bitti_sayac&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;%&lt;/span&gt;&lt;span style="color: #c09000;"&gt;5&lt;/span&gt;&lt;span style="color: black;"&gt;) &lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;==&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #c09000;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt;)) &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;and&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #00892b;"&gt;@bitti&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;   windowState&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;==&lt;/span&gt;&lt;span style="color: #c09000;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt; ? showMinimized : showNormal&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;1. satır geri sayımın son saniyesinde sayımın bittiğini belirliyor. 2. satır geri sayım işlemi, bu rutine her gelindiğinde 1 saniye geçmiştir ve sayacı 1 eksiltmek gerekir. 3. satırda sayacın eksiye gitesi engelleniyor, çoook uzun zaman geçince sayı negatiften devir yapabilir diye önlem aldık. 4. satır kalan süreyi ortadaki kocaman label'a yazıyor ki kullanıcımız bakınca ne kadar süre kaldığını görsün. 5. satır süre bittiyse animasyon sayacımızı saydırıyor. Sonraki if bloğu da ilk 5 saniyede her seferinde sonrasında 5 saniyede bir uygulama penceresini aşağı indirip geri alıyor.&lt;br /&gt;Artık minik timer ile oynayabiliriz. Ben bunu kurup bilgisayara dalıyorum, süre bitince beni ayıltıp dünyaya dönmem gerektiğini hatırlatıyor. Öğrenme yolunda faideli bir eser oldu ,&lt;br /&gt;Hoşçakalın...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4599780099173049989-8647518656190573815?l=ujk-ujk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ujk-ujk.blogspot.com/feeds/8647518656190573815/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://ujk-ujk.blogspot.com/2011/01/rubyqt-ile-kucuk-bir-zamanlayc.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/8647518656190573815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/8647518656190573815'/><link rel='alternate' type='text/html' href='http://ujk-ujk.blogspot.com/2011/01/rubyqt-ile-kucuk-bir-zamanlayc.html' title='RubyQt ile Küçük Bir Zamanlayıcı'/><author><name>ujk</name><uri>http://www.blogger.com/profile/17064608878054630333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://bp0.blogger.com/_kZL5PIJ9yTM/R7tNwdie6PI/AAAAAAAAAAU/ITLU1BfswtA/S220/bos_gezen.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_kZL5PIJ9yTM/TSeS6o3QedI/AAAAAAAABeA/eFD_3hylUbk/s72-c/timer_bc.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4599780099173049989.post-289637684556542499</id><published>2010-12-22T11:58:00.000-08:00</published><updated>2011-03-05T07:14:53.195-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><category scheme='http://www.blogger.com/atom/ns#' term='Prototype'/><title type='text'>Protototototype Ajax Antremanı (Akıllı adamlar bulmuş)</title><content type='html'>&lt;a href="http://www.ozgurlukicin.com/pardus2011" target="_blank"&gt;&lt;img alt="Özgürlük İçin... Pardus..." src="http://caracal.ozgurlukicin.com/pardus-counter/timer.php?w=180&amp;amp;h=60&amp;amp;c=mavi" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;img height="1" src="https://blogger.googleusercontent.com/tracker/4599780099173049989-8091248252894997296?l=ujk-ujk.blogspot.com" width="1" /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color: grey;"&gt;Tok nefs sarhoş kafa gibidir, hiçbir şeyi düzgün yapamaz. Nefs dediğin aç olmalı , aç nefsin olunca bilincin açılır. Nefsi fazla doyurmayacaksın , burnunun dibindekini göremezsin.&lt;/span&gt;&lt;/blockquote&gt;&lt;a href="http://rubyonrails.org/" target="_blank" title="Rails"&gt;Rails&lt;/a&gt;'de javascript yardımcısı olarak ana pakette &lt;a href="http://www.prototypejs.org/" target="_blank"&gt;Prototype&lt;/a&gt; ve &lt;a href="http://script.aculo.us/" target="_blank"&gt;Script.aculo.us&lt;/a&gt; javascript kütüphaneleri kullanılmış. Ajax konusunda araştırma yaparken güzel bir yazı buldum paylaşmak isterim. &lt;br /&gt;&lt;h3&gt;Malzeme Listesi&lt;/h3&gt;1 Adet &lt;a href="http://www.ozgurlukicin.com/pardus2011" target="_blank"&gt;Pardus&lt;/a&gt;&lt;br /&gt;1 Adet &lt;a href="http://www.ruby-lang.org/tr/" target="_blank"&gt;Ruby&lt;/a&gt;&lt;br /&gt;1 Adet &lt;a href="http://rubygems.org/gems/haml" target="_blank"&gt;HAML&lt;/a&gt; gem&lt;br /&gt;1 Adet &lt;a href="http://rubygems.org/gems/serve" target="_blank"&gt;Serve&lt;/a&gt; gem&lt;br /&gt;1 Adet &lt;a href="http://www.prototypejs.org/download" target="_blank"&gt;Prototype.js&lt;/a&gt;&lt;br /&gt;1 Adet &lt;a href="http://www.mozilla-europe.org/tr/firefox/"&gt;Firefox&lt;/a&gt; Tarayıcı&lt;br /&gt;1 Adet &lt;a href="http://getfirebug.com/"&gt;Firebug&lt;/a&gt; Eklentisi&lt;br /&gt;&lt;h4&gt;Tarif&lt;a name='more'&gt;&lt;/a&gt;&lt;/h4&gt;Öncelikle denemeleri yapacağımız bir klasör açalım ve bu klasörde "index.html.haml" adında bir dosya oluşturalım. Dosya içeriği şöyle olsun :&lt;br /&gt;&lt;pre&gt;!!!&lt;br /&gt;&lt;span style="color: blue;"&gt;%html&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: blue;"&gt;%head&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue;"&gt;%title&lt;/span&gt; Boş Sayfa&lt;br /&gt;    &lt;span style="color: blue;"&gt;%meta&lt;/span&gt;{"http-equiv" =&amp;gt; "Content-Type", :content =&amp;gt; "text/html; charset=utf-8"}&lt;br /&gt;    &lt;span style="color: blue;"&gt;%script&lt;/span&gt;{:type=&amp;gt;"text/javascript", :src=&amp;gt;"prototype.js"}&lt;br /&gt;  &lt;span style="color: blue;"&gt;%body&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue;"&gt;%h1&lt;/span&gt;&lt;br /&gt;      Boş Sayfa&lt;br /&gt;&lt;/pre&gt;Bu "haml" dosyası Ruby'nin haml ve serve gemleri sayesinde html'e döndürülecektir. İlk satırdaki "!!!" komutu html koddaki karşılığı "!DOCTYPE" satırıdır. meta satırı da tarayıcıya utf-8 karakter kodlaması ildirir. Şimdi klasörümüzde bir komut isteminde &lt;span style="color: maroon;"&gt;serve&lt;/span&gt; komutu çalıştıralım :&lt;br /&gt;&lt;pre&gt;ujk@ujk-pardus prototype $ serve&lt;br /&gt;Install Mongrel or Thin for better performance.&lt;br /&gt;[2010-12-21 21:47:35] INFO  WEBrick 1.3.1&lt;br /&gt;[2010-12-21 21:47:35] INFO  ruby 1.8.7 (2010-01-10) [i686-linux]&lt;br /&gt;[2010-12-21 21:47:35] INFO  WEBrick::HTTPServer#start: pid=27412 port=4000&lt;/pre&gt;Şimdi Firefox tarayıcıyı açıp "localhost:4000" adresine gidersek hazırladığımız sayfayı göreceğiz, bomboş bir sayfada kocaman "Boş Sayfa" yazısı. &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_kZL5PIJ9yTM/TRJVR6cJTUI/AAAAAAAABdw/CVGkJBsWFNY/s1600/proto1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="194" src="http://2.bp.blogspot.com/_kZL5PIJ9yTM/TRJVR6cJTUI/AAAAAAAABdw/CVGkJBsWFNY/s320/proto1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Çalışma sayfamızda "ajax.js" adını verdiğimiz bir javascript dosyası oluşturalım ve içine şunu yazalım.&lt;br /&gt;&lt;pre&gt;alert(&lt;span style="color: #f082b2;"&gt;'Merhaba Ajax!'&lt;/span&gt;);&lt;br /&gt;&lt;/pre&gt;Firebug konsolu web sayfası üzerinde javascript çalıştırmak için ideal bir yardımcı. Şimdi Firebug konsolu açıyoruz ve ilk ajax komut satırımızı yazıyoruz :&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;gt;&amp;gt; new Ajax.Request("ajax.js", {method: "get"});&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Enter basınca "ajax.js" dosyasına bir çağrı yapılacak ve bu çağrının cevabında dosyanın içindeki javascript kodu gelecek ve çalışacaktır :&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_kZL5PIJ9yTM/TRJV-GiLDmI/AAAAAAAABd0/z00sGjgVY5E/s1600/proto2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="104" src="http://3.bp.blogspot.com/_kZL5PIJ9yTM/TRJV-GiLDmI/AAAAAAAABd0/z00sGjgVY5E/s320/proto2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Bu komut "method" dan başka parametrelerde alıyor, mesela işlem tamamlanınca kod çalıştırması bitince "onComplete" parametresindeki eylem çağırılır :&lt;br /&gt;&lt;pre&gt;new Ajax.Request("ajax.js", {method: "get",&lt;br /&gt;   &lt;b&gt;onComplete: function(){alert("Tamamlandı")}&lt;/b&gt;&lt;br /&gt;});&lt;/pre&gt;Bu satırı çalıştırınca önce ajax çağrısı yapılır, cevabında gelen mesaj çıkarılır, işlem bitince de koyu puntolu satırda belirtilen "Tamamlandı" mesajı ekrana çıkar. Bundan başka ajax çağrısı sağlıklı gerçekleşince bir kod çalışmasını istiyorsak "onSuccess" parametresine eylem bağlarız :&lt;br /&gt;&lt;pre&gt;new Ajax.Request("ajax.js", {method: "get",&lt;br /&gt;    onComplete: function(){alert("Tamamlandı")},&lt;br /&gt;    &lt;b&gt;onSuccess: function(){alert("Çağrı Başarılı")}&lt;/b&gt;&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;Bu şekilde ilkönce ajax çağrısı yapılacak ve bu çağrı başarılı olunca "Çağrı Başarılı" mesajı çıkacak, sonra sırayla "Merhaba Ajax!" ve "Tamamlandı" mesajları gelecektir.&lt;br /&gt;Bir de yapılan ajax çağrısına serverdan hata dönerse ne olacak? O zaman "onFailure" parametresi kullanılır :&lt;br /&gt;&lt;pre&gt;new Ajax.Request("&lt;b&gt;ajan.js&lt;/b&gt;", {method: "get",&lt;br /&gt;    onComplete: function(){alert("Tamamlandı")},&lt;br /&gt;    onSuccess: function(){alert("Çağrı Başarılı")},&lt;br /&gt;    &lt;b&gt;onFailure: function(){alert('Hata Oluştu!')}&lt;/b&gt;&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;Olmayan "ajan.js" dosyası çağırılınca server'dan hata dönecek bu durumda "onFailure" eylemi tetiklenecektir. Ama iyi ya da kötü ajax request eylemi tamamlandığı için "Tamamlandı" mesajı işin sonunda çıkacaktır.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Updater&lt;/h3&gt;&lt;h3&gt;&amp;nbsp;&lt;/h3&gt;Ajax.Updater denemesi yapmak için "index.html.haml" dosyamıza bir içi boş "div" yerleştirelim. İçini Ajax ile dolduracağız.&lt;br /&gt;&lt;pre&gt;%html&lt;br /&gt;  %head&lt;br /&gt;    %title Boş Sayfa&lt;br /&gt;    %script{:type=&amp;gt;"text/javascript", :src=&amp;gt;"prototype.js"}&lt;br /&gt;  %body&lt;br /&gt;    %h1&lt;br /&gt;      Boş Sayfa&lt;br /&gt;    &lt;b&gt;%div{:id=&amp;gt;"sarman"}&lt;/b&gt;&lt;br /&gt;&lt;/pre&gt;Bir de Ajax çağrısı yapacağımız sayfa yapalım adı "ajax.haml" olsun. Dosyanın içine şunu yazalım :&lt;br /&gt;&lt;pre&gt;&lt;span style="color: blue;"&gt;%h2&lt;/span&gt; Aslında burası boş değildi &lt;br /&gt; &lt;/pre&gt;Şimdi firebug konsolu açıp şu satırı yazalım :&lt;br /&gt;&lt;pre&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; new Ajax.Updater("sarman", "ajax.haml", {method: "get"});&lt;/pre&gt;Bu komut ile "id" si "sarman" olan html tag'in içini "ajax.haml" dosyasına yapılan "get" metodu çağrısına verilen cevap ile dolduruyor. Şu görüntü oluşuyor :&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_kZL5PIJ9yTM/TRJWfYjrf5I/AAAAAAAABd4/KBsFplijXq8/s1600/proto3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_kZL5PIJ9yTM/TRJWfYjrf5I/AAAAAAAABd4/KBsFplijXq8/s1600/proto3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Firebug konsolun ne kadar faideli bir eser olduğuna hayretler ederken aklıma web serverlar üzerinde bu kadar basit araçlarla ne tehlikeler oluşturulabileceği ihtimali de geliyor. Bu arada daha önce bahsetmedim galiba, Firebug'da çok satırlı javascript komutu yazmak için komut satırının en sağındaki düğmeyi tıklamak yeterli. "Ajax.Updater" ile "Ajax.Request" aynı parametreleri alırlar, "Updater" bir extra parametre alır, "insertion" parametresi ile olanın değiştirilmeyip beliritlen yerden ekleme yapılacağı anlatılır. Az evvelki satırı tekrarladığımızda sayfaya ilave bir satır gelmez hep aynı değer içeriğe yazılır. Ama şöyle yazarsak :&lt;br /&gt;&lt;pre&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; new Ajax.Updater("sarman", "ajax.haml", {method: "get"&lt;b&gt;, insertion: "bottom"&lt;/b&gt;});&lt;/pre&gt;Artık bu satırı her girişimizde eskisinin altına eklenerek gidecektir. Konsolda yukarı ok bastıkça bir önceki komut aynen gelir, artık bu satırı tekrar tekrar çalıştırarak sonsuz sayıda eklemeye çalışabiliriz. Ancak böyle defa defa yazmaya gerenk yok "PeriodicalUpdater" bizim için tekrarlama işlerini yapar. "Updater" in "Request" den gelmesi gibi "PeriodicalUpdater" de "Updater" den üremiştir. Çok faydalı bir eserdir, belirli zaman aralıklarıyla sayfamızda birşeyleri değiştirmek ya da tazelemek istediğimizde kullanırız. Şimdi sayfamızı tazeliyelim ve temizlensin sonra şu satırları Firebug konsoldan girelim :&lt;br /&gt;&lt;pre&gt;new Ajax.&lt;b&gt;PeriodicalUpdater&lt;/b&gt;("sarman", "ajax.haml", {&lt;br /&gt;    method: "get",&lt;br /&gt;    insertion: "bottom", &lt;br /&gt;    &lt;b&gt;frequency: 5&lt;/b&gt;&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;Yah! 5 saniyede bir satırı ekleyip duruyor. Eee, nasıl duracak bu? Bıraksak patlayana kadar gider. Ancak sayfayı tazeleyince duracak. Bunu yazılımla durdurmak için işlemi bir değişkene bağlayıp, "stop" metodunu çağırmamız gerekiyor. Yani :&lt;br /&gt;&lt;pre&gt;var tekrar = new Ajax.&lt;b&gt;PeriodicalUpdater&lt;/b&gt;("sarman", "ajax.haml", {&lt;br /&gt;    method: "get",&lt;br /&gt;    insertion: "bottom", &lt;br /&gt;    &lt;b&gt;frequency: 5&lt;/b&gt;&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;Şimdi bir süre seyrettikten sonra :&lt;br /&gt;&lt;pre&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; tekrar.stop(); &lt;/pre&gt;komutu girerek periyodik işlemi durdurabiliriz. Bir de "decay" parametresi var bu süreyi katlamaya yarıyor. Mesela "decay: 2" verilirse önce 5 saniye sonra sırayla 10,20,40,80... şeklinde katlanarak gidecek ve bir süre sonra sanki hiç değişim olmuyormuş gibi gelecektir.&lt;br /&gt;That's it, bu kadar! Sonrasında server'dan dinamik çağrılar yapmak var, ama başka yazıda. ( İnşallah "ajax yolları" yazısına benzemez ben yazının devamını hazırlayana adamlar Rails3 versiyon çıkardı, herşey değişti :-) )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4599780099173049989-289637684556542499?l=ujk-ujk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ujk-ujk.blogspot.com/feeds/289637684556542499/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://ujk-ujk.blogspot.com/2010/12/protototototype-ajax-antreman-akll.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/289637684556542499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/289637684556542499'/><link rel='alternate' type='text/html' href='http://ujk-ujk.blogspot.com/2010/12/protototototype-ajax-antreman-akll.html' title='Protototototype Ajax Antremanı (Akıllı adamlar bulmuş)'/><author><name>ujk</name><uri>http://www.blogger.com/profile/17064608878054630333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://bp0.blogger.com/_kZL5PIJ9yTM/R7tNwdie6PI/AAAAAAAAAAU/ITLU1BfswtA/S220/bos_gezen.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_kZL5PIJ9yTM/TRJVR6cJTUI/AAAAAAAABdw/CVGkJBsWFNY/s72-c/proto1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4599780099173049989.post-3881771561628791994</id><published>2010-11-03T13:48:00.000-07:00</published><updated>2010-12-24T02:12:36.107-08:00</updated><title type='text'>QT Designer Bölüm-2</title><content type='html'>&lt;a href="http://www.ozgurlukicin.com/pardus2011" target="_blank"&gt;&lt;img alt="Özgürlük İçin... Pardus..." src="http://caracal.ozgurlukicin.com/pardus-counter/timer.php?w=180&amp;amp;h=60&amp;amp;c=mavi" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Önceki yazıda RGB elde etmek için spinbox'lar ve slider'lar koyduk, ne güzel birbirine de bağladık. Bağladık ta ne renk olduğunu görmedik. Yaptık bi uygulama bari bir işe yarasın.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Qt kütüphanesi kullanırken nesneleri signal-slot bağlantıları ile birbirine bağlayabildiğimizi gördük. Peki biz bu sürgülerin gösterdiği değere karşı gelen rengi bir yerde görmek istersek ne olacak. 3 slider değerini tek bir nesnenin arkaplan rengine designer kullanarak bağlamamız mümkün değil. Bu durumda biraz kod yazmamız gerekecek.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bu yazıda QtDesigner ile hazırlanan Ruby dosyası ile ayrı bir dosyada hazırladığımız kodları birleştireceğiz. İlk önce renklendirme yapmak için ekrana bir label ekleyeceğiz. Ardından bize lazım olan nesneleri isimlendireceğiz ve program yazacağız.&lt;br /&gt;&lt;br /&gt;Önce QtDesigner'da eski "first.ui" dosyasını açalım ve "second.ui" adıyla kayıt edelim. Düzenleme modunda "Display Widgets" içinden bir Label'ı tutup formun en sağ kenarına çekip bırakalım. Sonra Label'ı çift tıklatıp yazısını silelim. Aşağıdaki şekil oluşacak:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_kZL5PIJ9yTM/TM83V0Q7VeI/AAAAAAAABdk/sdbg37xIvnE/s1600/C:%5Cfakepath%5Csecond.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_kZL5PIJ9yTM/TM83V0Q7VeI/AAAAAAAABdk/sdbg37xIvnE/s1600/C:%5Cfakepath%5Csecond.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Property Editor penceresinde Label'ın "objectName" özelliğini &lt;b&gt;dispLabel&lt;/b&gt; olarak değiştirelim. Kırmızı renge bağlı slider ismini aynı şekilde "redSlider" olarak değiştirelim. Yeşilinkini "greenSlider" olarak mavininkini de "blueSlider" olarak değiştirelim. Sıra geldi sinyal-slot düzenlemesine, kayıtlarda olmayan yeni bir slot oluşturacağız. "redSlider"dan bir bağlantıyı alıp form üzerine bırakalım. Form üzerine bırakabilmek için en kenara çıkmak gerekiyor, dikkat edelim.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_kZL5PIJ9yTM/TM83o-N95aI/AAAAAAAABdo/0DBNHKKkHGU/s1600/C:%5Cfakepath%5Csecond_signal_slot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_kZL5PIJ9yTM/TM83o-N95aI/AAAAAAAABdo/0DBNHKKkHGU/s1600/C:%5Cfakepath%5Csecond_signal_slot.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Bağlantı diyaloğunda sol tarafta slider sinyallerinden "valueChanged(int)" seçelim, sağ tarafta Form slotlarında birşey görünmüyor altındaki "Edit..." yazılı butonu tıkladığımızda açılan pencerede form nesnesinin slotları ve sinyalleri görünüyor. Slotlar kısmında + tuşuna tıklayıp yeni bir slot ekleyelim:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_kZL5PIJ9yTM/TM835nxik8I/AAAAAAAABds/ZWyTCXQZK_c/s1600/C:%5Cfakepath%5Csecond_signal_slot1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="287" src="http://2.bp.blogspot.com/_kZL5PIJ9yTM/TM835nxik8I/AAAAAAAABds/ZWyTCXQZK_c/s320/C:%5Cfakepath%5Csecond_signal_slot1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Slot adı olarak &lt;b&gt;set_color()&lt;/b&gt; yazalım ve enter basalım. Tamam tıkladığımızda yeni bir slotumuz oldu. Diğer iki slider'dan da aynı slot'a bağlantı yapalım. Dosyamzı kaydedelim. Şimdi "second.ui" dosyasının olduğu klasörde bir komut satırı açıp,&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color: blue;"&gt;rbuic4 -x -o second.rb second.ui&lt;/span&gt;&lt;/blockquote&gt;yazarak Ruby dosyamızı oluşturalım. Oluşan bu dosyayı çalıştırırsak &lt;br /&gt;&lt;blockquote&gt;&lt;span style="color: blue;"&gt;Object::connect: No such slot QWidget::set_color()&lt;/span&gt;&lt;/blockquote&gt;hata mesajı verecektir. Öntanımlı olmayan bir slot çağırdık şimdi onu tanıtacağız. Oluşan Ruby dosyasını incelersek en üstünde bu dosyada yapılan tüm değişikliklerin yeni bir "rbuic4" komutu sonrasında silineceği uyarısı vardır. Biz belki görselimizi daha değiştireceğiz, bu yüzden yapacağımız ilave ayrı bir dosyadan buraya müdahil olmalı. İlk önce "second_run.rb" adında bir yeni dosya oluşturalım. Bu dosyada ilk satır otomatikten gelen dosyaya çağrı :&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color: navy;"&gt;require&lt;/span&gt; &lt;span style="color: #dd4a4a;"&gt;'second'&lt;/span&gt; &lt;/blockquote&gt;bunun arkasından programı çalıştırmak için second.rb dosyasının en sonuna eklenmiş olan satırların bir kopyasını buraya alalım :&lt;br /&gt;&lt;blockquote&gt;about &lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt; &lt;span style="color: #bb1188;"&gt;&lt;b&gt;KDE&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;::&lt;/span&gt;&lt;span style="color: #0057ae;"&gt;AboutData&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.new&lt;/span&gt;(&lt;span style="color: #bf0303;"&gt;"form"&lt;/span&gt;, &lt;span style="color: #bf0303;"&gt;"Form"&lt;/span&gt;, &lt;span style="color: #bb1188;"&gt;&lt;b&gt;KDE&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.ki18n&lt;/span&gt;(&lt;span style="color: #bf0303;"&gt;""&lt;/span&gt;), &lt;span style="color: #bf0303;"&gt;"0.1"&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #bb1188;"&gt;&lt;b&gt;&amp;nbsp; KDE&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;::&lt;/span&gt;&lt;span style="color: #0057ae;"&gt;CmdLineArgs&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.init&lt;/span&gt;(&lt;span style="color: #bb1188;"&gt;&lt;b&gt;ARGV&lt;/b&gt;&lt;/span&gt;, about)&lt;br /&gt;a &lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt; &lt;span style="color: #bb1188;"&gt;&lt;b&gt;KDE&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;::&lt;/span&gt;&lt;span style="color: #0057ae;"&gt;Application&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.new&lt;/span&gt;&lt;br /&gt;u &lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt; &lt;span style="color: #0057ae;"&gt;Ui_Form&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.new&lt;/span&gt;&lt;br /&gt;w &lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt; &lt;span style="color: #0057ae;"&gt;QT::Widget&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.new&lt;/span&gt;&lt;br /&gt;u&lt;span style="color: #4000a7;"&gt;.setupUi&lt;/span&gt;(w)&lt;br /&gt;a&lt;span style="color: #4000a7;"&gt;.topWidget&lt;/span&gt; &lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt; w&lt;br /&gt;w&lt;span style="color: #4000a7;"&gt;.show&lt;/span&gt;&lt;br /&gt;a&lt;span style="color: #4000a7;"&gt;.exec&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;şimdi yazdığımız programı çalıştırırsak aynı orjinalindeki mesajı alırız. Şimdi ana programda tanıtılan form içinde modifikasyon yapmak için ilaveler yapacağız. İlk önce sınıf tanımını tekrar yapıyoruz.&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;class&lt;/b&gt; &lt;span style="color: #0057ae;"&gt;MyWidget&lt;/span&gt; &lt;span style="color: #ff9fec;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: #0057ae;"&gt;Qt&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;::&lt;/span&gt;&lt;span style="color: #0057ae;"&gt;Widget&lt;/span&gt;&lt;br /&gt;&amp;nbsp; slots &lt;span style="color: #dd4a4a;"&gt;'set_color()'&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp; def&lt;/b&gt; initialize parent&lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt;&lt;span style="color: #c09000;"&gt;nil&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #c09000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;super&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #00892b;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@base&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt;&lt;span style="color: #0057ae;"&gt;Ui_Form&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.new&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #00892b;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@base&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.setupUi&lt;/span&gt; &lt;span style="color: #c09000;"&gt;self&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp; end&lt;/b&gt;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;bunları ekledikten sonra çalıştıran koddaki "u &lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt; &lt;span style="color: #0057ae;"&gt;Ui_Form&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.new" &lt;/span&gt;&lt;span style="color: black;"&gt;satırını ve "&lt;/span&gt;u&lt;span style="color: #4000a7;"&gt;.setupUi&lt;/span&gt;(w)"&lt;span style="color: black;"&gt; satırını iptal ediyoruz. Orjinal kodu (second.rb) incelersek bu şekilde yaparak form tanımına dışardan ulaşmış olduğumuzu göreceğiz. En son "&lt;/span&gt;w &lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt; &lt;span style="color: #0057ae;"&gt;QT::Widget&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.new"&lt;/span&gt;&lt;span style="color: black;"&gt; satırını "&lt;/span&gt;w &lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt; &lt;span style="color: #0057ae;"&gt;MyWidget&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.new"&lt;/span&gt;&lt;span style="color: black;"&gt; olarak değişirip, müdahale gören sınıfı kullanmaya başlıyoruz. Şimdi çalıştıralım, bu sefer slot bulunduğu için uygulama çalışmaya başlayacak ama herhangi bir slider değerini değiştirmeye kalktığımızda method tanımlanmadığı için hata verecektir. İşte set_color() methodumuz :&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;def&lt;/b&gt; set_color&lt;br /&gt;&amp;nbsp; clr &lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt; &lt;span style="color: #0057ae;"&gt;Qt&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;::&lt;/span&gt;&lt;span style="color: #0057ae;"&gt;Color&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.new&lt;/span&gt; &lt;span style="color: #00892b;"&gt;@base&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.redSlider.value&lt;/span&gt;, &lt;span style="color: #00892b;"&gt;@base&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.greenSlider.value&lt;/span&gt;, &lt;span style="color: #00892b;"&gt;@base&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.blueSlider.value&lt;/span&gt;&lt;br /&gt;&amp;nbsp; setStyleSheet &lt;span style="color: #dd4a4a;"&gt;'QLabel#dispLabel {background-color: %s}'&lt;/span&gt; &lt;span style="color: #ff9fec;"&gt;%&lt;/span&gt; clr&lt;span style="color: #4000a7;"&gt;.name&lt;/span&gt;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;önce slider değerlerinden bir renk oluşturuyoruz, sonra "dispLabel" arkaplan rengini bu renge eşitliyoruz. İlk açılışta arkaplan renginin eşitlenmesi için methodumuzu initialize rutini içinde de çağıralım en son durum şu olur :&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color: navy;"&gt;require&lt;/span&gt; &lt;span style="color: #dd4a4a;"&gt;'second'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;class&lt;/b&gt; &lt;span style="color: #0057ae;"&gt;MyWidget&lt;/span&gt; &lt;span style="color: #ff9fec;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: #0057ae;"&gt;Qt&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;::&lt;/span&gt;&lt;span style="color: #0057ae;"&gt;Widget&lt;/span&gt;&lt;br /&gt;&amp;nbsp; slots &lt;span style="color: #dd4a4a;"&gt;'set_color()'&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp; def&lt;/b&gt; initialize parent&lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt;&lt;span style="color: #c09000;"&gt;nil&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #c09000;"&gt;&amp;nbsp; &amp;nbsp; super&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #00892b;"&gt;&amp;nbsp; &amp;nbsp; @base&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt;&lt;span style="color: #0057ae;"&gt;Ui_Form&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.new&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #00892b;"&gt;&amp;nbsp; &amp;nbsp; @base&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.setupUi&lt;/span&gt; &lt;span style="color: #c09000;"&gt;self&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; set_color&lt;br /&gt;&lt;b&gt;&amp;nbsp; end&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp; def&lt;/b&gt; set_color&lt;br /&gt;&amp;nbsp; &amp;nbsp; clr &lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt; &lt;span style="color: #0057ae;"&gt;Qt&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;::&lt;/span&gt;&lt;span style="color: #0057ae;"&gt;Color&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.new&lt;/span&gt; &lt;span style="color: #00892b;"&gt;@base&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.redSlider.value&lt;/span&gt;, &lt;span style="color: #00892b;"&gt;@base&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.greenSlider.value&lt;/span&gt;, &lt;span style="color: #00892b;"&gt;@base&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.blueSlider.value&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; setStyleSheet &lt;span style="color: #dd4a4a;"&gt;'QLabel#dispLabel {background-color: %s}'&lt;/span&gt; &lt;span style="color: #ff9fec;"&gt;%&lt;/span&gt; clr&lt;span style="color: #4000a7;"&gt;.name&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp; end&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;about &lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt; &lt;span style="color: #bb1188;"&gt;&lt;b&gt;KDE&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;::&lt;/span&gt;&lt;span style="color: #0057ae;"&gt;AboutData&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.new&lt;/span&gt;(&lt;span style="color: #bf0303;"&gt;"form"&lt;/span&gt;, &lt;span style="color: #bf0303;"&gt;"Form"&lt;/span&gt;, &lt;span style="color: #bb1188;"&gt;&lt;b&gt;KDE&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.ki18n&lt;/span&gt;(&lt;span style="color: #bf0303;"&gt;""&lt;/span&gt;), &lt;span style="color: #bf0303;"&gt;"0.1"&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #bb1188;"&gt;&lt;b&gt;&amp;nbsp; KDE&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;::&lt;/span&gt;&lt;span style="color: #0057ae;"&gt;CmdLineArgs&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.init&lt;/span&gt;(&lt;span style="color: #bb1188;"&gt;&lt;b&gt;ARGV&lt;/b&gt;&lt;/span&gt;, about)&lt;br /&gt;a &lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt; &lt;span style="color: #bb1188;"&gt;&lt;b&gt;KDE&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #ff9fec;"&gt;::&lt;/span&gt;&lt;span style="color: #0057ae;"&gt;Application&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.new&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7488ae;"&gt;&lt;i&gt;#u = Ui_Form.new&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;w &lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt; &lt;span style="color: #0057ae;"&gt;MyWidget&lt;/span&gt;&lt;span style="color: #4000a7;"&gt;.new&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7488ae;"&gt;&lt;i&gt;#u.setupUi(w)&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;a&lt;span style="color: #4000a7;"&gt;.topWidget&lt;/span&gt; &lt;span style="color: #ff9fec;"&gt;=&lt;/span&gt; w&lt;br /&gt;w&lt;span style="color: #4000a7;"&gt;.show&lt;/span&gt;&lt;br /&gt;a&lt;span style="color: #4000a7;"&gt;.exec&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;İşte bu kadar kendi metodumuza yönlendirmeyi başardık. Artık program bir işe yaramaya başladı.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;Hoşçakalın...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4599780099173049989-3881771561628791994?l=ujk-ujk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ujk-ujk.blogspot.com/feeds/3881771561628791994/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://ujk-ujk.blogspot.com/2010/11/qt-designer-bolum-2.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/3881771561628791994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/3881771561628791994'/><link rel='alternate' type='text/html' href='http://ujk-ujk.blogspot.com/2010/11/qt-designer-bolum-2.html' title='QT Designer Bölüm-2'/><author><name>ujk</name><uri>http://www.blogger.com/profile/17064608878054630333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://bp0.blogger.com/_kZL5PIJ9yTM/R7tNwdie6PI/AAAAAAAAAAU/ITLU1BfswtA/S220/bos_gezen.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_kZL5PIJ9yTM/TM83V0Q7VeI/AAAAAAAABdk/sdbg37xIvnE/s72-c/C:%5Cfakepath%5Csecond.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4599780099173049989.post-1632586949207296431</id><published>2010-10-28T04:39:00.000-07:00</published><updated>2010-12-24T02:13:56.640-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programlama'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='QtRuby'/><title type='text'>QT Designer ile Ruby Uygulaması</title><content type='html'>&lt;a href="http://www.ozgurlukicin.com/pardus2011" target="_blank"&gt;&lt;img alt="Özgürlük İçin... Pardus..." src="http://caracal.ozgurlukicin.com/pardus-counter/timer.php?w=180&amp;amp;h=60&amp;amp;c=mavi" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color: grey;"&gt;&lt;i&gt;At Ölür Meydan Kalır, Yiğit Ölür Şan Kalır. Dikkat et sen gidince meydan kalmasın! &lt;/i&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="color: grey;"&gt;&lt;i&gt;(Bana söylenmiş özlü söz)&lt;/i&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div align="justify"&gt;&lt;span style="color: black;"&gt;Uzun bir aradan sonra yine yazmaya başlayacağım galiba. Ayrı kaldığım zamanda bayağı bir kriz pozisyonlarına girdim. Ekonomik önlem paketleri yapıp kurtaracaz inşallah. Bilgisayarımın son göçüşünden sonra artık herşeyimi Pardus'a geçirdim. İş haricinde Windows'la pek görüşmeme kararı aldım. Bu kararda en büyük katkı Pardus'un kullanım kolaylığı. Pardus , diğer bütün Linux işletim sistemleri içinde bana göre en kullanışlı olanı. Kullanması çok kolay, programları yüklemesi, kaldırması tam bana göre , tembel işi. Yerli olduğu için mi bana güzel geliyor bilmem ama dünyada böyle bir işletim sistemi olan nadir ülkelerden biri olduğumuz için emeği geçen herkese teşekkür ederim. 2011 versiyon da yakında geliyor, hadi hayırlısı.&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="color: black;"&gt;Bu günlerde Ruby ile masaüstü programı hazırlarken neler kullanabileceğimi inceliyorum. QtRuby ile &lt;/span&gt; &lt;span style="color: black;"&gt;QtDesigner birlikte kullanımı araştırdım, öğrendiklerimden bir bukle yapayım başkalarına da faydası olur belki.&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="color: black;"&gt;Qt Tasarımcı, programınızın görsel arabirimini Qt kütüphanesi ile kolayca hazırlayabileceğimiz bir program. Bu çalışmada öncelikle Qt Tasarımcı'nın kendi tutorial'ından başladım.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="color: black;"&gt;Yeni Form ekranında, widget seçerek başlıyoruz :&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_kZL5PIJ9yTM/TMlZKzybqGI/AAAAAAAABdQ/lLNlJI1LLII/s1600/yeni_form.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="283" src="http://3.bp.blogspot.com/_kZL5PIJ9yTM/TMlZKzybqGI/AAAAAAAABdQ/lLNlJI1LLII/s320/yeni_form.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&lt;/span&gt; &lt;style type="text/css"&gt;p, li { white-space: pre-wrap; }&lt;/style&gt; &lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;Form üzerine 3 tane label, 3 tane spinbox, 3 tane vertical slider'ı aşağıdaki şekilde ekrana yerleştirelim. Label yazılarını değiştirmek için çift tıklamak yeterlidir.&lt;br /&gt;&lt;div style="margin: 0px; text-indent: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_kZL5PIJ9yTM/TMlao7x_AZI/AAAAAAAABdU/tdoVbqOaIJk/s1600/first_raw.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_kZL5PIJ9yTM/TMlao7x_AZI/AAAAAAAABdU/tdoVbqOaIJk/s1600/first_raw.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin: 0px; text-indent: 0px;"&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;Bu widget'ların düzgün yerleşmesini sağlamak için bir layout üzerinde birleştirmemiz gerekiyor. Bunun için ilk grubu Ctrl tuşu eşliğinde tıklayarak seçelim ve sağ tuş tıklayıp yerleşim seçeneklerinden ızgara içine yerleştir seçimini tıklayalım. Resimde dikkat ettiyseniz "Izagara" yazmışlar, küçük bir hata (orjinal dilde seçenek "Lay Out in a Grid") .&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_kZL5PIJ9yTM/TMlc7rZkbmI/AAAAAAAABdY/S31DI_jC2Uc/s1600/first_layout1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_kZL5PIJ9yTM/TMlc7rZkbmI/AAAAAAAABdY/S31DI_jC2Uc/s1600/first_layout1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;p, li { white-space: pre-wrap; }&lt;/style&gt; &lt;br /&gt;Üç grubun hepsine aynı yerleşim birleştirmesini yapalım. Sonra elde ettiğimiz 3 grubu form içersine bir ana yerleşim içine yerleştirmemiz gerekiyor. 3 grubun dışında form üzerine sağ tıklayıp yerleşimden "Yatay Olarak Yerleştir" seçelim az evvelki gibi "Izagara İçerisine Yerleştir" de seçebiliriz. En son şu hale gelecektir :&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_kZL5PIJ9yTM/TMleh8qZ62I/AAAAAAAABdc/Bft3acUmQrI/s1600/first_layout2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_kZL5PIJ9yTM/TMleh8qZ62I/AAAAAAAABdc/Bft3acUmQrI/s1600/first_layout2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;Yan taraftaki "Object Inspector" penceresinde bu yerleşimlerin Layout'lar olarak nasıl yerleştiğine dikkat edin. Eğer form ana yerleşimi doğru seçilmişse form boyutunu kenarlarından çekerek değiştirdiğimizde grupların boyutları da orantılı olarak değişecektir. Gerçek görüntünün neye benzediğini görmek için Ctrl+R tuşuyla preview olarak formu görebiliriz.&lt;/div&gt;&lt;div align="justify"&gt;Şimdi sıra nesnelerin çalışmalarını birbirine bağlamaya geldi. Slider değişince spinbox içeriğinin de paralelinde değişmesini istiyoruz. Tam tersi spinbox değeri değişince slider değerinin de değişmesini istiyoruz. Bu amaçla slider'ın &lt;span style="color: cyan;"&gt;valueChanged()&lt;/span&gt; SIGNAL'ini, spinbox'ın &lt;span style="color: cyan;"&gt;setValue()&lt;/span&gt; SLOT'una bağlamamız gerekiyor. Tam tersi spinbox'ın &lt;span style="color: cyan;"&gt;valueChanged()&lt;/span&gt; SIGNAL'ini, slider'ın &lt;span style="color: cyan;"&gt;setValue()&lt;/span&gt; SLOT'una bağlamamız gerekiyor. Bu amaçla ilk önce &lt;b&gt;Sinyal/Slot Düzenle &lt;/b&gt;seçeriz ya da F4 tuşa basarız. Form görüntüsü bir değişir, widget'ların üzerinden mouse gezdirince kırmızı renklendirmeler görürüz. Slider üzerinde tıklayalım ve parmağımızı kaldırmadan spinbox üzerine sürükleyelim ve bırakalım. "Configure Connection" penceresi açılacaktır. &lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_kZL5PIJ9yTM/TMlgMm2dNSI/AAAAAAAABdg/h3B7X9LQIs4/s1600/first_signal_slot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="261" src="http://4.bp.blogspot.com/_kZL5PIJ9yTM/TMlgMm2dNSI/AAAAAAAABdg/h3B7X9LQIs4/s400/first_signal_slot.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;Sol tarafta &lt;b&gt;valueChanged(int)&lt;/b&gt; sinyalini seçelim, sağ taraf aktif olacaktır. Sağ tarafta &lt;b&gt;setValue(int)&lt;/b&gt; slotu seçelim ve tamam tıklayalım. Şimdi de tersini yapıp spinbox'tan slider'a bir bağlantı kuralım ve aynı şeyleri seçelim. 3 grubun hepsine aynı işlemleri yapalım, işimiz bitince çalışmamızı kaydedelim ve Ctrl+R basıp bağlantının çalışmasını gözleyelim.&lt;/div&gt;&lt;div align="justify"&gt;Bu değerleri biz RGB renk oluşturmada kullanacağımıza göre değerlerin 0-255 arasında değişmesi gerekir. Bunun için slider ve spinboxların özelliklerini "Property Editor" penceresinde inceleyip &lt;b&gt;maximum&lt;/b&gt; özelliklerini 99 dan 255 e değiştirelim.&lt;/div&gt;&lt;div align="justify"&gt;Eeee! Ruby nerde ? Şimdi, gezginle ".ui" uzantılı dosyamızın bulunduğu klasöre gidelim ve komut penceresi çalıştıralım (Shift+F4). Açılan pencerede :&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="color: blue;"&gt;rbuic4 -x -o first.rb first.ui&lt;/span&gt;&lt;/div&gt;&lt;span style="color: black;"&gt;komutunu girelim. "-o" çıkışta &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;b&gt;first.rb &lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;dosyası oluşturulması için, "-x" bu dosyanın direk çalıştırılabilir olması için. Komut sonucunda "first.rb" dosyası oluştuğunu görmüşsek işimiz tamamlandı. Bu Ruby dosyasını çalıştıralım ve inceleyelim, editörde açalım ve oluşturulan kodları inceleyelim. Ne güzel program yazdık ama di mi?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Hoşçakalın...&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4599780099173049989-1632586949207296431?l=ujk-ujk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ujk-ujk.blogspot.com/feeds/1632586949207296431/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://ujk-ujk.blogspot.com/2010/10/qt-designer-ile-ruby-uygulamas.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/1632586949207296431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/1632586949207296431'/><link rel='alternate' type='text/html' href='http://ujk-ujk.blogspot.com/2010/10/qt-designer-ile-ruby-uygulamas.html' title='QT Designer ile Ruby Uygulaması'/><author><name>ujk</name><uri>http://www.blogger.com/profile/17064608878054630333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://bp0.blogger.com/_kZL5PIJ9yTM/R7tNwdie6PI/AAAAAAAAAAU/ITLU1BfswtA/S220/bos_gezen.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_kZL5PIJ9yTM/TMlZKzybqGI/AAAAAAAABdQ/lLNlJI1LLII/s72-c/yeni_form.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4599780099173049989.post-8091248252894997296</id><published>2010-10-26T10:13:00.001-07:00</published><updated>2010-10-26T10:13:53.751-07:00</updated><title type='text'>PARDUS 2011</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;a target='_blank' href='http://www.ozgurlukicin.com/pardus2011'&gt;&lt;img alt='Özgürlük İçin... Pardus...' src='http://caracal.ozgurlukicin.com/pardus-counter/timer.php?w=180&amp;amp;h=60&amp;amp;c=mavi' border='0'/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4599780099173049989-8091248252894997296?l=ujk-ujk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ujk-ujk.blogspot.com/feeds/8091248252894997296/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://ujk-ujk.blogspot.com/2010/10/pardus-2011.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/8091248252894997296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/8091248252894997296'/><link rel='alternate' type='text/html' href='http://ujk-ujk.blogspot.com/2010/10/pardus-2011.html' title='PARDUS 2011'/><author><name>ujk</name><uri>http://www.blogger.com/profile/17064608878054630333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://bp0.blogger.com/_kZL5PIJ9yTM/R7tNwdie6PI/AAAAAAAAAAU/ITLU1BfswtA/S220/bos_gezen.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4599780099173049989.post-4615930410655946412</id><published>2010-04-08T12:07:00.000-07:00</published><updated>2010-12-24T02:15:21.762-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>Ajax Yollarından Aştım da Geldim</title><content type='html'>&amp;nbsp;&amp;nbsp; Geçen Rails ve Ajax üzerine bir giriş yazısı okudum. Birşeyler öğrendiğim için paylaşmak istedim.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; Önce bir Rails uygulama üretelim.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;span style="color: purple;"&gt;rails ajaxdnm&lt;/span&gt;&lt;br /&gt;&lt;span style="color: purple;"&gt;cd ajaxdnm&lt;/span&gt;&lt;br /&gt;&lt;span style="color: purple;"&gt;script/server&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: purple;"&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp; Uygulamanın çalıştığını browser'da "http://localhost:3000/ " adresinden kontrol edelim, meşhur "Welcome aboard" ekranını görelim. Çalışma yapacağımız sayfayı oluşturmak için "act" adında bir action(ekşın)'ı olan kendi adı da "cont" olan bir controller üretelim.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: purple;"&gt;script/generate controller cont act&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; "http://localhost:3000/cont/act " adresini girdiğimizde karşımıza şu çıkar :&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_kZL5PIJ9yTM/S7o-saZkosI/AAAAAAAAADg/HoW-00ZEx2M/s1600/contact.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="146" src="http://2.bp.blogspot.com/_kZL5PIJ9yTM/S7o-saZkosI/AAAAAAAAADg/HoW-00ZEx2M/s320/contact.png" width="320" /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; Çok kontak oldu. Web sayfamız nerede olduğunu kendi söylemiş zaten. İşte orda sayfamızı bulup editörde açalım. En alt satıra şunu ekleyelim :&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;!--body {color: #000000; background-color: #ffffff; font-family: Monospaced}pre {color: #000000; background-color: #ffffff; font-family: Monospaced}table {color: #000000; background-color: #e9e8e2; font-family: Monospaced}.line-number {background-color: #e9e8e2}.ST1 {color: #009900}.ST2 {color: #ce7b00}.ST0 {color: #0000e6}--&gt;&lt;/style&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;a&lt;/span&gt; &lt;span class="ST1"&gt;href&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"#"&lt;/span&gt; &lt;span class="ST1"&gt;onclick&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"&lt;/span&gt;alert(&lt;span class="ST2"&gt;'&lt;/span&gt;&lt;span class="ST2"&gt;Merhaba&lt;/span&gt;&lt;span class="ST2"&gt;'&lt;/span&gt;);&lt;span class="ST2"&gt;"&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;Satırdan Alarm&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;a&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt; &lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; Bu satır içi javascript kodla yazı tıklandığı anda bir bildiri penceresinden "Merhaba" mesajı veriyoruz :&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_kZL5PIJ9yTM/S7y-yKzJhTI/AAAAAAAAADo/-WMnv4-BD4o/s1600/contact_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_kZL5PIJ9yTM/S7y-yKzJhTI/AAAAAAAAADo/-WMnv4-BD4o/s320/contact_1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp; Peki, birden fazla satırdan oluşan bir javascriptimiz varsa ne yaparız? Bu durumda da fonksiyon tanımlaması yaparız :&lt;br /&gt;&lt;br /&gt;&lt;span class="line-number"&gt; &lt;/span&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;a&lt;/span&gt; &lt;span class="ST1"&gt;href&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"#"&lt;/span&gt; &lt;span class="ST1"&gt;onclick&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"&lt;/span&gt;fonkAlarm();&lt;span class="ST2"&gt;"&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;Fonksiyon Çağır &lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;a&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;script&lt;/span&gt; &lt;span class="ST1"&gt;type&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"text/javascript"&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="ST0"&gt;function&lt;/span&gt; fonkAlarm(){&lt;br /&gt;&amp;nbsp;&amp;nbsp; alert(&lt;span class="ST2"&gt;'&lt;/span&gt;&lt;span class="ST2"&gt;Fonksiyondan Merhaba&lt;/span&gt;&lt;span class="ST2"&gt;'&lt;/span&gt;);&lt;br /&gt;}&lt;span class="ST0"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;script&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; Bunun etkisine bakarsak önceki ile aynı etkiyi yaptığını görürüz. Şimdi biraz ajax zamanı. Fakat önce controller içinde yeni bir action tanımlayıp server cevabını içine yazalım. &lt;i&gt;app/views/cont &lt;/i&gt;klasörü içinde &lt;i&gt;cevap.html.erb&lt;/i&gt; adında bir dosya oluşturup içine şunu yazalım :&lt;br /&gt;&lt;br /&gt;&lt;span style="color: purple;"&gt;Server'dan Merhaba&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; Dosyayı test etmek için &lt;i&gt;http://localhost:3000/cont/cevap&lt;/i&gt; adresini girip bakalım. Test ettikten sonra tekrar act dosyamıza dönelim. Mesajı server üzerinden getirmek için şu fonksiyonu tanımlayalım :&lt;br /&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;a&lt;/span&gt; &lt;span class="ST1"&gt;href&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"#"&lt;/span&gt; &lt;span class="ST1"&gt;onclick&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"&lt;/span&gt;serverdanAlarm();&lt;span class="ST2"&gt;"&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;Server sorgulayan fonksiyon&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;a&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;script&lt;/span&gt; &lt;span class="ST1"&gt;type&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"text/javascript"&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;span class="ST0"&gt;function&lt;/span&gt; serverdanAlarm(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="ST0"&gt;var&lt;/span&gt; cevap = &lt;span class="ST0"&gt;new&lt;/span&gt; XMLHttpRequest();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cevap.open(&lt;span class="ST2"&gt;'&lt;/span&gt;&lt;span class="ST2"&gt;get&lt;/span&gt;&lt;span class="ST2"&gt;'&lt;/span&gt;, &lt;span class="ST2"&gt;'&lt;/span&gt;&lt;span class="ST2"&gt;/cont/&lt;/span&gt;&lt;span class="ST2"&gt;cevap&lt;/span&gt;&lt;span class="ST2"&gt;'&lt;/span&gt;, &lt;span class="ST0"&gt;false&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cevap.send(&lt;span class="ST0"&gt;null&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(cevap.responseText);&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;script&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; Alacağımız cevap şöyle olacaktır :&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_kZL5PIJ9yTM/S7zUrIfOQkI/AAAAAAAAADw/A5S69v_yVbQ/s1600/contact_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="197" src="http://1.bp.blogspot.com/_kZL5PIJ9yTM/S7zUrIfOQkI/AAAAAAAAADw/A5S69v_yVbQ/s400/contact_2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp; Bu sayfayı Internet Explorer 6 veya daha düşük versiyonuyla açarsak sorun çıkartacaktır. Ama daha önce biraz çalışmayı inceleyelim. Linki her tıkladığımızda script/server komutunun çalıştığı komut isteminde şu satırları yazar :&lt;br /&gt;&lt;br /&gt;&lt;span style="color: purple;"&gt;Processing ContController#cevap (for 127.0.0.1 at 2010-04-07 21:50:50) [GET]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: purple;"&gt;Rendering cont/cevap&lt;/span&gt;&lt;br /&gt;&lt;span style="color: purple;"&gt;Completed in 0ms (View: 0, DB: 0) | 200 OK [http://localhost/cont/cevap]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; Burdan anlıyoruz ki, sayfa açılmasa da arka planda javascript server'dan istekte bulunup mesajı sayfadan alıyor.&lt;br /&gt;&amp;nbsp;&amp;nbsp; Şimdi bu IE-6 ve öncesinde kodun çalışması için bir sürü kontrol kodları yazmak gerekiyor. Ama işin kolayı var. Ajax için yazılmış hazır kütüphanelerin yardımıyla bu ayrıntılardan kurtulabiliriz. Bu kütüphanelerin en meşhurlarından biri Rails ile birlikte de gelen Prototype isimli kütüphanedir. Bu kütüphane içinde Ajax için yazılmış birçok kolaylaştırıcı fonksiyon vardır. Şimdi en son yaptığımızı bir de Prototype fonksiyonları ile yazalım :&lt;br /&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;script&lt;/span&gt; &lt;span class="ST1"&gt;src&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"/javascripts/prototype.js"&lt;/span&gt; &lt;span class="ST1"&gt;type&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"text/javascript"&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;script&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;a&lt;/span&gt; &lt;span class="ST1"&gt;href&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"#"&lt;/span&gt; &lt;span class="ST1"&gt;onclick&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"&lt;/span&gt;prototypeAlarm();&lt;span class="ST2"&gt;"&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;Prototype ile çağır&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;a&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;script&lt;/span&gt; &lt;span class="ST1"&gt;type&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"text/javascript"&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;nbsp;&amp;nbsp; function&lt;/span&gt; prototypeAlarm(){&lt;br /&gt;&lt;span class="ST0"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new&lt;/span&gt; Ajax.Request(&lt;span class="ST2"&gt;'&lt;/span&gt;&lt;span class="ST2"&gt;/cont/cevap&lt;/span&gt;&lt;span class="ST2"&gt;'&lt;/span&gt;, {onSuccess: &lt;span class="ST0"&gt;function&lt;/span&gt;(cevap){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(cevap.responseText);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }});&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;script&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;nbsp;&lt;span style="color: black;"&gt; İlk satırda prototype.js dosyasını sayfamıza dahil ediyoruz. Prototype kütüphane dosyası Rails uygulamamızı ilk oluştururken public/javascripts klasörü içine otomatik olarak konur. Burda serverdan bilgi sorgulamak için prototype kütüphanesinin Ajax.Request fonksiyonunu kullanıyoruz. İlk parametre çağrı yaptığımız url adresi, daha sonra ise key/value çiftlerinden oluşan parametreler geliyor. Yukardaki örneğimizde çağrının başarılı olması ile birlikte bir fonksiyon çağırılıyor ve bunun içinde de meşhur mesaj diyaloğumuzdan çağrının cevabını veriyoruz. Bu kod içinde IE-6 ve öncesine ayrı bir kod yazılmıyor. İşin orasını prototype bizim için hallediyor.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp; Şimdiye kadar yaptıklarımızda hep bir mesaj diyaloğu açıp mesajımızı verdik. Gerçekte web sayfalarında genel eğilim sayfanın bir kısmının görüntüsünü ajax ile değiştirmek şeklindedir. Bunun için aşağıdaki kodu yazalım :&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;a&lt;/span&gt; &lt;span class="ST1"&gt;href&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"#"&lt;/span&gt; &lt;span class="ST1"&gt;onclick&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"&lt;/span&gt;elemanUpdate();&lt;span class="ST2"&gt;"&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;Elemanı Update Et&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;a&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt; &lt;span class="ST1"&gt;id&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"cevabi"&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;script&lt;/span&gt; &lt;span class="ST1"&gt;type&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"text/javascript"&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;nbsp;&amp;nbsp; function&lt;/span&gt; elemanUpdate(){&lt;br /&gt;&lt;span class="ST0"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new&lt;/span&gt; Ajax.Request(&lt;span class="ST2"&gt;'&lt;/span&gt;&lt;span class="ST2"&gt;/cont/cevap&lt;/span&gt;&lt;span class="ST2"&gt;'&lt;/span&gt;, { onSuccess: &lt;span class="ST0"&gt;function&lt;/span&gt;(gelen){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&lt;span class="ST2"&gt;'&lt;/span&gt;&lt;span class="ST2"&gt;cevabi&lt;/span&gt;&lt;span class="ST2"&gt;'&lt;/span&gt;).update(gelen.responseText);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }});&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;span class="ST0"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;script&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp; Bu kodun farkını incelerseniz, içi boş bir paragraf konuyor sonra ajax fonksiyon yardımıyla paragrafın içeriği çağrı cevabı ile dolduruluyor. Paragrafı üzerine tıklanınca tekrar boşaltmak için benzer bir yöntem kullanabiliriz :&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;a&lt;/span&gt; &lt;span class="ST1"&gt;href&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"#"&lt;/span&gt; &lt;span class="ST1"&gt;onclick&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"&lt;/span&gt;elemanUpdate();&lt;span class="ST2"&gt;"&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;Elemanı Update Et&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;a&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt; &lt;span class="ST1"&gt;id&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"cevabi"&lt;/span&gt; &lt;span class="ST1"&gt;onclick&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"&lt;/span&gt;cevabiSil();&lt;span class="ST2"&gt;"&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;script&lt;/span&gt; &lt;span class="ST1"&gt;type&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"text/javascript"&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;nbsp;&amp;nbsp; function&lt;/span&gt;  elemanUpdate(){&lt;br /&gt;&lt;span class="ST0"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new&lt;/span&gt; Ajax.Request(&lt;span class="ST2"&gt;'&lt;/span&gt;&lt;span class="ST2"&gt;/cont/cevap&lt;/span&gt;&lt;span class="ST2"&gt;'&lt;/span&gt;, { onSuccess: &lt;span class="ST0"&gt;function&lt;/span&gt;(gelen){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  $(&lt;span class="ST2"&gt;'&lt;/span&gt;&lt;span class="ST2"&gt;cevabi&lt;/span&gt;&lt;span class="ST2"&gt;'&lt;/span&gt;).update(gelen.responseText);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }});&lt;br /&gt;&amp;nbsp;&amp;nbsp;  }&lt;span class="ST0"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="ST0"&gt;function &lt;span style="color: black;"&gt;cevabiSil&lt;/span&gt;&lt;/span&gt;(){ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  $(&lt;span class="ST2"&gt;'&lt;/span&gt;&lt;span class="ST2"&gt;cevabi&lt;/span&gt;&lt;span class="ST2"&gt;'&lt;/span&gt;).update('');&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;span class="ST0"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;script&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp; Bir dikkat edilmesi gereken nokta da $( 'id' ) şeklinde sayfa üzerindeki id verilen tag'lere erişim. Bu şekilde erişim Prototype'ın bir fonksiyonudur. HTML elemanların update edilmesi çok ihtiyaç duyulan bir durum olduğu için Prototype içinde Ajax.Updater tanımlanmıştır. Bunun kullanımı da şöyle :&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;a&lt;/span&gt; &lt;span class="ST1"&gt;href&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"#"&lt;/span&gt; &lt;span class="ST1"&gt;onclick&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"&lt;/span&gt;updateFonks();&lt;span class="ST2"&gt;"&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;Ajax.Updater ile update&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;a&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt; &lt;span class="ST1"&gt;id&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"cevabi2"&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;script&lt;/span&gt; &lt;span class="ST1"&gt;type&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"text/javascript"&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;nbsp;&amp;nbsp; function&lt;/span&gt; updateFonks(){&lt;br /&gt;&lt;span class="ST0"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new&lt;/span&gt; Ajax.Updater(&lt;span class="ST2"&gt;'&lt;/span&gt;&lt;span class="ST2"&gt;cevabi2&lt;/span&gt;&lt;span class="ST2"&gt;'&lt;/span&gt;, &lt;span class="ST2"&gt;'&lt;/span&gt;&lt;span class="ST2"&gt;/cont/cevap&lt;/span&gt;&lt;span class="ST2"&gt;'&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;span class="ST0"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;script&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp; Bakarsak burda onSuccess yok. Updater'ın 2 argümanı var, biri update edilecek HTML eleman, diğeri çağrının yapılacağı url adres. Ajax.Updater çağrısını tamamladığında otomatik olarak bir onComplete fonksiyonu üreterek elemanı update eder. Updater da önceki gibi bir dizi key/value çifti şeklinde opsiyonlar alabilir. Bunlardan birinin adı "insertion". Bunun sayesinde çağrı cevabını nereye yerleştireceğini tarif ederiz. 4 değer alabilir : &lt;i&gt;Before , Top , Bottom , After &lt;/i&gt;. Örneğin :&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;a&lt;/span&gt; &lt;span class="ST1"&gt;href&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"#"&lt;/span&gt; &lt;span class="ST1"&gt;onclick&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"&lt;/span&gt;elemanaEkle();&lt;span class="ST2"&gt;"&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;Append ile eklemek&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;a&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt; &lt;span class="ST1"&gt;id&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"cevabi3"&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;p&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;&lt;/span&gt;&lt;span class="ST0"&gt;script&lt;/span&gt; &lt;span class="ST1"&gt;type&lt;/span&gt;&lt;span class="ST1"&gt;=&lt;/span&gt;&lt;span class="ST2"&gt;"text/javascript"&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;nbsp;&amp;nbsp; function&lt;/span&gt; elemanaEkle(){&lt;br /&gt;&lt;span class="ST0"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new&lt;/span&gt; Ajax.Updater(&lt;span class="ST2"&gt;'&lt;/span&gt;&lt;span class="ST2"&gt;cevabi3&lt;/span&gt;&lt;span class="ST2"&gt;'&lt;/span&gt;, &lt;span class="ST2"&gt;'&lt;/span&gt;&lt;span class="ST2"&gt;/cont/cevap&lt;/span&gt;&lt;span class="ST2"&gt;'&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { insertion:Insertion.Bottom });&lt;br /&gt;&amp;nbsp; }&lt;span class="ST0"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="ST0"&gt;script&lt;/span&gt;&lt;span class="ST0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ST0"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp; İlk tıkladığımızda boş paragraf çağrı cevabı ile dolduruluyor. Arkasından yaptığımız her tıklama önceki paragraf içeriğinin ardına eklenerek devam ediyor. Bundan sonrasında biraz Rails var ....&lt;/span&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4599780099173049989-4615930410655946412?l=ujk-ujk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ujk-ujk.blogspot.com/feeds/4615930410655946412/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://ujk-ujk.blogspot.com/2010/04/ajax-yollarndan-astm-da-geldim.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/4615930410655946412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/4615930410655946412'/><link rel='alternate' type='text/html' href='http://ujk-ujk.blogspot.com/2010/04/ajax-yollarndan-astm-da-geldim.html' title='Ajax Yollarından Aştım da Geldim'/><author><name>ujk</name><uri>http://www.blogger.com/profile/17064608878054630333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://bp0.blogger.com/_kZL5PIJ9yTM/R7tNwdie6PI/AAAAAAAAAAU/ITLU1BfswtA/S220/bos_gezen.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_kZL5PIJ9yTM/S7o-saZkosI/AAAAAAAAADg/HoW-00ZEx2M/s72-c/contact.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4599780099173049989.post-1006251433659629792</id><published>2009-12-28T12:39:00.000-08:00</published><updated>2009-12-28T12:50:57.823-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WxRuby'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>Diyalogların Kullanımı</title><content type='html'>&lt;div style="text-align: justify;"&gt;&amp;nbsp; WxRuby'de uygulamamızı standart görüntülerle süsleyecek birçok öntanımlı diyalog kutusu bulunur. Bu yazıda kullanıcımızdan girdi alabileceğimiz üç diyalog kutusu göreceğiz.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Mesaj diyaloğu&lt;/li&gt;&lt;li&gt;Text girişi&lt;/li&gt;&lt;li&gt;Listeden seçim&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;Bundan başka daha birçok standart diyalog bulunur. Örneğin , dosya seçici , renk seçici , progress diyalog , font seçici gibi.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Mesaj Bildirileri&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Kullanıcıyla yapabileceğimiz en basit iletişim &lt;i&gt;Wx::MessageDialog&lt;/i&gt; adındaki basit alarm kutusunu kullanmaktır. MessageDialog kullanarak üzerinde sadece bir mesaj ve OK butonu olan bir kutu veya Yes/No butonları ile cevap alabileceğimiz bir kutu yapabiliriz.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style="color: blue;"&gt;1     dlg = &lt;/span&gt;&lt;span style="color: blue;"&gt;MessageDialog&lt;/span&gt;&lt;span style="color: blue;"&gt;.new &lt;/span&gt;&lt;span style="color: blue;"&gt;nil&lt;/span&gt;&lt;span style="color: blue;"&gt;, &lt;/span&gt;&lt;span style="color: blue;"&gt;"böyle iletişim kurması kolay mı ?"&lt;/span&gt;&lt;span style="color: blue;"&gt;, &lt;/span&gt;&lt;span style="color: blue;"&gt;"MessageDialog"&lt;/span&gt;&lt;span style="color: blue;"&gt;, &lt;/span&gt;&lt;span style="color: blue;"&gt;YES_NO&lt;/span&gt;&lt;span style="color: blue;"&gt; | &lt;/span&gt;&lt;span style="color: blue;"&gt;ICON_QUESTION&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="color: blue;"&gt;2     result = dlg.show_modal&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;3     p result&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;4     dlg.destroy&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;bu kodun karşılığında&amp;nbsp; şöyle bir diyaloğumuz olur : &lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_kZL5PIJ9yTM/SzUNmFvpy5I/AAAAAAAAAC4/RpliTUZhkxc/s1600-h/dialog1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_kZL5PIJ9yTM/SzUNmFvpy5I/AAAAAAAAAC4/RpliTUZhkxc/s320/dialog1.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&amp;nbsp;MessageDialog nesnesinin tanıtım parametreleri şunlardır :&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;b&gt;MessageDialog.new&lt;/b&gt;(&lt;a href="http://wxruby.rubyforge.org/doc/window.html"&gt;Window&lt;/a&gt; parent,  String message, &lt;br /&gt;                  String caption = "Message box", &lt;br /&gt;                  Integer style = OK CANCEL, &lt;br /&gt;                  &lt;a href="http://wxruby.rubyforge.org/doc/point.html"&gt;Point&lt;/a&gt; pos = DEFAULT_POSITION)&lt;/code&gt;&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Burda parent dialogun çağrıldığı penceredir veya bir pencereye bağlı olmasını istemezsek nil değer gireriz. Arkasından mesajımızı string olarak gireriz. "caption" isimli string diyaloğumuzun titlebar'ında görünecek yazıdır, default değeri "Message box". "style" parametresi diyaloğumuzda bulunacak butonları ve ikonları tarif eden bir bitmask'dır. "pos" parametresi de diyaloğumuzun ekranda gösterileceği pozisyonu belirtir bir Wx::Point nesnesidir. "show_modal" ile diyaloğumuz modal olarak açılır yani bu diyalog açıldığında uygulamamızda olan pencerelerde işlem yapmamız diyaloğumuz kapatılana kadar engellenir. Tüm diyaloglarda bu metod ortakdır. "show_modal" metodunun geri dönen değeri diyaloğumuzun sonucunu ifade eden bir integer sayıdır. Bu diyaloğumuzda tıklanan butonun kodu geri döner. Bu "MessageDialog" nesnesi için şu sabitlerden biridir : Wx::ID_YES , Wx::ID_NO , Wx::ID_CANCEL , Wx::ID_OK.&lt;br /&gt;Style bitleri ile diyaloğumuzda bulunacak butonlara karar veririz. Wx::OK , Wx::CANCEL , Wx::YES_NO . Ayrıca bu style bitleri ile diyaloğumuzda hangi ikonun görüneceğini seçeriz. Wx::ICON_ERROR , Wx:ICON_EXCLAMATION , Wx::ICON_INFORMATION , Wx::ICON_QUESTION .&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Bir Satırlık Yazı Girdisi &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Eğer kullanıcıdan bir tek satır bilgi almak istiyorsak , "TextEntryDialog" kullanırız. Bu nesne bir diyalog penceresi açar ve eğer kullanıcı OK butonunu tıklarsa girilen yazıyı geri döner.&lt;br /&gt;&lt;br /&gt;&lt;pre style="color: blue;"&gt;17     dlgq = TextEntryDialog.new nil, "Sevdiğiniz Programlama Dili Nedir ?", "Bir Soru", "Ruby"&lt;br /&gt;18     if dlgq.show_modal == ID_OK&lt;br /&gt;19       response = dlgq.get_value&lt;br /&gt;20       p response + " güzel bir seçim"&lt;br /&gt;21     end&lt;br /&gt;22     dlgq.destroy&lt;br /&gt;&lt;/pre&gt;&lt;div style="color: blue;"&gt;&lt;br /&gt;&lt;/div&gt;&amp;nbsp;&lt;b&gt; &lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Bu kodun karşılığı diyaloğumuz şuna benzer :&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_kZL5PIJ9yTM/SzkOi-2DGfI/AAAAAAAAADQ/EwMKXcoW5G8/s1600-h/dialog2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_kZL5PIJ9yTM/SzkOi-2DGfI/AAAAAAAAADQ/EwMKXcoW5G8/s320/dialog2.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;TextEntryDialog nesnesi üretirken girdiğimiz parametreler sırasıyla şunlar : her zaman olduğu gibi parent en başta. Arkasından diyaloğumuzun içinde yer alacak soru cümlemiz string olarak. Bundan sonra diyaloğumuzun etiketinde yer alacak string gelir. En son text girişinde yer alacak default yazı geliyor. Ayrıca default değeri Wx::OK | Wx::CANCEL olan bir style bilgisi vardır. İstersek sadece OK butonu bırakabiliriz. Aynı MessageDialog nesnesi gibi show_modal metodu da tıklanan düğmenin kodunu geri döner. "get_value" metodu textbox'ta yazılmış olan değeri geri döner. Burda sadece deneme için girilen değeri terminale geri yazıyoruz.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;Aşağıdaki Listeden Seçiniz &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Eğer kullanıcının her aklına geleni yazmasını değilde bizim istediğimiz yanıtlardan birini seçmesini istiyorsak , Wx::SingleChoiceDialog nesnesi kullanırız. Bu nesnenin basit kullanımı şöyledir :&lt;br /&gt;&lt;br /&gt;&lt;pre style="color: blue;"&gt;24     dlgc = SingleChoiceDialog.new nil, "Kaç Yaşında Evlenmek Daha İyi ?", "Birini Seçin", ["15", "20", "25", "36", "44"]&lt;br /&gt;25     if dlgc.show_modal == ID_OK&lt;br /&gt;26       response = dlgc.get_string_selection&lt;br /&gt;27       p response + " yaş çok erken olur !"&lt;br /&gt;28     end&lt;br /&gt;29     dlgc.destroy&lt;br /&gt;&lt;/pre&gt;&lt;div style="color: blue;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Bu kodun sonucu şu şekil bir diyaloğumuz olur :&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_kZL5PIJ9yTM/SzkVxNb28nI/AAAAAAAAADY/NB8UF4ZCtxU/s1600-h/dialog3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_kZL5PIJ9yTM/SzkVxNb28nI/AAAAAAAAADY/NB8UF4ZCtxU/s320/dialog3.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;Bir öncekinden farklı olarak burda default text değeri yerine bir matris içinde seçenekleri gireriz. Bu diyalogdan dönen değeri iki değişik şekilde alabiliriz : "get_selection" metodu seçilen stringin indexini geri döner , "get_string_selection" ile seçilen stringin kendisini alırız. &amp;nbsp; &lt;br /&gt;&lt;/div&gt;Tüm bu kodların hepsini ana penceresi olmayan bir uygulamaya dizdim :&lt;br /&gt;&lt;div style="color: blue;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre style="color: blue;"&gt;1 &lt;span class="ST0"&gt;#&lt;/span&gt;&lt;span class="ST0"&gt;!/usr/bin/env ruby&lt;/span&gt;&lt;br /&gt; 2 &lt;span class="ST0"&gt;#&lt;/span&gt;&lt;span class="ST0"&gt; dialoglar.rb kullaıcı ile diyalog pencereleri yardımıyla iletişim&lt;/span&gt;&lt;br /&gt; 3 &lt;br /&gt; 4 require &lt;span class="STRING_LITERAL"&gt;'&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;rubygems&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;'&lt;/span&gt;&lt;br /&gt; 5 require &lt;span class="STRING_LITERAL"&gt;'&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;wx&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;'&lt;/span&gt;&lt;br /&gt; 6 include &lt;span class="caret-color-insert-mode"&gt;Wx&lt;/span&gt;&lt;br /&gt; 7 &lt;br /&gt; 8 &lt;span class="ST1"&gt;$KCODE&lt;/span&gt; = &lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;utf8&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;               &lt;span class="ST0"&gt;#&lt;/span&gt;&lt;span class="ST0"&gt;Türkçe karakterler terminalde çıksın&lt;/span&gt;&lt;br /&gt; 9 &lt;br /&gt;10 &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="caret-color-insert-mode"&gt;MyApp&lt;/span&gt; &amp;lt; &lt;span class="caret-color-insert-mode"&gt;App&lt;/span&gt;&lt;br /&gt;11   &lt;span class="keyword"&gt;def&lt;/span&gt; on_init&lt;br /&gt;12 &lt;br /&gt;13     dlg = &lt;span class="caret-color-insert-mode"&gt;MessageDialog&lt;/span&gt;.new &lt;span class="caret-color-insert-mode"&gt;nil&lt;/span&gt;, &lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;böyle iletişim kurması kolay mı ?&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;, &lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;MessageDialog&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;, &lt;span class="caret-color-insert-mode"&gt;YES_NO&lt;/span&gt; | &lt;span class="caret-color-insert-mode"&gt;ICON_QUESTION&lt;/span&gt;&lt;br /&gt;14     result = dlg.show_modal&lt;br /&gt;15     p result&lt;br /&gt;16     dlg.destroy&lt;br /&gt;17 &lt;br /&gt;18     dlgq = &lt;span class="caret-color-insert-mode"&gt;TextEntryDialog&lt;/span&gt;.new &lt;span class="caret-color-insert-mode"&gt;nil&lt;/span&gt;, &lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;Sevdiğiniz Programlama Dili Nedir ?&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;, &lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;Bir Soru&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;, &lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;Ruby&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;br /&gt;19     &lt;span class="keyword"&gt;if&lt;/span&gt; dlgq.show_modal == &lt;span class="caret-color-insert-mode"&gt;ID_OK&lt;/span&gt;&lt;br /&gt;20       response = dlgq.get_value&lt;br /&gt;21       p response + &lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt; güzel bir seçim&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;br /&gt;22     &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;23     dlgq.destroy&lt;br /&gt;24 &lt;br /&gt;25     dlgc = &lt;span class="caret-color-insert-mode"&gt;SingleChoiceDialog&lt;/span&gt;.new &lt;span class="caret-color-insert-mode"&gt;nil&lt;/span&gt;, &lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;Kaç Yaşında Evlenmek Daha İyi ?&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;, &lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;Birini Seçin&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;, [&lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;15&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;, &lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;20&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;, &lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;25&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;, &lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;36&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;, &lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;44&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;]&lt;br /&gt;26     &lt;span class="keyword"&gt;if&lt;/span&gt; dlgc.show_modal == &lt;span class="caret-color-insert-mode"&gt;ID_OK&lt;/span&gt;&lt;br /&gt;27       response = dlgc.get_string_selection&lt;br /&gt;28       p response + &lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt; yaş çok erken olur !&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;br /&gt;29     &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;30     dlgc.destroy&lt;br /&gt;31 &lt;br /&gt;32   &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;33 &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;34 &lt;br /&gt;35 &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="caret-color-insert-mode"&gt;__FILE__&lt;/span&gt; == &lt;span class="ST1"&gt;$0&lt;/span&gt;&lt;br /&gt;36   my_app = &lt;span class="caret-color-insert-mode"&gt;MyApp&lt;/span&gt;.new&lt;br /&gt;37   my_app.main_loop&lt;br /&gt;38 &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;39 &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Bu günlük bu kadar.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt; &lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4599780099173049989-1006251433659629792?l=ujk-ujk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ujk-ujk.blogspot.com/feeds/1006251433659629792/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://ujk-ujk.blogspot.com/2009/12/diyaloglarn-kullanm.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/1006251433659629792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/1006251433659629792'/><link rel='alternate' type='text/html' href='http://ujk-ujk.blogspot.com/2009/12/diyaloglarn-kullanm.html' title='Diyalogların Kullanımı'/><author><name>ujk</name><uri>http://www.blogger.com/profile/17064608878054630333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://bp0.blogger.com/_kZL5PIJ9yTM/R7tNwdie6PI/AAAAAAAAAAU/ITLU1BfswtA/S220/bos_gezen.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_kZL5PIJ9yTM/SzUNmFvpy5I/AAAAAAAAAC4/RpliTUZhkxc/s72-c/dialog1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4599780099173049989.post-6764867985270226485</id><published>2009-12-17T10:40:00.000-08:00</published><updated>2009-12-17T11:44:47.395-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WxRuby'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>Frame'e Menubar, Toolbar veya Statusbar Eklemek</title><content type='html'>Bir uygulama penceresinin genelde 3 temel görsel vardır. En üstte bir menübar, onun altında bir toolbar ve pencerenin altında bir statusbar. Şekilde böyle bir pencere resmi görünüyor.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_kZL5PIJ9yTM/Syp8ycviecI/AAAAAAAAACw/d4fJATJb188/s1600-h/toolbar.png"&gt;&lt;img style="cursor: pointer; width: 308px; height: 231px;" src="http://4.bp.blogspot.com/_kZL5PIJ9yTM/Syp8ycviecI/AAAAAAAAACw/d4fJATJb188/s400/toolbar.png" alt="" id="BLOGGER_PHOTO_ID_5416278708017330626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aşağıdaki programı toolbar.rb adıyla kaydedin.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: rgb(0, 0, 153);"&gt; 1 &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="ST0"&gt;#!/usr/bin/env ruby&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt; 2 &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="ST0"&gt;#&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="ST0"&gt;Toolbar.rb Frame'e Menu ve Toolbar Eklemek&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt; 3 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt; 4 require &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="STRING_LITERAL"&gt;'rubygems'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt; 5 require &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="STRING_LITERAL"&gt;'wx'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt; 6 include &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="caret-color-insert-mode"&gt;Wx&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt; 7 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt; 8 &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="keyword"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="caret-color-insert-mode"&gt;ToolbarFrame&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt; &lt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="caret-color-insert-mode"&gt;Frame&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt; 9   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="keyword"&gt;def&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt; initialize&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;10     &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="keyword"&gt;super&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="caret-color-insert-mode"&gt;nil&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;, -&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="INT_LITERAL"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="STRING_LITERAL"&gt;"Toolbar"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="TYPE_SYMBOL"&gt;:size&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;=&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="caret-color-insert-mode"&gt;Size&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;.new(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="INT_LITERAL"&gt;300&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="INT_LITERAL"&gt;200&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;11     panel = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="caret-color-insert-mode"&gt;Panel&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;.new &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="keyword"&gt;self&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;12     panel.set_background_colour &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="caret-color-insert-mode"&gt;WHITE&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;13     status_bar = create_status_bar&lt;/span&gt;                     #1 statusbar üretiliyor&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;14     tool_bar = create_tool_bar&lt;/span&gt;                         #2 toolbar üretiliyor&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;15     tool_bar.add_tool -&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="INT_LITERAL"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="STRING_LITERAL"&gt;"New"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;, xpm_bitmap(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="STRING_LITERAL"&gt;"new.xpm"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;), &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="STRING_LITERAL"&gt;"Long help for 'New' "&lt;/span&gt;  #3 toolbara buton ekleniyor&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;16     tool_bar.realize&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;17     menubar = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="caret-color-insert-mode"&gt;MenuBar&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;.new&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;18     menu1 = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="caret-color-insert-mode"&gt;Menu&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;.new&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;19     menubar.append menu1, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="STRING_LITERAL"&gt;"&amp;amp;File"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;20     menu2 = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="caret-color-insert-mode"&gt;Menu&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;.new&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;21     menu2.append -&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="INT_LITERAL"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="STRING_LITERAL"&gt;"&amp;amp;Copy"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="STRING_LITERAL"&gt;"Copy in Statusbar"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;22     menu2.append -&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="INT_LITERAL"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="STRING_LITERAL"&gt;"C&amp;amp;ut"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="STRING_LITERAL"&gt;"-"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;23     menu2.append -&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="INT_LITERAL"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="STRING_LITERAL"&gt;"Paste"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;24     menu2.append_separator&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;25     menu2.append -&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="INT_LITERAL"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="STRING_LITERAL"&gt;"&amp;amp;Options..."&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="STRING_LITERAL"&gt;"Display Options"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;26     menubar.append menu2, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="STRING_LITERAL"&gt;"&amp;amp;Edit"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;27     set_menu_bar menubar&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;28   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;29 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;30   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="ST0"&gt;# bir Bitmap icon nesnesi döner&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;31   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="keyword"&gt;def&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt; xpm_bitmap(base_name)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;32     &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="ST0"&gt;# betiğin bulunduğu klasörde icons adında bir alt klasörde iconlar var&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;33     xpm_file = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="caret-color-insert-mode"&gt;File&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;.join( &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="caret-color-insert-mode"&gt;File&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;.dirname(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="caret-color-insert-mode"&gt;__FILE__&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;), &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="STRING_LITERAL"&gt;'icons'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;, base_name )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;34     &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="caret-color-insert-mode"&gt;Wx&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;::&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="caret-color-insert-mode"&gt;Bitmap&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;.new(xpm_file, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="caret-color-insert-mode"&gt;Wx&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;::&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="caret-color-insert-mode"&gt;BITMAP_TYPE_XPM&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;35   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);" class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;36 &lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;1 işaretli satır Wx::StatusBar nesnesinin bir oluşumunu üretiyoruz. Status bar frame gösterilmesiyle beraber en alta yerleşir ve orada yapışık olarak kalır. Status bar uygulama çalışması esnasında çeşitli bilgilendirmeler için kullanılır. Statusbar yazı boyutu ve şekli işletim sistemi tarafından belirlenir.&lt;br /&gt;&lt;br /&gt;2 işaretli satırda Wx::ToolBar nesnesinin bir oluşumu üretiyoruz ve bu da pencerenin üst kısmına yayılır. Toolbar üzerinde çeşitli komutları yerine getirecek resimli butonlar olur.&lt;br /&gt;&lt;br /&gt;3 işaretli satırda toolbar'a bir buton ekliyoruz. Bunu yaparken resim için bir bitmap nesnesi gerekiyor. Bunun için de xpm_bitmap adında bir metod yardımıyla betiğin bulunduğu klasöre eklediğimiz "icons" klasörü içinden bir resim dosyası çağırıyoruz. Bu klasörü WxRuby gem klasörü içindeki bigdemo örneğinin olduğu klasörde bulabilirsiniz. Mesela bende bu resimleri "/usr/lib/ruby/gems/1.8/gems/wxruby-2.0.0-x86-linux/samples/bigdemo/icons" klasöründe buldum. Daha sonra realize metodu ile toolbar'a butonlarının yerleştirmesini otomatik olarak yapmasını emrediyoruz.&lt;br /&gt;&lt;br /&gt;Daha sonra bir MenuBar nesnesi üretiyoruz. MenuBar nesnesi pencerenin en üstüne yerleşir. Bu nesneye Menu nesneleri ekleyerek uygulamanın menüleri oluşturulur. Burda 2 adet Menu nesnesi üretiyoruz. Sonra bu menü nesnelerine alt menü komutları ekliyoruz. Hem menubar'a menu nesnesi eklerken hem de menu'ye altmenü eklerken append metodu kullanıyoruz. Menüye ulaşmak için kısayol tuşu olacak harfin önüne &amp;amp; işareti koymamız gerekiyor. Alt menüleri eklerken girilen 3. parametredeki string mouse menü üzerinde gezerken status barda görünür.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4599780099173049989-6764867985270226485?l=ujk-ujk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ujk-ujk.blogspot.com/feeds/6764867985270226485/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://ujk-ujk.blogspot.com/2009/12/framee-menubar-toolbar-veya-statusbar.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/6764867985270226485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/6764867985270226485'/><link rel='alternate' type='text/html' href='http://ujk-ujk.blogspot.com/2009/12/framee-menubar-toolbar-veya-statusbar.html' title='Frame&apos;e Menubar, Toolbar veya Statusbar Eklemek'/><author><name>ujk</name><uri>http://www.blogger.com/profile/17064608878054630333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://bp0.blogger.com/_kZL5PIJ9yTM/R7tNwdie6PI/AAAAAAAAAAU/ITLU1BfswtA/S220/bos_gezen.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_kZL5PIJ9yTM/Syp8ycviecI/AAAAAAAAACw/d4fJATJb188/s72-c/toolbar.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4599780099173049989.post-3455422618561258380</id><published>2009-12-15T11:29:00.000-08:00</published><updated>2009-12-15T12:20:51.534-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WxRuby'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>WxRuby uygulamanıza sağlam bir temel vermek</title><content type='html'>Bir WxRuby uygulamasının iki temel parçası vardır, uygulama nesnesi ve üst seviye pencere nesnesi (top level window). Uygulama nesnesi esas çevrim programını barındırır, bu yüzden uygulama nesnesi olmadan bir WxRuby uygulaması olamaz.&lt;br /&gt;  Üst seviye pencere ise kullanıcıya sunulacak en önemli kontrolleri ve verileri içerir. Örneğin bir kelime işlemci programında üst seviye pencere hem dökümanı gösterirken aynı zamanda dökümanla ilgili birçok veriyi de barındırır. Aynı şekilde bir web tarayıcının üst seviye penceresi hem sayfayı gösterir hem sayfa hakkında bilgiler barındırır. Aşağıdaki şekil bu iki temel nesnenin birbirleri ve uygulamanın geri kalanıyla bağlantılarını gösterir.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_kZL5PIJ9yTM/Syfk3JpDYEI/AAAAAAAAACg/oBG15jlfyPA/s1600-h/widget1.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 304px;" src="http://1.bp.blogspot.com/_kZL5PIJ9yTM/Syfk3JpDYEI/AAAAAAAAACg/oBG15jlfyPA/s400/widget1.png" alt="" id="BLOGGER_PHOTO_ID_5415548713068355650" border="0" /&gt;&lt;/a&gt; &lt;style type="text/css"&gt;  &lt;!--   @page { size: 21cm 29.7cm; margin: 2cm }   P { margin-bottom: 0.21cm }  --&gt;  &lt;/style&gt;  &lt;p&gt;     Bu diyagramda da göründüğü gibi uygulama nesnesi ana olay çevrimi ve üst seviye pencereyi içerir. Üst seviye pencere üzerindeki kontrolleri ve iliştirdiğiniz diğer veri nesnelerini içerir. Bu pencere ve içindeki kontroller kullanıcının hareketlerinden olayları tetikler.&lt;/p&gt; &lt;p&gt;     Her WxRuby programı bir adet uygulama nesnesi bulundurmalıdır. Uygulama nesnesi Wx::App sınıfının bir oluşumu veya altsınıfıdır. Uygulama nesnesinin esas amacı ana olay çevrimini yönetmektir. Bu olay çevrimi pencere sisteminden gelen olay isteklerini işler ve ilgili olay işleyici rutinlere yönlendirir. Ayrıca bu uygulama nesnesi uygulama geneli nesneler de barındırabilir (veritabanı bağlantıları gibi).  &lt;/p&gt; &lt;p&gt;     &lt;style type="text/css"&gt;  &lt;!--   @page { size: 21cm 29.7cm; margin: 2cm }   P { margin-bottom: 0.21cm }   H2 { margin-bottom: 0.21cm }   H2.western { font-family: "Arial", sans-serif; font-size: 14pt; font-style: italic }   H2.cjk { font-family: "Arial"; font-size: 14pt; font-style: italic }   H2.ctl { font-family: "Tahoma"; font-size: 14pt; font-style: italic }  --&gt;  &lt;/style&gt;  &lt;/p&gt;&lt;h2 class="western"&gt;Wx:App alt sınıfını üretmek&lt;/h2&gt;      &lt;style type="text/css"&gt;  &lt;!--   @page { size: 21cm 29.7cm; margin: 2cm }   P { margin-bottom: 0.21cm }  --&gt;  &lt;/style&gt;  &lt;p&gt; Bu altsınıfı üretmek kolay olduğundan ek bir özellik gerekmese bile bu altsınıfı üretmek yapısal olarak doğru olacaktır. Bu altsınıfı üretmek için dört adım yapılır :&lt;/p&gt; &lt;ol&gt;&lt;li&gt;&lt;p&gt;Altsınıf tanımlamasını yaparız.&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;“on_init” metodunu bu tanımlama içine koyarız.&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;Programımızın ana bölümünde bu sınıfın bir oluşumunu  üretiriz.&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;Bu oluşumun “main_loop” metodunu çağırırız ve  kontrol WxRuby'ye geçer.&lt;/p&gt; &lt;/li&gt;&lt;/ol&gt; &lt;p&gt; “on_init” metodu uygulama başlayınca ana çevrime girmeden önce çalışır. Bu metod parametre almaz ve bir bool değer döner. Eğer bu metod false dönerse uygulama hemen sona erer. Tipik olarak on_init metodu içinde enazından bir frame tanımlaması yapılır. Ayrıca bu frame'in show metoduda burda olur. Ayrıca bu frame'in uygulamanın üst seviye penceresi olduğunu da set_top_window ile tanıtabiliriz. Üst seviye pencere sahibi tanıtılmamış diyalog pencereleri için default “sahip” tir.  &lt;/p&gt; &lt;p&gt;     &lt;style type="text/css"&gt;  &lt;!--   @page { size: 21cm 29.7cm; margin: 2cm }   P { margin-bottom: 0.21cm }   H2 { margin-bottom: 0.21cm }   H2.western { font-family: "Arial", sans-serif; font-size: 14pt; font-style: italic }   H2.cjk { font-family: "Arial"; font-size: 14pt; font-style: italic }   H2.ctl { font-family: "Tahoma"; font-size: 14pt; font-style: italic }  --&gt;  &lt;/style&gt;  &lt;/p&gt;&lt;h2 class="western"&gt;Wx::Frame nesnesi ile çalışmak&lt;/h2&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;      &lt;style type="text/css"&gt;  &lt;!--   @page { size: 21cm 29.7cm; margin: 2cm }   P { margin-bottom: 0.21cm }  --&gt;  &lt;/style&gt;  &lt;/p&gt;&lt;p&gt; WxRuby'de frame kullanıcıların pencere diye isimlendirdiği GUI elemanıdır. WxRuby'de tüm pencerelerin üst sınıfı Wx::Frame dir. Frame altsınıfını üretirken initialize metodu içinde üst sınıf parametreleriyle çağırılır. Bu parametrele şöyledir :&lt;/p&gt;  &lt;p&gt;&lt;span style="color: rgb(0, 0, 128);"&gt; &lt;span style="font-size:85%;"&gt;Wx::Frame.new( parent , id , title , pos=DEFAULT_POSITION , &lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&lt;span style="font-size:85%;"&gt;  size=DEFAULT_SIZE , style=DEFAULT_FRAME_STYLE , name=”frame”)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:100%;"&gt;     Bir çok kontrol de benzer parametreler alır. &lt;/span&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt; &lt;/p&gt; &lt;p&gt;     &lt;style type="text/css"&gt;  &lt;!--   @page { size: 21cm 29.7cm; margin: 2cm }   P { margin-bottom: 0.21cm }   TD P { margin-bottom: 0cm }  --&gt;  &lt;/style&gt;  &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt; &lt;table style="color: rgb(0, 0, 0);" width="100%" border="1" cellpadding="4" cellspacing="0"&gt;  &lt;col width="38"&gt;  &lt;col width="218"&gt;  &lt;tbody&gt;&lt;tr valign="top"&gt;   &lt;td width="15%"&gt;    &lt;p align="center"&gt;&lt;b&gt;Parametre&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="85%"&gt;    &lt;p align="center"&gt;&lt;b&gt;Açıklaması&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr valign="top"&gt;   &lt;td width="15%"&gt;    &lt;p&gt;parent&lt;/p&gt;   &lt;/td&gt;   &lt;td width="85%"&gt;    &lt;p&gt;Frame'in içine yerleşeceği yer. Üst seviye pencereler için    bu parametre nil değeri alır. Eğer frame bir pencere içine    yerleşecekse parent o penceredir. Bu durumda frame parent'in    içinde beraber büyüyecek ve hareket edecektir. Parent kapanırsa    bu frame de kapanır.     &lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr valign="top"&gt;   &lt;td width="15%"&gt;    &lt;p&gt;id&lt;/p&gt;   &lt;/td&gt;   &lt;td width="85%"&gt;    &lt;p&gt;Frame kontrolü id numarası. Buraya özel bir sayı    girebilirsiniz ya da -1 girerek WxRuby'nin otomatik id üretmesini    sağlayabilirsiniz.&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr valign="top"&gt;   &lt;td width="15%"&gt;    &lt;p&gt;title&lt;/p&gt;   &lt;/td&gt;   &lt;td width="85%"&gt;    &lt;p&gt;Frame etiketi. Bir çok stilde frame üst kısmındaki barda    gösterilir.&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr valign="top"&gt;   &lt;td width="15%"&gt;    &lt;p&gt;pos&lt;/p&gt;   &lt;/td&gt;   &lt;td width="85%"&gt;    &lt;p&gt;Bir Wx::Point nesnesi boş bırakılırsa işletim sistemi bir    yer belirler. Ekranın sol üst köşesi (0, 0) olarak düşünülerek    frame'in ekrandaki yerini belirleyebilirsiniz.&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr valign="top"&gt;   &lt;td width="15%"&gt;    &lt;p&gt;size&lt;/p&gt;   &lt;/td&gt;   &lt;td width="85%"&gt;    &lt;p&gt;Bir Wx::Size nesnesi frame'in ilk açılıştaki boyutunu tayin    eder. Boş bırakılırsa default bir boyutla açılır.&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr valign="top"&gt;   &lt;td width="15%"&gt;    &lt;p&gt;style&lt;/p&gt;   &lt;/td&gt;   &lt;td width="85%"&gt;    &lt;p&gt;Sabitlerden oluşan bir bitmask. Frame stilini belirler. Stil    Sabitleri arasına | (bitwise or) işareti koyarak birçok stil    sabiti kullanılabilir.     &lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr valign="top"&gt;   &lt;td width="15%"&gt;    &lt;p&gt;name&lt;/p&gt;   &lt;/td&gt;   &lt;td width="85%"&gt;    &lt;p&gt;Frame'e verilen dahili isimdir. Daha sonra frame'i bulmak için    kullanılabilir.     &lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&lt;br /&gt;  &lt;style type="text/css"&gt;  &lt;!--   @page { size: 21cm 29.7cm; margin: 2cm }   P { margin-bottom: 0.21cm }  --&gt;  &lt;/style&gt;  &lt;/p&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt; Frame stilleri sabitlerin birleşmesinden oluşmuştur. Örneğin DEFAULT_FRAME_STYLE şunlardan oluşur :&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&lt;span style="font-size:85%;"&gt; MAXIMIZE_BOX | MINIMIZE_BOX | RESIZE_BORDER | &lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&lt;span style="font-size:85%;"&gt; SYSTEM_MENU | CAPTION | CLOSE_BOX&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt; Bu birleşik stil içinden bir ya da birkaçını istemezsek özel veya ile çıkarabiliriz :&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;&lt;span style="font-size:100%;"&gt; &lt;span style="font-size:85%;"&gt;DEFAULT_FRAME_STYLE ^ ( RESIZE_BORDER | MINIMIZE_BOX | MAXIMIZE_BOX )&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;Tavsiye edilen üst seviye pencerede default stili kullanmaktır. Böyle olunca kullanıcı hangi pencerenin asıl olduğunu daha rahat anlar.&lt;/span&gt;&lt;/p&gt;      &lt;style type="text/css"&gt;  &lt;!--   @page { size: 21cm 29.7cm; margin: 2cm }   P { margin-bottom: 0.21cm }   TD P { margin-bottom: 0cm }  --&gt;  &lt;/style&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;table style="color: rgb(0, 0, 0);" width="100%" border="1" cellpadding="4" cellspacing="0"&gt;  &lt;col width="83"&gt;  &lt;col width="173"&gt;  &lt;tbody&gt;&lt;tr valign="top"&gt;   &lt;td width="32%"&gt;    &lt;p align="center"&gt;&lt;span style="font-size:100%;"&gt;Stil&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="68%"&gt;    &lt;p align="center"&gt;&lt;span style="font-size:100%;"&gt;Açıklaması&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr valign="top"&gt;   &lt;td width="32%"&gt;    &lt;p&gt;&lt;span style="font-size:100%;"&gt;CAPTION&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="68%"&gt;    &lt;p&gt;&lt;span style="font-size:100%;"&gt;Frame üzerine bir bar ekler buraya frame'in title    parametresindeki string yazılır.&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr valign="top"&gt;   &lt;td width="32%"&gt;    &lt;p&gt;&lt;span style="font-size:100%;"&gt;CLOSE_BOX&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="68%"&gt;    &lt;p&gt;&lt;span style="font-size:100%;"&gt;Frame etiket barına bir kapatma düğmesi ekler    işletim sisteminden aynı şekliyle pencere kapatma düğmesi    eklenir.&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr valign="top"&gt;   &lt;td width="32%"&gt;    &lt;p&gt;&lt;span style="font-size:100%;"&gt;DEFAULT_FRAME_STYLE&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="68%"&gt;    &lt;p&gt;&lt;span style="font-size:100%;"&gt;Yukarda açıklamıştık.&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr valign="top"&gt;   &lt;td width="32%"&gt;    &lt;p&gt;&lt;span style="font-size:100%;"&gt;FRAME_SHAPED&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="68%"&gt;    &lt;p&gt;&lt;span style="font-size:100%;"&gt;Bu stilde olan frame'ler set_shape metoduyla    dikdörtgenden başka şekillerde olabilirler.&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr valign="top"&gt;   &lt;td width="32%"&gt;    &lt;p&gt;&lt;span style="font-size:100%;"&gt;FRAME_TOOL_WINDOW&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="68%"&gt;    &lt;p&gt;&lt;span style="font-size:100%;"&gt;Frame'in toolbox penceresi olarak görünmesini    sağlar. Daha küçük bir etiket barı olur sadece kapatma    düğmesi olur ve görev yöneticide bu pencere görünmez.&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr valign="top"&gt;   &lt;td width="32%"&gt;    &lt;p&gt;&lt;span style="font-size:100%;"&gt;MAXIMIZE_BOX&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="68%"&gt;    &lt;p&gt;&lt;span style="font-size:100%;"&gt;Pencereye tam ekran düğmesi ekler.&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr valign="top"&gt;   &lt;td width="32%"&gt;    &lt;p&gt;&lt;span style="font-size:100%;"&gt;MINIMIZE_BOX&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="68%"&gt;    &lt;p&gt;&lt;span style="font-size:100%;"&gt;Pencereye aşağı küçültme düğmesi ekler.&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr valign="top"&gt;   &lt;td width="32%"&gt;    &lt;p&gt;&lt;span style="font-size:100%;"&gt;RESIZE_BORDER&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="68%"&gt;    &lt;p&gt;&lt;span style="font-size:100%;"&gt;Pencerenin boyutu değiştirilebilir olmasını    sağlar.&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr valign="top"&gt;   &lt;td width="32%"&gt;    &lt;p&gt;&lt;span style="font-size:100%;"&gt;SIMPLE_BORDER&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="68%"&gt;    &lt;p&gt;&lt;span style="font-size:100%;"&gt;Gölgelendirmesiz düz ekran her işletim    sisteminde çalışmaz.&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr valign="top"&gt;   &lt;td width="32%"&gt;    &lt;p&gt;&lt;span style="font-size:100%;"&gt;SYSTEM_MENU&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="68%"&gt;    &lt;p&gt;&lt;span style="font-size:100%;"&gt;Pencereye system menüsü ekler. İlgili    düğmelerin seçilmediği işlemler bu menüden de yaplamaz. (Tam    ekran, minimize gibi)&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr valign="top"&gt;   &lt;td width="32%"&gt;    &lt;p&gt;&lt;br /&gt; &lt;/p&gt;   &lt;/td&gt;   &lt;td width="68%"&gt;    &lt;p&gt;&lt;br /&gt; &lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&lt;br /&gt;  &lt;style type="text/css"&gt;  &lt;!--   @page { size: 21cm 29.7cm; margin: 2cm }   P { margin-bottom: 0.21cm }   H3 { margin-bottom: 0.21cm }   H3.western { font-family: "Arial", sans-serif }   H3.cjk { font-family: "Arial" }   H3.ctl { font-family: "Tahoma" }  --&gt;  &lt;/style&gt;  &lt;/p&gt;&lt;h3 class="western"&gt;Frame'e Widget Eklemek&lt;/h3&gt;       &lt;style type="text/css"&gt;  &lt;!--   @page { size: 21cm 29.7cm; margin: 2cm }   P { margin-bottom: 0.21cm }  --&gt;  &lt;/style&gt;  &lt;p&gt; Aşağıdaki programda frame ortasında bir buton konmuş ve butona tıklanınca uygulama sona eriyor.&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt; &lt;pre&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;1 #!/usr/bin/env ruby&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;2 # Widget.rb Frame'e Buton Eklemek&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;3 &lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;4 require 'rubygems'&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;5 require 'wx'&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;6 include Wx&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;7 &lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;8 class InsertFrame &lt; style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;9   def initialize&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;10     super nil, -1, "Butonlu Frame", :size=&gt;Size.new(300, 100)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;11     panel = Panel.new self    &lt;span style="color: rgb(255, 0, 0);"&gt;#1 Panel eklenmesi&lt;/span&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;12     button = Button.new panel, -1, "Close",&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;Point.new(125, 25), Size.new(60, 50) &lt;span style="color: rgb(255, 0, 0);"&gt;#2 Panele buton eklenmesi&lt;/span&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;13     evt_button(button) {on_close_me}   &lt;span style="color: rgb(255, 0, 0);"&gt;#3 Butona tıklanınca &lt;/span&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;14     evt_close {on_close_window}   &lt;span style="color: rgb(255, 0, 0);"&gt;#4 pencere kapanınca&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;15   end&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;16 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;17   def on_close_me&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;18     close&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;19   end&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;20 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;21   def on_close_window&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;22     destroy&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;23   end&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;24 end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;25 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;26 class MyApp &lt; style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;27   def on_init&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;28     insert_frame = InsertFrame.new&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;29     insert_frame.show&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;30   end&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;31 end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;32 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;33 if __FILE__ == $0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;34   my_app = MyApp.new&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;35   my_app.main_loop&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;36 end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;37 &lt;/span&gt;&lt;/pre&gt;&lt;p align="justify"&gt;     &lt;span style="color: rgb(0, 0, 255);"&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;InsertFrame sınıfının iki alt window'u var. İlki panel, bu panel diğer windowları içine yerleştirmek için kullanılır. İkincisi de sıradan bir buton. Bunlar 1 ve 2 işaretli satırlarda gösterilmiştir. Daha sonra 3 nolu işaretli satırda butona tıklanınca çağırılacak kod bloğu tanıtılıyor. 4 nolu işaretli satırda pencere kapatma işlemi çağırılınca uygulmanın kapatılması için gerekli kod bloğu çağırılıyor.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;     Çoğu durumda frame içinde aynı boyutu kaplayacak bir panel koyarız ve diğer kontrolleri bu panel üzerine yerleştiririz. Ayrıca windows işletim sisteminde frame nesnesinin arkaplan rengi standart dışıdır ve gridir. Rengi beyaz olan bir panel ile daha güzel görüntü olacaktır. Ayrıca panel nesnesi içinde kontroller arasında tab butonu ile ezilebilir ama frame'de bu olmaz. Birçok diğer UI sistemlerde kontrol üretildikten sonra bir insert komutuyla ana taşıyıcıya eklenir. WxRuby de ise sadece kontrol üretilirken parent parmetresine taşıyıcı adı yazılır. &lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p align="justify"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_kZL5PIJ9yTM/SyfvahJ4WVI/AAAAAAAAACo/48DL5PAe86s/s1600-h/widget2.png"&gt;&lt;img style="cursor: pointer; width: 308px; height: 133px;" src="http://4.bp.blogspot.com/_kZL5PIJ9yTM/SyfvahJ4WVI/AAAAAAAAACo/48DL5PAe86s/s400/widget2.png" alt="" id="BLOGGER_PHOTO_ID_5415560315791759698" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Ayrıca dikkat edersek buton için bir boyut girdik ve konacağı pozisyonu belirttik ama panel için böyle bir tanımlama yapmadık. WxRuby'de bir frame içine tek bir window yerleştirirsek (burada panel yerleştirilmiş, buton panelin içinde) bu window frame içinin tamamına otomatik olarak yayılır ve beraber boyut değiştirir. Panele boyut versek de bir şey değişmeyecekti. Ekrana konan her kontrole bir boyut vermek ve pencere boyutu değiştirilince olacaklara hükmetmek için rutinler yazmak oldukça zordur. Bunun için &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;i&gt;Sizer&lt;/i&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-style: normal;"&gt; adı verilen nesneler kullanırız ama daha sonra açıklarız nasipse.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4599780099173049989-3455422618561258380?l=ujk-ujk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ujk-ujk.blogspot.com/feeds/3455422618561258380/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://ujk-ujk.blogspot.com/2009/12/wxruby-uygulamanza-saglam-bir-temel.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/3455422618561258380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/3455422618561258380'/><link rel='alternate' type='text/html' href='http://ujk-ujk.blogspot.com/2009/12/wxruby-uygulamanza-saglam-bir-temel.html' title='WxRuby uygulamanıza sağlam bir temel vermek'/><author><name>ujk</name><uri>http://www.blogger.com/profile/17064608878054630333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://bp0.blogger.com/_kZL5PIJ9yTM/R7tNwdie6PI/AAAAAAAAAAU/ITLU1BfswtA/S220/bos_gezen.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_kZL5PIJ9yTM/Syfk3JpDYEI/AAAAAAAAACg/oBG15jlfyPA/s72-c/widget1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4599780099173049989.post-1476482739596020218</id><published>2009-12-04T10:02:00.000-08:00</published><updated>2009-12-08T13:00:52.312-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WxRuby'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>WxRuby İlk Uygulama</title><content type='html'>&lt;div style="text-align: justify;"&gt;Bu yazıda adım adım iş yapan bir uygulama yapacağız. Sonunda WxRuby logosu gösteren bir penceremiz olacak.&lt;br /&gt;İlk önce WxRuby ile yazılabilecek en kısa uygulamayı yapalım. Minimum.rb adında bir dosya oluşturun ve aşağıdaki kodu girin :&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: rgb(0, 0, 102);"&gt; 1 &lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="ST0"&gt;#!/bin/env ruby&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt; 2 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt; 3 require &lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="STRING_LITERAL"&gt;'rubygems'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt; 4 require &lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="STRING_LITERAL"&gt;'wx'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt; 5 include &lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="caret-color-insert-mode"&gt;Wx&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt; 6 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt; 7 &lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="keyword"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="caret-color-insert-mode"&gt;App&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt; 8   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="keyword"&gt;def&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);"&gt; on_init&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt; 9     frame = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="caret-color-insert-mode"&gt;Frame&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;.new &lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="caret-color-insert-mode"&gt;nil&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;, -&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="INT_LITERAL"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="STRING_LITERAL"&gt;"Minimum"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;10     frame.show&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;11   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;12 &lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;13 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;14 &lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="caret-color-insert-mode"&gt;App&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;.new.main_loop&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;Fazla bir şey yokmuş. 14 satırda ekrana boş bir pencere açtık. Bu programın asıl amacı WxRuby kurulumunuzun sağlıklı olduğunu görmek. Bu programı çalıştırmak için değişik işletim sistemlerinde değişik işlemler yapmak gerekebilir ama genellikle dosyanın olduğu klasörde terminal açılır ve şu yazılır :&lt;br /&gt;&lt;blockquote&gt;ruby minimum.rb&lt;/blockquote&gt;Sonuçta şu görüntü ortaya çıkar :&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_kZL5PIJ9yTM/SxlTogBpGJI/AAAAAAAAACQ/h4fFue_wJOE/s1600-h/blog3.png"&gt;&lt;img style="cursor: pointer; width: 242px; height: 164px;" src="http://3.bp.blogspot.com/_kZL5PIJ9yTM/SxlTogBpGJI/AAAAAAAAACQ/h4fFue_wJOE/s400/blog3.png" alt="" id="BLOGGER_PHOTO_ID_5411448382519056530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Şimdi bu resme bakan birçok kişi bunu bir window olarak isimlendirebilir ama WxRuby'de bu bir Frame'dir. WxRuby'de Window görüntüsü olan herşeye verilen isimdir. Diğer kütüphanelerin çoğunda bunlara Widget denir. WxRuby'de Butonlar , TextBoxlar gibi şeyler Window olarak çağırılır.&lt;br /&gt;Yazılan programda her satırın bir görevi vardır. Bu basit program her WxRuby programında bulunması gereken 5 öğeyi içerir:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Gerekli WxRuby kütüphanesini yüklemek.&lt;/li&gt;&lt;li&gt;WxRuby uygulama sınıfını tekrar işlemek.&lt;/li&gt;&lt;li&gt;Uygulama giriş metodunu tanımlamak.&lt;/li&gt;&lt;li&gt;Uygulama sınıfının bir oluşumunu üretmek.&lt;/li&gt;&lt;li&gt;Uygulamanın ana çevrimine girmek.&lt;/li&gt;&lt;/ul&gt;Şimdi adım adım her adımın nasıl gerçekleştirildiğini inceleyelim.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;WxRuby Kütüphanesini Yüklemek&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;İlk yapmamız gereken&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;wx adı verilen ana WxRuby kütüphanesini yüklemek.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;pre&gt;  require &lt;span class="STRING_LITERAL"&gt;'&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;wx&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;'&lt;/span&gt;&lt;br /&gt;include &lt;span class="caret-color-insert-mode"&gt;Wx&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;İlk satır 'wx' kütüphanesini yükler, ikinci satır ise kütüphaneden her çağırdığımız sınıfın başına 'Wx::' yazısını otomatik koyar yani bir Frame üretirken 'Wx::Frame.new' yerine 'Frame.new' yeterli olacaktır.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;Uygulamalar ve Frame'ler ile Çalışmak&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;WxRuby kütüphanesini yükledikten sonra artık uygulamayı ve içinde Frame'i oluşturabiliriz. Her WxRuby uygulamasının mutlaka bir Application(uygulama) nesnesi ve enaz bir Frame nesnesi olur. Uygulama nesnesi Wx::App sınıfının bir oluşumudur veya alt sınıfıdır. Bu sınıfın 'on_init' metodu uygulama çalışınca çağırılır.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;pre&gt;&lt;span style="color: rgb(0, 0, 102);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="keyword"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);"&gt; My&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="caret-color-insert-mode"&gt;App &lt;&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="keyword"&gt;def&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);"&gt; on_init&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;     frame = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="caret-color-insert-mode"&gt;Frame&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;.new &lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="caret-color-insert-mode"&gt;nil&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;, -&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="INT_LITERAL"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="STRING_LITERAL"&gt;"Minimum"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;     frame.show&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);" class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;Şeklinde App sınıfının bir alt sınıfını tanımlamak genel eğilimdir. MyApp ismini biz verdik Ruby'de geçerli herhangi bir sınıf ismi olabilir. 'on_init' metodunda genellikle Frame tanımlamaları yapılır. Ama çoğunlukla burdaki gibi Frame sınıfı değil , MyFrame gibi bir altsınıf üretilerek kullanılır.&lt;br /&gt;&lt;br /&gt;Frame'ler birçok parametre alır. Görünen ilk parametre mecburdur ama diğerlerini yazmasak da olur default değerleri vardır.  &lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;“Show” metodu frame'i görünür yapar. Eğer bu metodu kullanmazsak frame üretilir ama görünmez. Frame görünürlüğünü bir bool parametre vererek değiştirebiliriz:  &lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:85%;"&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;frame.show false              # frame görünmez olur.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;a name="DDE_LINK"&gt;&lt;/a&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;span style="font-size:85%;"&gt; frame.show true               # true yazmasak da olur default true&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;span style="font-size:85%;"&gt; frame.hide                      # bu da false parametre vermekle aynı işi yapar yani frame  görünmez olur.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Son olarak uygulama sınıfının bir oluşumu üretilecek ve uygulamanın 'main_loop' metoduna girilecek. Bu şöyle de yapılabilir.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:85%;"&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;app = App.new&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;span style="font-size:85%;"&gt; app.main_loop&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-size:100%;"&gt;Hepsi bu kadar! Bir kez uygulamanın main_loop metodunu çağırdıkmı artık kontrol WxRuby'ye geçer. Bu saatten sonra artık WxRuby kullanıcının eylemlerine cevap vermeye başlar. Yani mouse tıklamalarını , tuş basılmalarını izler. Uygulamanın tüm frame'leri kapanınca main_loop metodu da biter ve uygulama sona erer.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;h3 class="western"&gt; Minimum uygulamayı genişletmek&lt;/h3&gt; &lt;p&gt;WxRuby'ye başlangıç yapabilmek için olabilecek en kısa kodlardan birini yazdık. Aslında standart bir uygulama yaparken bundan daha yapısal davranmak gerekir. Programı bölümlere ayırarak devam etmeliyiz. Aynı programı bir de yapısal olarak düzenlenmiş şekilde yazalım. Aşağıdaki programı yazıp spare.rb olarak kaydedin.&lt;/p&gt; &lt;pre style="color: rgb(0, 0, 153);"&gt; 1 &lt;span class="ST0"&gt;#&lt;/span&gt;&lt;span class="ST0"&gt;!/usr/bin/env ruby&lt;/span&gt;                             &lt;span style="color: rgb(255, 0, 0);"&gt;-1-&lt;/span&gt;&lt;br /&gt;2 &lt;span class="ST0"&gt;#&lt;/span&gt;&lt;span class="ST0"&gt; Spare.rb WxRuby'ye giriş için yazılmıştır.    &lt;span style="color: rgb(255, 0, 0);"&gt;-2-&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;3&lt;br /&gt;4 require &lt;span class="STRING_LITERAL"&gt;'&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;rubygems&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;'&lt;/span&gt;&lt;br /&gt;5 require &lt;span class="STRING_LITERAL"&gt;'&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;wx&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;'&lt;/span&gt;&lt;br /&gt;6 include &lt;span class="caret-color-insert-mode"&gt;Wx&lt;/span&gt;&lt;br /&gt;7&lt;br /&gt;8 &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="caret-color-insert-mode"&gt;MyFrame&lt;/span&gt; &lt; &lt;span class="caret-color-insert-mode"&gt;Frame                           &lt;span style="color: rgb(255, 0, 0);"&gt;-3-&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;9&lt;br /&gt;10 &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;11&lt;br /&gt;12 &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="caret-color-insert-mode"&gt;MyApp&lt;/span&gt; &lt; &lt;span class="caret-color-insert-mode"&gt;App&lt;/span&gt;&lt;br /&gt;13   &lt;span class="keyword"&gt;def&lt;/span&gt; on_init&lt;br /&gt;14     frame = &lt;span class="caret-color-insert-mode"&gt;MyFrame&lt;/span&gt;.new  &lt;span class="caret-color-insert-mode"&gt;nil&lt;/span&gt; , &lt;span class="TYPE_SYMBOL"&gt;:&lt;/span&gt;&lt;span class="TYPE_SYMBOL"&gt;title&lt;/span&gt;=&gt; &lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;Spare&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;"   &lt;span style="color: rgb(255, 0, 0);"&gt;-4-&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;15     frame.show&lt;br /&gt;16   &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;17 &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;18&lt;br /&gt;19 &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="caret-color-insert-mode"&gt;__FILE__&lt;/span&gt; == &lt;span class="ST1"&gt;$0                     &lt;span style="color: rgb(255, 0, 0);"&gt;-5-&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;20   my_app = &lt;span class="caret-color-insert-mode"&gt;MyApp&lt;/span&gt;.new&lt;br /&gt;21   my_app.main_loop&lt;br /&gt;22 &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;" align="justify"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-size:100%;"&gt;1 numaralı işaretin olduğu ilk satır bir &lt;i&gt;shebang&lt;/i&gt;&lt;span style="font-style: normal;"&gt; satırı. Bir Ruby yorum satırına benziyor, gerçekte de öyle ama linux gibi bazı işletim sistemlerinde &lt;/span&gt;&lt;i&gt;shebang&lt;/i&gt;&lt;span style="font-style: normal;"&gt; satırı işletim sistemine bu betiği çalıştırmak için kullanacağı interpreter'ı tarif eder. Bu sayede linuxta sadece komut satırında dosyanın adını yazarak çalıştırabiliriz. Yani &lt;/span&gt;&lt;i&gt;“ruby spare.rb”&lt;/i&gt;&lt;span style="font-style: normal;"&gt; yerine sadece &lt;/span&gt;&lt;i&gt;“spare.rb”&lt;/i&gt;&lt;span style="font-style: normal;"&gt; yazdığımızda betik çalışması için ruby interpreter gerektiği bilinir. Kullanıcıların ruby işini bilmelerine gerek yok sadece dosyanın adını yazdıklarında betik çalışır. Bu satır kullanılmadığı işletim sistemlerinde Bir şey ifade etmez ama cross platform uygulamalar yazmak için bu satırı koymamız gerekir. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-style: normal;" align="justify"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-style: normal;" align="justify"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-size:100%;"&gt;2- nolu işaretli satırda uygulamanın Ruby dökümanı için bir dökümantasyon yorumu yazdık. İlerde bu uygulamanın rdoc ile dökümanı çıkarıldığında dökümana uygulamanın açıklaması olarak bu yorum gelecektir. Benzer şekilde her sınıf tanımından ya da metod tanımından önce gelen satırda yazılan yorumlar o metod ya da sınıfın rdoc dökümanında açıklama olarak gelir. Bundan başka rdoc dökümanının görüntüsünü wiki benzeri formatlayan yöntemler vardır.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-style: normal;" align="justify"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-style: normal;" align="justify"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-size:100%;"&gt;3- Frame sınıfının bir altsınıfını kendi MyFrame sınıfımız olarak tanıttık, şimdilik hiçbir şeyi değiştirmedik. İlerde içinde butonlar textboxlar vb. olan frame tanımlamaları yapacağız. Programınızın frame'i karmaşıklaşmaya başladığında ya da birden fazla frame içeren programlar yaparken bu şekilde her frame için bir altsınıf tanımlaması yapmak programınızın anlaşılabilir olmasına yardımcı olacaktır.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-style: normal;" align="justify"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-style: normal;" align="justify"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-size:100%;"&gt;4- Uygulama sınıfı içinde kendi frame sınıfımızı parametrelerle çağırıyoruz. Kendi sınıfımızın tanımında başka bir şekil belirtilmediği için Wx::Frame sınıfı ile aynı şekilde parametreleri değerlendirilir. Bir nesneden üretilen nesne yine nesnedir ve aynı şekilde parametreler alır.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-style: normal;" align="justify"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-style: normal;" align="justify"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-size:100%;"&gt;5- Son bölüm bir ruby programında kullanılan genel yapılardan biridir. Bir betik iki şekilde kullanılır, ya direk olarak çalıştırılır ya da başka bir betik içine kütüphane dosyası olarak “require” ile çağırılır. Bir betiği kütüphane olarak çağırdığımızda onun içindeki sınıfları ve metodları kullanırız. Eğer bu betik tek başına çalışan bir betikse mesela bir pencere açıyorsa require komutu sonrası da çalışmaya kalkar, halbuki biz sadece içindeki sınıfları ve metodları kullanmak istiyoruz. Burdaki kalıbı kullanarak çalışmasını istemediğimiz kodları ayırıyoruz. “__FILE__” değişkeni kodun bulunduğu dosyanın adını verir, yani burada “spare.rb” değeri alır. “$0” ise aktif iş yapan betiğin adıdır. Şimdi eğer “ruby spare.rb” deyip direk bu betik çalıştırılırsa “$0” değişkeni de “spare.rb” değerini alır yani “__FILE__” değişkeni ile aynı olur. Ama diyelim bu betiği “app.rb” adındaki başka bir betiğin içinde “require spare.rb” deyip yüklediğimizde “$0” değişkeni artık “app.rb” olacaktır bu durumda if satırı içindeki kodlar çalışmayacak sadece sınıf tanımlamaları diğer betiğe yüklenecektir. Bunu yapmasaydık require ile betiği başka bir betik içine yüklemeye kalktığımızda uygulama çalışıp frame açılacaktı. &lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-style: normal;" align="justify"&gt;&lt;br /&gt;&lt;/p&gt; &lt;h3 class="western" style="font-style: normal;"&gt;En Son Hello.rb Betiğin Üretilmesi&lt;/h3&gt;  &lt;p style="font-style: normal;"&gt; Şimdi artık son haline getirelim. “hello.rb” adındaki betiğe aşağıdaki satırları girelim :&lt;br /&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="font-style: normal;"&gt; &lt;/p&gt;&lt;pre style="color: rgb(0, 0, 153);"&gt; 1 &lt;span class="ST0"&gt;#&lt;/span&gt;&lt;span class="ST0"&gt;!/usr/bin/env ruby&lt;/span&gt;&lt;br /&gt;2 &lt;span class="ST0"&gt;#&lt;/span&gt;&lt;span class="ST0"&gt; Merhaba WxRuby &lt;/span&gt;&lt;span class="ST0"&gt;Prgramı !&lt;/span&gt;&lt;br /&gt;3&lt;br /&gt;4 require &lt;span class="STRING_LITERAL"&gt;'&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;rubygems&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;'&lt;/span&gt;&lt;br /&gt;5 require &lt;span class="STRING_LITERAL"&gt;'&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;wx&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;'&lt;/span&gt;&lt;br /&gt;6 include &lt;span class="caret-color-insert-mode"&gt;Wx&lt;/span&gt;&lt;br /&gt;7&lt;br /&gt;8 &lt;span class="ST0"&gt;#&lt;/span&gt;&lt;span class="ST0"&gt; MyFrame bir resim gösteriyor.&lt;/span&gt;&lt;br /&gt;9 &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="caret-color-insert-mode"&gt;MyFrame&lt;/span&gt; &lt; &lt;span class="caret-color-insert-mode"&gt;Frame&lt;/span&gt;&lt;br /&gt;10   &lt;span class="ST0"&gt;#&lt;/span&gt;&lt;span class="ST0"&gt; Bir &lt;/span&gt;&lt;span class="ST0"&gt;Frame oluşumu yap ve bir resim göster&lt;/span&gt;&lt;br /&gt;11   &lt;span class="keyword"&gt;def&lt;/span&gt; initialize(image, parent=&lt;span class="caret-color-insert-mode"&gt;nil&lt;/span&gt;, id=-&lt;span class="INT_LITERAL"&gt;1&lt;/span&gt;, pos=&lt;span class="caret-color-insert-mode"&gt;DEFAULT_POSITION&lt;/span&gt;, title=&lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;Merhaba WxRuby&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt; )&lt;br /&gt;12     temp = image.convert_to_bitmap&lt;br /&gt;13     size = &lt;span class="caret-color-insert-mode"&gt;Size&lt;/span&gt;.new(temp.get_width, temp.get_height)&lt;br /&gt;14     &lt;span class="keyword"&gt;super&lt;/span&gt; parent, id, title, pos, size&lt;br /&gt;15     bmp = &lt;span class="caret-color-insert-mode"&gt;StaticBitmap&lt;/span&gt;.new &lt;span class="keyword"&gt;self&lt;/span&gt;, &lt;span class="TYPE_SYMBOL"&gt;:&lt;/span&gt;&lt;span class="TYPE_SYMBOL"&gt;label&lt;/span&gt;=&gt;temp&lt;br /&gt;16   &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;17 &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;18&lt;br /&gt;19 &lt;span class="ST0"&gt;#&lt;/span&gt;&lt;span class="ST0"&gt; Uygulama Sınıfı&lt;/span&gt;&lt;br /&gt;20 &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="caret-color-insert-mode"&gt;MyApp&lt;/span&gt; &lt; &lt;span class="caret-color-insert-mode"&gt;App&lt;/span&gt;&lt;br /&gt;21   &lt;span class="keyword"&gt;def&lt;/span&gt; on_init&lt;br /&gt;22     image = &lt;span class="caret-color-insert-mode"&gt;Image&lt;/span&gt;.new &lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;wxruby.png&lt;/span&gt;&lt;span class="STRING_LITERAL"&gt;"&lt;/span&gt;, &lt;span class="caret-color-insert-mode"&gt;BITMAP_TYPE_PNG&lt;/span&gt;&lt;br /&gt;23     frame = &lt;span class="caret-color-insert-mode"&gt;MyFrame&lt;/span&gt;.new image&lt;br /&gt;24     frame.show&lt;br /&gt;25   &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;26 &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;27&lt;br /&gt;28 &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="caret-color-insert-mode"&gt;__FILE__&lt;/span&gt; == &lt;span class="ST1"&gt;$0&lt;/span&gt;&lt;br /&gt;29   my_app = &lt;span class="caret-color-insert-mode"&gt;MyApp&lt;/span&gt;.new&lt;br /&gt;30   my_app.main_loop&lt;br /&gt;31 &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p style="font-style: normal;" align="justify"&gt;İlk satır shebang satırı, bu satırla Linux işletim sisteminde betik sadece adı yazılıp çalıştırılabiliyor. Frame sınıfının altsınıfını tanımlayarak frame yerleşimini ve kontrolünü daha rahat yapıyoruz. Kendi Frame sınıfımızın üretilmesine orjinalinden ayrı olarak “image” adında bir parametre daha ekliyoruz. Diğer parametreler için default değerler vererek sadece bu parametrenin yeterli olmasını sağlıyoruz. Resmimizi bir &lt;i&gt;StaticBitmap&lt;/i&gt; içinde göstereceğiz. Bu resim boyutlarını alıp Frame nesnemizi üretirken tam bu resmi kapsayacak büyüklükte olmasını sağlıyoruz. Sonra Uygulama sınıfının bir alt sınıfını ve &lt;i&gt;on_init &lt;/i&gt; metodunu tanımlıyoruz. Bir &lt;i&gt;Image&lt;/i&gt; nesnesi üretip web sitesinden indirdiğimiz “wxruby.png” resmini be nesneye yüklüyoruz. Daha sonra standart bir kontrol yapıyoruz , bu betik komut satırından mı çağırıldı yoksa başka bir betik içine mi çağırıldı ?  &lt;/p&gt; &lt;p style="font-style: normal;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_kZL5PIJ9yTM/Sx67LaPlIeI/AAAAAAAAACY/uHA6XrqFOVs/s1600-h/hello.png"&gt;&lt;img style="cursor: pointer; width: 194px; height: 95px;" src="http://3.bp.blogspot.com/_kZL5PIJ9yTM/Sx67LaPlIeI/AAAAAAAAACY/uHA6XrqFOVs/s400/hello.png" alt="" id="BLOGGER_PHOTO_ID_5412969606843539938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-style: normal;" align="justify"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4599780099173049989-1476482739596020218?l=ujk-ujk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ujk-ujk.blogspot.com/feeds/1476482739596020218/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://ujk-ujk.blogspot.com/2009/12/wxruby-ilk-uygulama.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/1476482739596020218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/1476482739596020218'/><link rel='alternate' type='text/html' href='http://ujk-ujk.blogspot.com/2009/12/wxruby-ilk-uygulama.html' title='WxRuby İlk Uygulama'/><author><name>ujk</name><uri>http://www.blogger.com/profile/17064608878054630333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://bp0.blogger.com/_kZL5PIJ9yTM/R7tNwdie6PI/AAAAAAAAAAU/ITLU1BfswtA/S220/bos_gezen.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_kZL5PIJ9yTM/SxlTogBpGJI/AAAAAAAAACQ/h4fFue_wJOE/s72-c/blog3.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4599780099173049989.post-3468877471055051123</id><published>2009-12-01T13:13:00.000-08:00</published><updated>2009-12-03T11:44:55.760-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WxRuby'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='GUI'/><title type='text'>WxRuby Girişi</title><content type='html'>&lt;pre&gt;&lt;span style="color: rgb(0, 51, 0);" class="ST0"&gt;#!/bin/env ruby&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;require &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="STRING_LITERAL"&gt;'rubygems'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;require &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="STRING_LITERAL"&gt;'wx'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;include &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="caret-color-insert-mode"&gt;Wx&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);" class="keyword"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="caret-color-insert-mode"&gt;MyFrame&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt; &lt; &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="caret-color-insert-mode"&gt;Frame&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="keyword"&gt;def&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt; initialize&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="keyword"&gt;super&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="caret-color-insert-mode"&gt;nil&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;,  -&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="INT_LITERAL"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;,  &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="STRING_LITERAL"&gt;"My Frame"&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;,  &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="TYPE_SYMBOL"&gt;:size&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;=&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="caret-color-insert-mode"&gt;Size&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;.new(&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="INT_LITERAL"&gt;300&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;,  &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="INT_LITERAL"&gt;300&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;        panel = &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="caret-color-insert-mode"&gt;Panel&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;.new &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="keyword"&gt;self&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;,  -&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="INT_LITERAL"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;        panel.evt_motion  {|event|on_move(event)}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="caret-color-insert-mode"&gt;StaticText&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;.new panel,  -&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="INT_LITERAL"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;,  &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="STRING_LITERAL"&gt;"Pos : "&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="TYPE_SYMBOL"&gt;:pos&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;=&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="caret-color-insert-mode"&gt;Point&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;.new(&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="INT_LITERAL"&gt;10&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;,  &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="INT_LITERAL"&gt;12&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="ST1"&gt;@pos_ctrl&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt; = &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="caret-color-insert-mode"&gt;TextCtrl&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;.new panel,  -&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="INT_LITERAL"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;,  &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="TYPE_SYMBOL"&gt;:pos&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;=&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="caret-color-insert-mode"&gt;Point&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;.new(&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="INT_LITERAL"&gt;50&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;,  &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="INT_LITERAL"&gt;10&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="keyword"&gt;def&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt; on_move(event)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;        pos = event.get_position&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="ST1"&gt;@pos_ctrl&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;.set_value &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="STRING_LITERAL"&gt;"#{&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;pos.x&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="STRING_LITERAL"&gt;}, #{&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;pos.y&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="STRING_LITERAL"&gt;}"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);" class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);" class="keyword"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="caret-color-insert-mode"&gt;__FILE__&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt; == &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="ST2"&gt;$0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;    app = &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="caret-color-insert-mode"&gt;Wx&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;::&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="caret-color-insert-mode"&gt;App&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;.new&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="keyword"&gt;def&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt; app.on_init&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;        frame = &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="caret-color-insert-mode"&gt;MyFrame&lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;.new&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;        frame.show&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 51, 0);" class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;    app.main_loop&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 0);" class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;Bu program çok az bir kodla görsel bir iş yapıyor. Bir pencere açıyor, mouse hareketini takip edip sonucu ekrana yazıyor.&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_kZL5PIJ9yTM/SxgQzDdF9kI/AAAAAAAAACI/AdQLlQCcIPo/s1600-h/blog1.png"&gt;&lt;img style="cursor: pointer; width: 308px; height: 331px;" src="http://4.bp.blogspot.com/_kZL5PIJ9yTM/SxgQzDdF9kI/AAAAAAAAACI/AdQLlQCcIPo/s400/blog1.png" alt="" id="BLOGGER_PHOTO_ID_5411093421572355650" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;30 satırlık bir program için hiç fena değil. Diğer dillerden birçoğunda bunun 3-4 katı program yazılması gerekirdi. Programcılıkla biraz ilginiz varsa Ruby bilmeseniz bile satırları incelediğinizde biraz anlaşılabilir. Tüm argümanları tahmin edemeyebilirsiniz (mesela '-1' ler ne oluyor?) ama kaba bir fikir sahibi olabilirsiniz.&lt;br /&gt;WxRuby kullanarak hem Ruby dilinin kolaylıklarından hem WxWidgets GUI kütüphanesinin geniş kapsamından yararlanarak masaüstü uygulamala geliştirebilirsiniz.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4599780099173049989-3468877471055051123?l=ujk-ujk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ujk-ujk.blogspot.com/feeds/3468877471055051123/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://ujk-ujk.blogspot.com/2009/12/wxruby-girisi.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/3468877471055051123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/3468877471055051123'/><link rel='alternate' type='text/html' href='http://ujk-ujk.blogspot.com/2009/12/wxruby-girisi.html' title='WxRuby Girişi'/><author><name>ujk</name><uri>http://www.blogger.com/profile/17064608878054630333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://bp0.blogger.com/_kZL5PIJ9yTM/R7tNwdie6PI/AAAAAAAAAAU/ITLU1BfswtA/S220/bos_gezen.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_kZL5PIJ9yTM/SxgQzDdF9kI/AAAAAAAAACI/AdQLlQCcIPo/s72-c/blog1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4599780099173049989.post-484486521499822569</id><published>2008-03-24T12:53:00.000-07:00</published><updated>2008-11-13T03:24:17.755-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programlama'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>Wide Studio Kullanarak Ruby Uygulaması Geliştirmek</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_kZL5PIJ9yTM/R-gIghGevoI/AAAAAAAAAAg/CLIf2KvTII4/s1600-h/snap4.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_kZL5PIJ9yTM/R-gIghGevoI/AAAAAAAAAAg/CLIf2KvTII4/s320/snap4.jpg" alt="" id="BLOGGER_PHOTO_ID_5181400726024142466" border="0"&gt;&lt;/a&gt;&lt;br /&gt;   &lt;blockquote&gt;Sonunda buldum galiba&lt;/blockquote&gt; &lt;a href="http://www.widestudio.org"&gt;Wide Studio&lt;/a&gt; kullanarak windowsa Ruby uygulamasını visual bir dile yakın kolaylıkta yapabiliyorsun. Grafik tasarımları görsel olarak yaptıktan sonra, tüm olaylara ayrı Ruby dosyaları oluşturarak uygulama hazırlamana yardımcı oluyor. Ve en iyisi de sonunda bir dll kullandığı için &lt;a href="http://rubyforge.org/projects/rubyscript2exe/"&gt;Rubyscript2exe&lt;/a&gt; kullanarak uygulamanı exe dosyasına çevirebilirsin. Bu konuda bir ön araştırma yapıp &lt;a href="http://www.debugmode.com/wink/"&gt;Wink&lt;/a&gt; ile bir &lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;getting started&lt;/span&gt;&lt;/span&gt; dosyası yapmaya çalıştım o da burda: &lt;br /&gt;&lt;br /&gt;&lt;a href="http://cid-5f235c21f5e31237.skydrive.live.com/self.aspx/Ortak/ws_hello.zip"&gt;ws_hello.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Daha devamı olacak inşallah , şimdilik buraya kadar. Kolay gelsin.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4599780099173049989-484486521499822569?l=ujk-ujk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ujk-ujk.blogspot.com/feeds/484486521499822569/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://ujk-ujk.blogspot.com/2008/03/wide-studio-kullanarak-ruby-uygulamas.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/484486521499822569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/484486521499822569'/><link rel='alternate' type='text/html' href='http://ujk-ujk.blogspot.com/2008/03/wide-studio-kullanarak-ruby-uygulamas.html' title='Wide Studio Kullanarak Ruby Uygulaması Geliştirmek'/><author><name>ujk</name><uri>http://www.blogger.com/profile/17064608878054630333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://bp0.blogger.com/_kZL5PIJ9yTM/R7tNwdie6PI/AAAAAAAAAAU/ITLU1BfswtA/S220/bos_gezen.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_kZL5PIJ9yTM/R-gIghGevoI/AAAAAAAAAAg/CLIf2KvTII4/s72-c/snap4.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4599780099173049989.post-4194269270112219231</id><published>2008-02-23T09:22:00.000-08:00</published><updated>2008-02-23T09:33:22.586-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programlama'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>Ruby On Rails sitemin giriş yazısı</title><content type='html'>Merhaba ben elektronik mühendisiyim. Ben mezun olduğumda okulda bile bilgisayar yoktu. Ama mecbur mesleğimi icra etmeye uğraşırken kullanmasını öğrendim. Ben çoğunlukla endüstriyel kontrol programları yazıyorum. PLC ve SCADA programları esas uzmanlık konum. Bilgisayar programı olarak çok basit hesap kitap işleri yapan programlar lazım oluyor onları da visual basic ile yapıyordum. Teknoloji geliştikçe bizim işimiz sadece kontrol programları yazmaktan çıktı artık veri toplamak çok önemli bir hale geldi. Birkaç senedir veritabanları ile çok haşır neşir olmaya başladık. Üretimden bir çok veriyi yönetime iletebilmek için veri tabanlarına atıyoruz sonrada bunları raporlayacak programları bilgisayar mühendisi arkadaşlar yazıyor. Aynı zaman da bir yönetici olduğum için çalışanların yaptıkları işlerin raporlarının toplanabilmesi için hazır bir program aradım. Ama hiç bir program bize uymadı kağıtlara yazılan şeyleri bir türlü elektroniğe dökemedik. Son bir senedir database üzerinden internet sayfası olarak erişim sayfalarını basitçe yapabileceğim bir program arıyorum. Daha önce access ile bir şeyler yaptım ama işimiz gereği elemanlarımız çok zaman şirket dışında müşterimiz olan fabrikalarda bulunuyorlar. Bu durumda yaptıkları işler hakkında rapor hazırlamak kayıt giremedikleri için zor oluyor. Araştırırken birçok ilginç program buldum.&lt;br /&gt;&lt;br /&gt;           En iyilerinden biri &lt;a href="https://sourceforge.net/projects/tersus/"&gt;Tersus&lt;/a&gt; açık kod olmasına rağmen çok paralı programı yer geçer. Ama bizim ülkemizden bu tip yazılımlara katılan pek olmayınca Türkçe karakter yüzünden hayli aksaklık yaşadım ama insana programcılığın temellerini öğretmesi ve kod yazmadan program yazılması hemde internet sayfaları hazırlaması çok zevkli bir program.&lt;br /&gt;&lt;br /&gt;             Başka ne var, mesela &lt;a href="http://www.yessoftware.com/"&gt;CodeCharge&lt;/a&gt; çok iyi ama paralı. Database tablolarınızı hazırlayın bağlantılarını yapın sonra bu programa haydi deyin tüm database'i web sayfası olarak veri girme, arama, listeleme gibi tüm ilk planda lazım olacakları 3 dakikada hazırlayın. İyi yanı asp veya php biliyorsanız çok daha geliştirebilirsiniz.&lt;br /&gt;&lt;br /&gt;            Exe programlar hazırlamak isterseniz ve kod yazmak istemiyorsanız tavsiyem &lt;a href="http://www.limnor.com/"&gt;Limnor&lt;/a&gt; size basit bir ilke koyuyor. İşi kim yapar? Nasıl yapar? Ne zaman yapar? Tüm yapmanız gereken bu soruları cevaplayıp bunu programın anlayacağı şekilde mouse tıklaması haline getirmek. Bu programla çok şey yaptım. Bu programı ücretsiz kullanabilirsiniz ama ticari bir program yaparsanız satın almanız gerekir. Ayrıca bu program ile çok kolay reklam CD veya kiosk uygulaması yapılır. &lt;br /&gt;&lt;br /&gt;          Ve nasip nereyi buldu. 2006 yazında Karaman'da bir fabrika kuruyorduk. Yabancı mühendisler de var. Tercümanları Karaman'dan uzun saçlı Mustafa. Boş zamanında yanımızda wireless'dan internette geziyor. Bir gün bana "abi bak sen programcısın burda ilginç bir şeyler var istersen oku" dedi. Çok işim vardı hemen önündeki ekranın bir fotoğrafını çektim ve "sonra bir bakarım" dedim. Anca fırsat oldu Aralık ayında resimleri incelerken gördüm. Interneti açtım adresi girdim . &lt;a href="http://gettingreal.37signals.com/toc.php"&gt;37signals&lt;/a&gt; diye bir yer program nasılyazılır anlatıyor. Biraz okudum adamlar tecrübeli çok doğru tesbitlerde bulunmuşlar. Birçok ilkelerini ben de uyguluyordum zaten. Okumanızı kesinlikle tavsiye ederim. Bir programcı için best seller olması gereken bir yazı. Merak ettim bu adamlar hangi dilde program yazıyor diye. "&lt;a href="http://ruby-lang.org"&gt;Ruby&lt;/a&gt;" diye bir dil. İlk defa duydum Japon bir arkadaş çıkarmış sağolsun ve açık kaynak, yani hayrına yapmış, sağolsun. Bu arkadaşlar da bu Ruby dilini alıp ona bir kütüphane çakmışlar "&lt;a href="http://www.rubyonrails.com/"&gt;Ruby On Rails&lt;/a&gt; " çıkmış. Dökümanı zor anladım çünkü ingilizcem kıt. Onun için bu sayfaları yazdım. Çünkü bunu herkesin bilmesi lazım. İşinizi görecek böyle basit ve eğlenceli bir şey var ve bedava. Keşke birileride çıkıp türkçe olarak böyle kolay kullanılır bir programlama dili hazırlasa da biz de kasılsak biraz. Arkadan gelecek RubyOnRails etiketli yazılarda benim neler yaptığımın hikayesini inceleyin. Belki siz de seversiniz bu dili kullanmayı.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4599780099173049989-4194269270112219231?l=ujk-ujk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ujk-ujk.blogspot.com/feeds/4194269270112219231/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://ujk-ujk.blogspot.com/2008/02/ruby-on-rails-sitemin-giri-yazs.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/4194269270112219231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/4194269270112219231'/><link rel='alternate' type='text/html' href='http://ujk-ujk.blogspot.com/2008/02/ruby-on-rails-sitemin-giri-yazs.html' title='Ruby On Rails sitemin giriş yazısı'/><author><name>ujk</name><uri>http://www.blogger.com/profile/17064608878054630333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://bp0.blogger.com/_kZL5PIJ9yTM/R7tNwdie6PI/AAAAAAAAAAU/ITLU1BfswtA/S220/bos_gezen.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4599780099173049989.post-1877905865355229378</id><published>2008-02-19T13:47:00.000-08:00</published><updated>2008-02-19T14:02:33.321-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='RubyOnRails'/><title type='text'>1 numaralı yazı</title><content type='html'>Çok sıkıcı bir günün akşamında aklıma bir blog açmak geldi. Daha önce bir web sayfası denemem oldu &lt;a href="http://ujk.t35.com/"&gt;ujk.t35.com&lt;/a&gt;. Bu sayfada RubyOnRails ile yaptığım bir programı anlatmıştım. Ama ordan bir feedback alamayınca bir blog sitesinde yazsam belki daha çok kişiye ulaşırım diye düşündüm.&lt;br /&gt;      &lt;br /&gt;Bu sitede amacım bildiklerimi paylaşmak. Tabi benimle aynı konularla ilgilenen başka insanlara da ulaşmak istiyorum. Önce web sayfamdan buraya transfer yapmayı, daha sonra başka konulara girmeyi düşünüyorum.&lt;br /&gt;      &lt;br /&gt;Şimdilik bu kadar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4599780099173049989-1877905865355229378?l=ujk-ujk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ujk-ujk.blogspot.com/feeds/1877905865355229378/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://ujk-ujk.blogspot.com/2008/02/1-numaral-yaz.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/1877905865355229378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4599780099173049989/posts/default/1877905865355229378'/><link rel='alternate' type='text/html' href='http://ujk-ujk.blogspot.com/2008/02/1-numaral-yaz.html' title='1 numaralı yazı'/><author><name>ujk</name><uri>http://www.blogger.com/profile/17064608878054630333</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://bp0.blogger.com/_kZL5PIJ9yTM/R7tNwdie6PI/AAAAAAAAAAU/ITLU1BfswtA/S220/bos_gezen.JPG'/></author><thr:total>0</thr:total></entry></feed>
