Kodbank İndir

! CODEBANK 2012 !

İNDİRMEK&DETAYLI BİLGİ ALMAK İÇİN BURAYI TIKLAYINIZ.

ÖNEMLİ AÇIKLAMA: MUTLAKA OKUYUNUZ!

Gönderen Konu: Çalışma Anında Bileşen Oluşturmak ve Takla Attırmak...  (Okunma sayısı 2921 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı cemaliozan

  • Kıdemli Üye
  • *****
  • İleti: 230
  • Rep: +4/-3
  • Cinsiyet: Bay
  • Kodlarım, canlarım
    • Gerçek Sevgi Portalı
   Ah fatih ah... Ne olurdu biraz zaman ayırıp şu formun editörünü biraz daha kullanışlısıyla değiştirseydinde bende rahat rahat yazsaydım. :)

   WIN32 platformu için herhangi bir OOP (Nesne yönelimli programlama) diliyle uygulama geliştirenler bilir. Programcının en yaratıcı olduğu an yeni bir nesne tasarlarkenki anıdır. Elinize bir ebeveyn nesne alırsınız. Ondan yeni bir çocuk yapar nufusunuza geçirirsiniz. Tabiki yeni nesnenizin eskisine oranla daha fazla özelliği ve daha fazla metodu olacaktır. Aksi halde yeniye ne hacet ?

  Klasik yöntem merkezli (Cobol, pascal,clipper vb.) programlama dillerinden olay merkezli OOP (Java,Delphi,C++ vb.) dillerine geçerken en çok zorlandığım yerdi yeni bir nesne tasarımı. Birde bu işin suyunu çıkaran tasarımı kontrol edecek test modüllerini yazmanın zaman almasıydı. Neyse en sonunda ucundan kıyısından bir şeyler öğrendim.

  Bırakın yeni bir nesne tasarımını, mevcut bir nesneyi çalışma anında (RUNTIME) oluşturmak, işi biteni sepetlemek bile ayrı bir dertti. Bu hızlı uygulama geliştirme (Rapid application development) dilleri icat oldu mertlik bozuldu.

  İşte bu yazıda ASP.NET tabanında çalışma anında nesne yaratıp kullanmayı tarif edeceğim dilim döndüğünce. Tabiki diğer .NET dillerinde anlatılmışı var, fakat benim burada örnekleyerek anlatacağım tamamen benim kişisel keşif ve tecrübelerimin Delphi ile gerçeklenmiş sonucudur. Sözün bu noktasında bu yazıyı okuyan tüm okuyucuların huzurunda sitemizin medarı iftarı Türkiyede yazılmış ilk delphi ile ASP.NET uygulamaları kitabının yazarı Fatih kardeşime bir kez daha teşekkür etmek istiyorum. Çünkü birazdan anlatacağım algoritmanın temelini onun kitabında satır aralarındaki ip uçlarını birleştirerek oluşturdum. Özellikle ilk fırsat bulduğumda ayrı bir başlıkta detaylı bir VIEWSTATE sunumu yapacağım sizlere.

   Çalışma Anında Neden Bileşen Oluşturalım ki ? Tasarım Anı Yetmiyor mu?

   Maalesef tasarım anının yetmediği çok zaman oluyor. Örneğin çoktan seçmeli bir test sitesi tasarladığınızı varsayalım. Böyle bir sitede klasik yapının yanında SORULAR ve SORU SEÇENEKLERİ olması kaçınılmaz. Aynı soru bukletinde yer alan ve bir veri tabanında kayıtlı olan aşağıdaki soruları ele alalım.

  Soru 1 : Sitemizi nasıl buluyorsunuz ?

          Seçenek 1 : Çok iyi
          Seçenek 2 : Fena değil
          Seçenek 3 : Walla ben bulmuyorum, benim tarayıcı kafayı yemiş ikide bir kendiliğinden açılıyor siteniz

  Soru 2 : Sitemizde en çok takip ettiğiniz köşe yazarı aşağıdakilerden hangisidir ?

         Seçenek 1 : Tabiki Fatih Hoca
         Seçenek 2 : En büyük Goca Türk başka büyük yok
         Seçenek 3 : Babahayati baba adam baba yazar
         Seçenek 4 : Akrep Kral
         Seçenek 5 : Cemoli
         Seçenek 6 : Yalnız ben, benden daha iyi yazar varmola ?

   Gördünüz değil mi yapıyı. Biraz veri tabanı deseninden bahsedeyim. Sorular bir tabloda, Seçeneklerde sorular tablosuyla tek yönlü ilişkisel olarak bağlı ve ayrı tabloda tutuluyor.

    Soru 3 : Peki böyle bir sistemde ne tür web bileşeni/bileşenleri kullanmalıyız ?

       Seçenek 1 : RadioButton
       Seçenek 2 : RadioButtonList
       Seçenek 3 : TextBox
       Seçenek 4 : Image

   Siz 3 ncü soruyu cevaplaya durun. Ben olaya başka bir boyut kazandırıyım.

    Soru 4 : Bu makalenin sonu nasıl bitmeli ?

       Seçenek 1 : Bu makale bitmesede olur
       Seçenek 2 : Filmin sonunu görebileceğimizi sanmıyorum
       Seçenek 3 : Diğer - (Lütfen aşağıdaki kutuya diğer nedir onu giriniz...)

   Bu makale epey uzun olacak. Bu yüzden fırsat buldukça editleyerek devam edeceğim. Ancak size bir ipucu vereyim. Bu yazıya konu olan bir site http://www.kisiliktest.com.

   Bu sitenin grafik arayüzü sizi aldatmasın. Her şeyden önce Delphi ile yazılmıştır. Arkasında çok çok dinamik bir kod sistemi vardır. Bu sitedeki hemen hemen her bileşen çalışma anında yaratılmaktadır.

   Bu nedenle bahse konu siteyi yazımı takip edeceklere inceleme ödevi olarak veriyim. Ne yapmışım, nasıl yazmışım. Fikirlerinizi beyan edin. Bende bu yazıda bu sistemi anlatmaya devam edeyim. Devamı var...
« Son Düzenleme: 07 Ağustos 2007 21:13:12 by cemaliozan »
www.teksevgi.com - Tamamı BDS 2006 ile yazıldı..

Yaşamaya Değer Bir Hayattan, Sevmeye Değer Bir Aşktan, Dostluğa Değer Bir Arkadaşlıktan Asla Vazgeçmeyin...

Çevrimdışı hayati

  • Administrator
  • *****
  • İleti: 860
  • Rep: +19/-3
  • Cinsiyet: Bay
Ynt: Çalışma Anında Bileşen Oluşturmak ve Takla Attırmak...
« Yanıtla #1 : 08 Ağustos 2007 18:36:57 »
Cemali abi, webden (programcılığından) hiç anlamayan biri olarak ilk cevabı yazan ben olmak istemezdim ama adıgeçen site gerçekten delphi ile yapılmışsa ki bunu iddia ettiğine göre yapılmış, web konusu hobi halkama iyice girmeye başladı, zaten Oktay abi nin IW'i, sizin (sen ve fatih) ASP.NET iniz, benim PHP merakım derken Web in kıyısında köşesinde dolanıp duruyordum, lâkin bu kisiliktest sitesinin delphi ile yapılmıs olması daha dogrusu delphinin buna muktedir olması beni gerçekten cezbetti. yakında google veya youtube gibi bir bomba patlatırsam (cümle düşük oldu o projeler bana ait değil) trilyonyalarımı (YTL cinsinden) sayarken emin olun sizleri anacağım, anmakla kalmayıp kıyakta yapacağım.
demek istiyorumki makale için teşekkürler
Olsa dahi tenimin kıl biten her yeri bir dil, güçsüzüm şükretmeye,şükrüm binde bir bile değil (İ.R.)

Çevrimdışı akrep

  • Global Moderatör
  • *****
  • İleti: 1.242
  • Rep: +27/-13
  • Cinsiyet: Bay
Ynt: Çalışma Anında Bileşen Oluşturmak ve Takla Attırmak...
« Yanıtla #2 : 20 Eylül 2007 18:00:41 »
Cemali hocam bileşeni nasıl oluşturup takla attıracaksın anlamadık ama bize yeteri kadar takla attırdın sanki :::) Artık makaleye devam etme zamanı gelmedi mi? Bir textbox'u nasıl çalışma zamanında oluşturacağız? ayrıca benim özellikle merak ettiğim bir konu, html kontrollerini (mesela HtmlInput) çalışma zamanında oluşturabilir miyiz?

Verdiğin linkteki site ilk zamanlar farklıydı, şu anda farklı sanki, testlerden birşey anlaşılmıyor, sanıyorum üzerinde çalışıyorsun. Ama ilk makale parçasındaki söylemek istediklerin anlaşıldı sanıyorum.. Devamını bekliyoruz, kolay gelsin.
Tomurcuk derdinde olmayan ağaç, odundur - Necip Fazıl Kısakürek

Çevrimdışı cemaliozan

  • Kıdemli Üye
  • *****
  • İleti: 230
  • Rep: +4/-3
  • Cinsiyet: Bay
  • Kodlarım, canlarım
    • Gerçek Sevgi Portalı
Çalışma Anında Bileşen Oluşturmak ve Takla Attırmak...-2-
« Yanıtla #3 : 20 Eylül 2007 21:14:35 »
Önce kodları vereyim, gözleriniz kodlara alışsın. Bilaharede en kısa zamanda konuyu irdeleyelim.

Soruların basıldığı user control sayfasının kodları...

Kod: ASP
  1. <%@ Control Language="c#" AutoEventWireup="false" Codebehind="sorular.pas" Inherits="sorular.TWebUserControl_Sorular"%>
  2. <script>
  3. <!--
  4.           // Geri Sayim
  5.           function _sayac(no,basla){
  6.                  var div   = document.getElementById(no);
  7.                  div.sayi  = basla;
  8.                  div.sayim = function(){
  9.                         if(div.sayi >= 0){
  10.                            div.innerHTML = 'Kalan Süre : '+ div.sayi-- +' Sn.';
  11.                            setTimeout('document.getElementById(\''+div.id+'\').sayim()',1000);
  12.                         }else
  13.                         {
  14.                          window.location="default.aspx";
  15.                         }
  16.                  }
  17.                  div.sayim();
  18.           }
  19. -->
  20. </script>
  21.  
  22. <style type="text/css">.fixme {
  23.         RIGHT: 250px; BOTTOM: 50px; POSITION: absolute
  24. }
  25. UNKNOWN {
  26.         POSITION: fixed
  27. }
  28. </style>
  29. <!--[if gte IE 5.5]>
  30. <![if lt IE 7]>
  31. <style type="text/css">
  32. div#fixme {
  33.   /* IE5.5+/Win - this is more specific than the IE 5.0 version */
  34.   right: auto; bottom: auto;
  35.   left: expression( ( -20 - fixme.offsetWidth + ( document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth ) + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );
  36.   top: expression( ( -10 - fixme.offsetHeight + ( document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );
  37. }
  38. </style>
  39. <![endif]>
  40. <![endif]-->
  41.  
  42. <script type="text/javascript">
  43. <!--
  44. var depth = 6 // in pixels
  45.  
  46. // addLoadEvent created by: Simon Willison
  47. // http://simon.incutio.com/archive/2004/05/26/addLoadEvent
  48. function addLoadEvent(func) {
  49.   var oldonload = window.onload;
  50.   if (typeof window.onload != 'function') {
  51.         window.onload = func;
  52.   } else {
  53.         window.onload = function() {
  54.           if (oldonload) {
  55.                 oldonload();
  56.           }
  57.           func();
  58.         }
  59.   }
  60. }
  61.  
  62. addLoadEvent(function() {
  63.  
  64. // Created by: Michael Burt
  65. // http://galaxydefense.ga.funpic.org/
  66. var a = document.all ? document.all : document.getElementsByTagName('*');
  67. for (var i = 0;i < a.length;i++) {
  68.         if (a[i].className == "shadow") {
  69.                 for (x = 0;x < depth;x++) {
  70.                         var newSd = document.createElement("DIV")
  71.                         newSd.className = "shadow2"
  72.                         newSd.style.background = a[i].id
  73.                         newSd.style.width = a[i].offsetWidth + "px"
  74.                         newSd.style.height = a[i].offsetHeight + "px"
  75.                         newSd.style.left = a[i].offsetLeft + x + "px"
  76.                         newSd.style.top = a[i].offsetTop + x + "px"
  77.                         document.body.appendChild(newSd)
  78.                         }
  79.                 }
  80.         }
  81. }
  82. );
  83.  -->
  84. </script>
  85.  
  86. <style>.shadow {
  87.         BORDER-RIGHT: silver 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: silver 1px solid; DISPLAY: inline; PADDING-LEFT: 2px; Z-INDEX: 100; BACKGROUND: white; PADDING-BOTTOM: 2px; FONT: 10pt arial; BORDER-LEFT: silver 1px solid; PADDING-TOP: 2px; BORDER-BOTTOM: silver 1px solid; POSITION: relative
  88. }
  89. .shadow2 {
  90.         Z-INDEX: 10; FILTER: alpha(Opacity=15); OVERFLOW: hidden; POSITION: absolute; opacity: 0.1; moz-opacity: 0.2; khtml-opacity: 0.1
  91. }
  92. </style>
  93.  
  94. <div id="div1" style="FONT-WEIGHT: bold; FONT-SIZE: 14px" class="shadow2 fixme"></div>
  95. <div id="Bitir" style="TEXT-ALIGN: center">
  96.   <ASP:Button id="Button1" runat="server" text="Değerlendir" enableviewstate="False" borderstyle="Solid" borderwidth="1px" bordercolor="#C04000" backcolor="#FFE0C0"></ASP:Button><br>
  97. </div>
  98.           <div class="sidebarbox-border bg-red02" style="WIDTH: 100%">
  99.                 <div class="sidebarbox-title-shading bg-red05" style="WIDTH: 100%; TEXT-ALIGN: center">
  100.                   <ASP:Label id="Label_GrupAdi" runat="server" enableviewstate="False" cssclass="txt-white yazi14">***</ASP:Label>
  101.                 </div>
  102.                 <p>
  103.                   Değerlendirme için tüm soruların eksiksiz cevaplanması zorunludur...
  104.                 </p>
  105.           </div>
  106.  
  107. <div id="baslik" style="POSITION: fixed; TEXT-ALIGN: center">
  108.         <ASP:Label id="Label_SureScript" runat="server" enableviewstate="False">Süre Yok</ASP:Label>
  109. </div>
  110.  

Buda code-behind tarafı....

Kod: Delphi
  1. unit sorular;
  2.  
  3. interface
  4.  
  5. uses System.Data, System.Drawing, System.Web, System.Web.UI,
  6.      System.Web.UI.WebControls, System.Web.UI.HtmlControls,
  7.      System.Data.OleDb,KTestSabitler;
  8.  
  9. type
  10.     /// <summary>
  11.     /// Summary description for WebUserControl1.
  12.     /// </summary>
  13.   TWebUserControl_Sorular = class(System.Web.UI.UserControl)
  14.   {$REGION 'Designer Managed Code'}
  15.   strict private
  16.     procedure InitializeComponent;
  17.     procedure Button1_Click(sender: System.Object; e: System.EventArgs);
  18.   {$ENDREGION}
  19.   strict private
  20.     procedure Page_Load(sender: System.Object; e: System.EventArgs);
  21.   strict protected
  22.     Label_SureScript: System.Web.UI.WebControls.Label;
  23.     Button1: System.Web.UI.WebControls.Button;
  24.     Label_GrupAdi: System.Web.UI.WebControls.Label;
  25.     procedure OnInit(e: System.EventArgs); override;
  26.   private
  27.     FRBLSayisi       : Int32;
  28.     FMetinKutuSayisi : Int32;
  29.     FES              : Integer; // Erişim Seviyesi
  30.     FDTipi           : String; // Değerlendirme Tipi
  31.     procedure SecenekleriAyarla(const GrupID, SoruID: String; _Panel: Panel);
  32.     procedure SoruveSecenekleriBas(const GrupID: String);
  33.     procedure SetGrupSureSayaci(const GrupID: String);
  34.     procedure SetGrubESDT(const GrpID: String);
  35.     function MukerrerCevaplamaVarmi(const GrpID,UyeID: String): Boolean;
  36.     procedure CevaplariKaydet(Komutcu: OleDbCommand; Cevap,SecenekID, Puan, SoruID,  GrpID, UyeID,NitelikID: String);
  37.     { Private Declarations }
  38.   public
  39.     { Public Declarations }
  40.   end;
  41.  
  42. implementation
  43.  
  44. procedure TWebUserControl_Sorular.SecenekleriAyarla(Const GrupID,SoruID:String;_Panel : Panel);
  45.  Var
  46.     RBL                 : RadioButtonList;
  47.     RBLItem             : ListItem;
  48.     MetinBox            : TextBox;
  49.     Baglantim           : OleDbConnection;
  50.     SecenekKomutcu      : OleDbCommand;
  51.     SecenekOkuyucu      : OleDbDataReader;
  52.     Tbl                 : Table;
  53.     Tblrw               : TableRow;
  54.     TblCl               : TableCell;
  55.     Lbl                 : &Label;
  56.     RBLOlusturuldu      : Boolean;
  57.     ZorunluAlan         : RequiredFieldValidator;
  58. begin
  59.   try
  60.     Baglantim                  := OleDbConnection.Create('Provider=microsoft.Jet.OLEDB.4.0;'+
  61.                                                    'data source='+server.MapPath(kTestSabitler.VT));
  62.     SecenekKomutcu             := OleDbCommand.Create;
  63.     SecenekKomutcu.Connection  := Baglantim;
  64.  
  65.     SecenekKomutcu.CommandText := 'SELECT * from ktestsecenek where pasif=false and grup_id='+GrupID+' and soru_id='+SoruID;
  66.     Baglantim.Open;
  67.     SecenekOkuyucu        := SecenekKomutcu.ExecuteReader;
  68.     Tbl                   := Table.Create;
  69.     Tbl.CellPadding       := 0;
  70.     Tbl.CellSpacing       := 0;
  71.     Tbl.CssClass          := 'secenektablosu';
  72.     TblRw                 := TableRow.Create;
  73.     TblCl                 := TableCell.Create;
  74.     TblCl.CssClass        := 'secenekhucresi';
  75.     RBLOlusturuldu        := False;
  76.     While SecenekOkuyucu.Read do
  77.     BEGIN
  78.       //******** Seçenek RBL ITEM ise **********//
  79.       if (SecenekOkuyucu.Item['metin'].ToString = 'False') or (SecenekOkuyucu.Item['metin'].ToString = '0') then
  80.       begin
  81.         if Not RBLOlusturuldu then
  82.         begin
  83.           RBLOlusturuldu        := True;
  84.           //* Radiobuttonlist sayısını bir artır *//
  85.           Inc(FRBLSayisi);
  86.           RBL                   := RadioButtonList.Create;
  87.           RBL.CssClass          := 'radiosecenekleri';
  88.           RBL.ID                := 'RBL'+FRBLSayisi.ToString;
  89.           RBL.EnableViewState   := True;
  90.           TblCl.Controls.Add(RBL);
  91.           Tblrw.Controls.Add(TblCl);
  92.           Tbl.Controls.Add(TblRw);
  93.  
  94.           ZorunluAlan                   :=  RequiredFieldValidator.Create;
  95.           ZorunluAlan.ErrorMessage      := '<img src="img/dikkat1.gif" title="Zorunlu Alan" Alt="Eksik" border="0"/>';
  96.           ZorunluAlan.ControlToValidate := 'RBL'+FRBLSayisi.ToString;
  97.           ZorunluAlan.ID                := 'ZR'+FRBLSayisi.ToString;
  98.  
  99.           //* Zorunlu Alan Hücresi *//
  100.           TblCl                 := TableCell.Create;
  101.           TblCl.VerticalAlign   := VerticalAlign.Middle;
  102.           TblCl.CssClass        := 'zorunlualanhucresi';
  103.           TblCl.Controls.Add(ZorunluAlan);
  104.           Tblrw.Controls.Add(TblCl);
  105.           Tbl.Controls.Add(TblRw);
  106.         end;
  107.  
  108.         RBLItem            := ListItem.Create;
  109.         if SecenekOkuyucu.Item['resim'].ToString <> '' then
  110.            RBLItem.Text    := SecenekOkuyucu.Item['secenek'].ToString+'<br>'+SecenekOkuyucu.Item['resim'].ToString
  111.         else
  112.            RBLItem.Text    := SecenekOkuyucu.Item['secenek'].ToString;
  113.  
  114.         RBLItem.Value := 'R'+SecenekOkuyucu.Item['id'].ToString+'_'+SecenekOkuyucu.Item['puan'].ToString+'['+SoruID+']'+GrupID+'('+SecenekOkuyucu.Item['nitelik_id'].ToString+')';
  115.         RBL.Items.Add(RBLItem);
  116.       end
  117.       //******** Seçenek RBL ITEM ise Sonu **********//
  118.       //******* Seçenek Metinse ********************//
  119.       else
  120.       if (SecenekOkuyucu.Item['metin'].ToString = 'True') or (SecenekOkuyucu.Item['metin'].ToString = '1') then
  121.       begin
  122.         Inc(FMetinKutuSayisi);
  123.         Lbl                   := &Label.Create;
  124.         Lbl.ID                := 'Lbl'+FMetinKutuSayisi.ToString;
  125.         Lbl.EnableViewState   := False;
  126.         Lbl.CssClass          := 'metinkutusuetiketi';
  127.  
  128.         if SecenekOkuyucu.Item['resim'].ToString <> '' then
  129.            Lbl.Text          := SecenekOkuyucu.Item['secenek'].ToString+'<br>'+SecenekOkuyucu.Item['resim'].ToString
  130.         else
  131.            Lbl.Text          := SecenekOkuyucu.Item['secenek'].ToString;
  132.  
  133.         //* Etiketin satırı *//
  134.         TblRw             := TableRow.Create;
  135.         Tblcl             := TableCell.Create;
  136.         Tblcl.VerticalAlign := VerticalAlign.Bottom;
  137.         Tblcl.CssClass    := 'metinkutusuetiketi';
  138.         Tblcl.Controls.Add(Lbl);
  139.         Tblrw.Controls.Add(TblCl);
  140.         Tbl.Controls.Add(Tblrw);
  141.  
  142.         //* Zorunlu Alan Hücresi *//
  143.         TblCl                 := TableCell.Create;
  144.         TblCl.CssClass        := 'zorunlualanhucresi';
  145.         TblCl.Text            := '&nbsp;';
  146.         Tblrw.Controls.Add(TblCl);
  147.         Tbl.Controls.Add(TblRw);
  148.  
  149.         MetinBox                      := TextBox.Create;
  150.         MetinBox.ID                   := 'M'+FMetinKutuSayisi.ToString;
  151.         MetinBox.EnableViewState      := True;
  152.  
  153.         ZorunluAlan                   :=  RequiredFieldValidator.Create;
  154.         ZorunluAlan.ErrorMessage      := '<img src="img/dikkat1.gif" title="Zorunlu Alan" Alt="Eksik" border="0"/>';
  155.         ZorunluAlan.ControlToValidate := 'M'+FMetinKutuSayisi.ToString;
  156.         ZorunluAlan.ID                := 'ZM'+FMetinKutuSayisi.ToString;
  157.  
  158.  
  159.         //* Metin Kutusunun Hangi grup, soru, seçenek ve puanlamaya tabii olduğunu tutuyoruz *//
  160.         ViewState.Item['M'+FMetinKutuSayisi.ToString]  := SecenekOkuyucu.Item['id'].ToString+'_'+SecenekOkuyucu.Item['puan'].ToString+'['+SoruID+']'+GrupID+'('+SecenekOkuyucu.Item['nitelik_id'].ToString+')';
  161.         MetinBox.CssClass := 'metinkutusu';
  162.         TblRw             := TableRow.Create;
  163.         TblCl             := TableCell.Create;
  164.         TblCl.CssClass    := 'metinkutusuhucresi';
  165.         Tblcl.Controls.Add(MetinBox);
  166.         Tblrw.Controls.Add(TblCl);
  167.         Tbl.Controls.Add(Tblrw);
  168.  
  169.         //* Zorunlu Alan Hücresi *//
  170.         TblCl                 := TableCell.Create;
  171.         TblCl.CssClass        := 'zorunlualanhucresi';
  172.         TblCl.Controls.Add(ZorunluAlan);
  173.         Tblrw.Controls.Add(TblCl);
  174.         Tbl.Controls.Add(TblRw);
  175.        end;
  176.       //******* Seçenek Metinse Sonu ***************//
  177.     END;
  178.     //* Nesnelere Erişim Sayaçlarını Aklımızda Tutuyoruz *//
  179.     ViewState.Item['MetinKutusuSayisi'] := FMetinKutuSayisi.ToString;
  180.     ViewState.Item['RBLSayisi']         := FRBLSayisi.ToString;
  181.     //* Ayraç koyuyoruz *//
  182.     TblRw             := TableRow.Create;
  183.     TblCl             := TableCell.Create;
  184.     TblCl.Text        := '<img src="img/satirayraci1.gif" border="0" />';
  185.     TblCl.CssClass    := 'sorulararasi';
  186.     Tblrw.Controls.Add(TblCl);
  187.     Tbl.Controls.Add(Tblrw);
  188.  
  189.     _Panel.Controls.Add(Tbl);
  190.   finally
  191.     SecenekKomutcu.Free;
  192.     Baglantim.Close;
  193.     Baglantim.Free;
  194.   end;
  195. end;
  196.  
  197. procedure TWebUserControl_Sorular.SetGrupSureSayaci(Const GrupID:String);
  198.   Var
  199.     Baglantim   : OleDbConnection;
  200.     Komutcu     : OleDbCommand;
  201.     Okuyucu     : OleDbDataReader;
  202.     Sure        : Int32;
  203. begin
  204.   try
  205.     Sure                := 0;
  206.     Baglantim           := OleDbConnection.Create('Provider=microsoft.Jet.OLEDB.4.0;'+
  207.                                                    'data source='+server.MapPath(kTestSabitler.VT));
  208.     Komutcu             := OleDbCommand.Create;
  209.     Komutcu.Connection  := Baglantim;
  210.  
  211.     Komutcu.CommandText := 'SELECT sure,grupadi from ktestgrup where pasif=0 and id='+GrupID;
  212.     Baglantim.Open;
  213.     Okuyucu             := Komutcu.ExecuteReader;
  214.     if Okuyucu.Read then
  215.     begin
  216.       Sure              := Okuyucu.GetInt32(0);
  217.       Label_GrupAdi.Text:= Okuyucu.GetString(1);
  218.     end;
  219.  
  220.     if Sure > 0 then
  221.        Label_SureScript.Text :='<script>_sayac(''div1'','+Convert.ToString(Sure*60)+');</script>';
  222.   finally
  223.     Komutcu.Free;
  224.     Baglantim.Close;
  225.     Baglantim.Free;
  226.   end;
  227. end;
  228.  
  229. procedure TWebUserControl_Sorular.CevaplariKaydet(Komutcu:OleDbCommand;Cevap,SecenekID,Puan,SoruID,GrpID,UyeID,NitelikID :String);
  230. begin
  231.   Komutcu.CommandText := 'INSERT INTO ktestcevaplar (uye_id, grup_id, soru_id, secenek_id, nitelik_id,puan, cevap,pasif) VALUES('+
  232.                          UyeID+','+
  233.                          GrpID+','+
  234.                          SoruID+','+
  235.                          SecenekID+','+
  236.                          NitelikID+','+
  237.                          Puan+', "'+
  238.                          Duzelt(Cevap)+'",0)';
  239.   Komutcu.ExecuteNonQuery;
  240. end;
  241.  
  242. procedure TWebUserControl_Sorular.Button1_Click(sender: System.Object; e: System.EventArgs);
  243.  Var
  244.    RBL            : RadioButtonList; //Seçenek Listesi
  245.    RS,MS        : String;
  246.    i              : Integer;
  247.    RBI            : String; // RBL'ye atanan ismi işaret etmek için
  248.    MBI            : String; // MetinBox'a atanan ismi işaret etmek için
  249.    MBW            : String; // İlgili metinbox viewstate inde tutulan Seçenek temel bilgilerine işaret etmek için
  250.    SecenekID,
  251.    SoruID,
  252.    Puan,
  253.    GrpID,
  254.    NitelikID      : Int32;
  255.    MBox           : TextBox; // Eğer seçeneğin cevabı metin olarak istenmişse
  256.    Cevap          : String;
  257.    Baglantim      : OleDbConnection;
  258.    Komutcu        : OleDbCommand;
  259.    CevaplariSakla : Boolean;
  260.    UyeID          : String;
  261.    PuanToplami    : Int32;
  262.    DegerlendirmeLinki : String;
  263. begin
  264.   TRY
  265.     PuanToplami := 0;
  266.     //* Kayıtlı Üye Cevaplamışsa ki genelde öyle olacak Cevapları Tabloda Sakla *//
  267.     UyeID := '0';
  268.     if Assigned(Page.Session['uid']) then
  269.     begin
  270.       CevaplariSakla := True;
  271.       UyeID          := Page.Session['uid'].ToString;
  272.     end else
  273.       CevaplariSakla := False;
  274.    
  275.     Baglantim           := OleDbConnection.Create('Provider=microsoft.Jet.OLEDB.4.0;'+
  276.                                                    'data source='+server.MapPath(kTestSabitler.VT));
  277.     Komutcu             := OleDbCommand.Create;
  278.     Komutcu.Connection  := Baglantim;
  279.     Baglantim.Open;
  280.  
  281.  
  282.     //* Önce Radiobuttonlist seçeneklerini inceliyoruz *//
  283.     For i:=1 to Convert.ToInt32(ViewState.Item['RBLSayisi'].ToString) do
  284.     begin
  285.       RBI  := 'RBL'+i.ToString;
  286.       RBL  := RadioButtonList(FindControl(RBI));
  287.       if Assigned(RBL) then
  288.       begin
  289.         if RBL.SelectedIndex > -1 then
  290.         begin
  291.           KtestSabitler.GetSecenekPuanSoruGrup(RBL.SelectedValue,SecenekID,Puan,SoruID,GrpID,NitelikID);
  292.           //* Seçenek cevabı radioitem dan alınacaksa *//
  293.           Cevap       := RBL.SelectedItem.Text;
  294.           //* Her seçeneğe en az sıfır puan vermek zorunlu olduğundan hata çıkmaması gerekir *//
  295.           PuanToplami := PuanToplami + Convert.ToInt32(Puan);
  296.           if CevaplariSakla then
  297.              CevaplariKaydet(Komutcu,Cevap,Convert.ToString(SecenekID),Convert.ToString(Puan),Convert.ToString(SoruID),Convert.ToString(GrpID),UyeID,Convert.ToString(NitelikID));
  298.           //RS := RS+'Grp:'+GrpId.ToString+'-Soru ID.:'+SoruID.ToString+'-SecenekID:'+SecenekID.ToString+'-Nitelik ID:'+NitelikID.ToString+'-Puan:'+Puan.ToString+':'+Cevap+'<br>';
  299.         end;
  300.       end;
  301.     end;
  302.     //* Sonra Metin Girişlerini Test Ediyoruz *//
  303.     For i:=1 To Convert.ToInt32(ViewState.Item['MetinKutusuSayisi'].ToString) do
  304.     begin
  305.       MBI   := 'M'+i.ToString;
  306.       MBox  := TextBox(FindControl(MBI));
  307.       if Assigned(MBox) then
  308.       begin
  309.         Cevap   := MBox.Text;
  310.         if Cevap <> '' then
  311.         begin
  312.           MBW     := ViewState.Item[MBI].ToString;
  313.           KTestSabitler.GetSecenekPuanSoruGrup(MBW,SecenekID,Puan,SoruID,GrpID,NitelikID);
  314.           //* Her seçeneğe en az sıfır puan vermek zorunlu olduğundan hata çıkmaması gerekir *//
  315.           PuanToplami := PuanToplami + Convert.ToInt32(Puan);
  316.           if CevaplariSakla then
  317.              CevaplariKaydet(Komutcu,Cevap,Convert.ToString(SecenekID),Convert.ToString(Puan),Convert.ToString(SoruID),Convert.ToString(GrpID),UyeID,Convert.ToString(NitelikID));
  318.           //MS := MS+'Grp:'+GrpId.ToString+'-Soru ID.:'+SoruID.ToString+'-SecenekID:'+SecenekID.ToString+'-Nitelik ID:'+NitelikID.ToString+'-Puan:'+Puan.ToString+':'+Cevap+'<br>';
  319.         end;
  320.       end;
  321.     end;
  322.     //Değerlendirme yapacağız...
  323.   //  Label_GrupAdi.Text := RS+'<hr>'+MS+'<br> Değerlendireceğiz';
  324.   FINALLY
  325.     Komutcu.Free;
  326.     Baglantim.Close;
  327.     Baglantim.Free;
  328.     //Değerlendirme yapacağız...
  329.     if ViewState.Item['DTipi'].ToString <> 'Y' then
  330.     begin
  331.       DegerlendirmeLinki := SEOYap(Label_GrupAdi.Text,'degerlendirme-gid='+Page.Request.Params['gid'].ToString+'-puan='+Convert.ToString(PuanToplami)+'-dt='+ViewState.Item['DTipi'].ToString+'-grp='+Label_GrupAdi.Text+'-s5');
  332.       Response.Redirect(DegerlendirmeLinki);
  333.     end else
  334.       Response.Redirect('default.aspx');
  335.   END;
  336. end;
  337.  
  338. procedure TWebUserControl_Sorular.SoruveSecenekleriBas(Const GrupID : String);
  339.   Var
  340.     Baglantim       : OleDbConnection;
  341.     SoruKomutcu     : OleDbCommand;
  342.     SoruOkuyucu     : OleDbDataReader;
  343.     SoruSayisi      : Int32;
  344.     _Panel          : Panel;
  345.    Tbl              : Table;
  346.    Tblrw            : Tablerow;
  347.    TblCl            : TableCell;
  348.    BitirBtn         : Button;
  349. begin
  350.   SoruSayisi      := 0;
  351.   FRBLSayisi      := 0;
  352.  
  353.   ViewState.Item['GrupID']             := GrupID;
  354.   //* View State başlangıç değerleri hataları önlemek için atanıyor *//
  355.   if Not Page.IsPostBack then
  356.   begin
  357.     ViewState.Item['MetinKutusuSayisi']  := SoruSayisi.ToString; //- 0
  358.     ViewState.Item['RBLSayisi']          := FRBLSayisi.ToString; //- 0
  359.   end;  
  360.  
  361.   try
  362.     SetGrupSureSayaci(GrupID);
  363.     Baglantim               := OleDbConnection.Create('Provider=microsoft.Jet.OLEDB.4.0;'+
  364.                                                    'data source='+server.MapPath(kTestSabitler.VT));
  365.     SoruKomutcu             := OleDbCommand.Create;
  366.     SoruKomutcu.Connection  := Baglantim;
  367.  
  368.     SoruKomutcu.CommandText := 'SELECT * from ktestsorular where pasif=0 and grup_id='+GrupID;
  369.  
  370.     Baglantim.Open;
  371.     SoruOkuyucu        := SoruKomutcu.ExecuteReader;
  372.     _Panel             := Panel.Create;
  373.     _Panel.ID          := 'sorusecenekpaneli';
  374.     While SoruOkuyucu.Read do
  375.     BEGIN
  376.       Inc(SoruSayisi);
  377.       Tbl              := Table.Create;
  378.       Tbl.CssClass     := 'sorutablosu';
  379.       Tblrw            := Tablerow.Create;
  380.       TblCl            := TableCell.Create;
  381.       TblCl.CssClass   := 'soruhucresi';
  382.       Tblcl.ColumnSpan := 2;
  383.       TblCl.Text  := '<strong><font class="soruno">&nbsp;&nbsp;'+SoruSayisi.ToString+'&nbsp;&nbsp;</font></strong>&nbsp;'+SoruOkuyucu.Item['soru'].ToString;
  384.       Tblrw.Controls.Add(TblCl);
  385.       Tbl.Controls.Add(Tblrw);
  386.       if SoruOkuyucu.Item['resim'].ToString <> '' then
  387.       begin
  388.         Tblrw          := Tablerow.Create;
  389.         TblCl          := TableCell.Create;
  390.         TblCl.CssClass := 'soruhucresi';
  391.         TblCl.Text     := SoruOkuyucu.Item['resim'].ToString;
  392.         Tblrw.Controls.Add(TblCl);
  393.         Tbl.Controls.Add(Tblrw);
  394.       end;
  395.       //Seçenekleri Oluştur
  396.       _Panel.Controls.Add(Tbl);
  397.       SecenekleriAyarla(GrupID,SoruOkuyucu.Item['id'].ToString,_Panel);
  398.     END;
  399.     Controls.Add(_Panel);
  400.     BitirBtn            := Button.Create;
  401.     BitirBtn.ID         := 'BitirBtn';
  402.     BitirBtn.Width      := Button1.Width;
  403.     BitirBtn.BackColor  := Button1.BackColor;
  404.     BitirBtn.ForeColor  := Button1.ForeColor;
  405.     BitirBtn.Text       := Button1.Text;
  406.     BitirBtn.BorderStyle:= Button1.BorderStyle;
  407.     BitirBtn.BorderColor:= Button1.BorderColor;
  408.     BitirBtn.BorderWidth:= Button1.BorderWidth;
  409.  
  410.     Tbl            := Table.Create;
  411.     Tbl.CssClass   := 'btnbitir';
  412.     Tblrw          := Tablerow.Create;
  413.     TblCl          := TableCell.Create;
  414.     TblCl.CssClass := 'btnbitir';
  415.     TblCl.Controls.Add(BitirBtn);
  416.     Tblrw.Controls.Add(TblCl);
  417.     Tbl.Controls.Add(Tblrw);
  418.  
  419.     Controls.Add(Tbl);
  420.     include(BitirBtn.Click,Button1_Click);
  421.  
  422.     ViewState.Item['sorusayisi']  := SoruSayisi.ToString;
  423.   finally
  424.     SoruKomutcu.Free;
  425.     Baglantim.Close;
  426.     Baglantim.Free;
  427.   end;
  428. end;
  429.  
  430. Procedure TWebUserControl_Sorular.SetGrubESDT(Const GrpID : String);
  431.  Var
  432.     Baglantim   : OleDbConnection;
  433.     Komutcu     : OleDbCommand;
  434.     Okuyucu     : OleDbDataReader;
  435. Begin
  436.   try
  437.     Baglantim           := OleDbConnection.Create('Provider=microsoft.Jet.OLEDB.4.0;'+
  438.                                                    'data source='+server.MapPath(kTestSabitler.VT));
  439.     Komutcu             := OleDbCommand.Create;
  440.     Komutcu.Connection  := Baglantim;
  441.  
  442.     Komutcu.CommandText := 'SELECT dtipi,erisim_seviyesi,grupadi from ktestgrup where pasif=0 and id='+GrpID;
  443.  
  444.     Baglantim.Open;
  445.     Okuyucu        := Komutcu.ExecuteReader;
  446.     if Okuyucu.Read then
  447.     begin
  448.       FDTipi    := Okuyucu.Item['dtipi'].ToString;
  449.       FES       := Okuyucu.GetInt32(1);
  450.       ViewState.Item['DTipi'] := FDTipi;
  451.       ViewState.Item['Es']    := FES.ToString;
  452.       Label_GrupAdi.Text      := Okuyucu.Item['grupadi'].ToString;
  453.     end else
  454.     begin
  455.       ViewState.Item['DTipi'] := 'Y';
  456.       ViewState.Item['Es']    := '9';
  457.     end;
  458.   finally
  459.     Komutcu.Free;
  460.     Baglantim.Close;
  461.     Baglantim.Free;
  462.   end;
  463. End;
  464.  
  465. Function TWebUserControl_Sorular.MukerrerCevaplamaVarmi(Const GrpID,UyeID : String):Boolean;
  466.  Var
  467.     Baglantim   : OleDbConnection;
  468.     Komutcu     : OleDbCommand;
  469.     Okuyucu     : OleDbDataReader;
  470. Begin
  471.   try
  472.     Baglantim           := OleDbConnection.Create('Provider=microsoft.Jet.OLEDB.4.0;'+
  473.                                                    'data source='+server.MapPath(kTestSabitler.VT));
  474.     Komutcu             := OleDbCommand.Create;
  475.     Komutcu.Connection  := Baglantim;
  476.  
  477.     Komutcu.CommandText := 'SELECT count(id) as toplam from uyedegerlendirme where grup_id='+GrpID+' and uye_id='+UyeID;
  478.  
  479.     Baglantim.Open;
  480.     Okuyucu        := Komutcu.ExecuteReader;
  481.     if Okuyucu.Read then
  482.     begin
  483.       Result := Okuyucu.GetInt32(0) > 0;
  484.     end else
  485.       Result := False;
  486.   finally
  487.     Komutcu.Free;
  488.     Baglantim.Close;
  489.     Baglantim.Free;
  490.   end;
  491. End;
  492.  
  493. procedure TWebUserControl_Sorular.Page_Load(sender: System.Object; e: System.EventArgs);
  494.  Var
  495.    GrpID      : String;
  496.    ES         : Int32; // ziyaretçinin erişim seviyesi
  497.    Uyemi      : Boolean;
  498.    Mukerrermi : Boolean;
  499.    Go         : String;
  500. begin
  501.   // TODO: Put user code to initialize the page here
  502.   if Assigned(Page.Request.Params['gid']) then
  503.      GrpID  := Page.Request.Params['gid'].ToString
  504.   else
  505.      GrpID  := '0';
  506.   {
  507.     //* Erişim İzinleri Denetimi Yapacağız *//
  508.  
  509.     Gruplara ait sorular üç tip kullanıcı tarafından cevaplanır
  510.     1. Ziyaretçiler
  511.     2. Kayıtlı Üyeler
  512.     3. 1 nci derece özel üyeler
  513.     4. 2 nci derece özel üyeler
  514.  
  515.     Soru değerlendirmeleri
  516.      0. Yok - Y
  517.      1. Kısa  - K
  518.      2. Uzun  - U
  519.      3. E-Postaya Kısa - PK
  520.      4. E-Postaya Uzun - PU
  521.   }
  522.   //* Önce Soru Grubuna Erişim Şeklini ve değerlendirme tipini Buluyoruz *//
  523.   SetGrubESDT(GrpID);
  524.  
  525.   //* Yönlendirme gerekirse adres belli olsun *//
  526.   Go := KTestSabitler.SEOYap(Label_GrupAdi.Text,'sorular-gid'+GrpID+'-s2');  //'default.aspx?p=sorular&gid='+GrpID;
  527.   Page.Session['sayfayagit'] := Go;
  528.  
  529.   //* Kullanıcının Erişim Düzeyini Buluyoruz *//
  530.   Uyemi       := False;
  531.   Mukerrermi  := False;
  532.  
  533.   if Assigned(Page.Session['uid']) then
  534.   begin
  535.     Uyemi     := True;
  536.     ES        := Convert.ToInt32(Page.Session['es'].ToString);
  537.     Mukerrermi:= MukerrerCevaplamaVarmi(GrpID,Page.Session['uid'].ToString);
  538.   end else
  539.     ES  := 0;
  540.  
  541.   //* Erişim İzni Gerekiyorsa ve ziyaretçinin erişim izni grubunkinden küçükse *//
  542.   if (FEs > 0) and (ES < FES) and (Uyemi) then
  543.     Response.Redirect('default.aspx?p=hatapaneli&hatakodu=1&s=100')
  544.   else
  545.   if (FEs > 0) and (ES < FES) and (Not Uyemi) then
  546.     Response.Redirect('default.aspx?p=hatapaneli&hatakodu=0&go=1&s=100')
  547.   else
  548.   if (Uyemi) and (Mukerrermi)  then
  549.     Response.Redirect('default.aspx?p=hatapaneli&hatakodu=2&s=100')
  550.   else
  551.   begin
  552.     SoruveSecenekleriBas(GrpID);
  553.   end;
  554. end;
  555.  
  556. procedure TWebUserControl_Sorular.OnInit(e: System.EventArgs);
  557. begin
  558.   //
  559.   // Required for Designer support
  560.   //
  561.   InitializeComponent;
  562.   inherited OnInit(e);
  563. end;
  564.  
  565. {$REGION 'Designer Managed Code'}
  566. /// <summary>
  567. /// Required method for Designer support -- do not modify
  568. /// the contents of this method with the code editor.
  569. /// </summary>
  570. procedure TWebUserControl_Sorular.InitializeComponent;
  571. begin
  572.   Include(Self.Button1.Click, Self.Button1_Click);
  573.   Include(Self.Load, Self.Page_Load);
  574. end;
  575. {$ENDREGION}
  576.  
  577.  
  578. end.
  579.  

Eeeee kodları verdikten sonra başta akrep olmak üzere bilgili ve tecrübeli arkadaşlarımda bu konuyu irdeleyip açabilir değil mi? Ben fırsat bulunca anlatmaya başlayacağım... :)
« Son Düzenleme: 21 Eylül 2007 20:38:05 by cemaliozan »
www.teksevgi.com - Tamamı BDS 2006 ile yazıldı..

Yaşamaya Değer Bir Hayattan, Sevmeye Değer Bir Aşktan, Dostluğa Değer Bir Arkadaşlıktan Asla Vazgeçmeyin...

Çevrimdışı Fatih

  • Emekli Yönetici
  • *****
  • İleti: 2.217
  • Rep: +43/-10
  • Cinsiyet: Bay
    • Delphi Dünyası
Ynt: Çalışma Anında Bileşen Oluşturmak ve Takla Attırmak...
« Yanıtla #4 : 25 Eylül 2007 12:49:37 »
Programlama da zorlandığım en gıcık konu; yazmadığım kodları analiz etmektir.  :oops: Deneme-Yanılma yoluıyla bulmayı tercih ederim. :) Kodlama konusunda egemenlik kayıtsız, şartsız benim olmalıdır 8)
« Son Düzenleme: 25 Eylül 2007 12:50:31 by Fatih »
Malulen emekli programcı / yazar. Bildiklerini unutmakta olduğundan size cevap veremez.