Kullanıcı

Hoşgeldiniz Ziyaretçi. Lütfen giriş yapın veya kayıt olun.
E-posta adresinize aktivasyon iletisi gelmediyse lütfen buraya tıklayın.
30 Temmuz 2010 09:25:44

Kullanıcı adınızı, şifrenizi ve aktif kalma süresini giriniz

Sohbet Penceresi

Son 5 Notlar:

09 Temmuz 2010 15:09:00
merhaba arkadaÅŸlar ilk defa bi soru soracam
son olarak üzerinde çalıştığım bi proğramda sorun var
datadan belirli bi kritere göre arama yapıyor bunlardan çift olanları teke düşürüp gride nasıl yazdıra bilirim
örnek vererek anlatırsam daha sağlam olur sanırsam

datadan k
10 Temmuz 2010 03:07:46
GÜZEL SİTE SEVDİM ;D
14 Temmuz 2010 14:45:20
aloo nasılsınız...
15 Temmuz 2010 18:16:38
 maske msnden bi konuÅŸalım kanky.
17 Temmuz 2010 15:16:16
ınterbase procedure soruma cevap verecek sevgili bir kul yokmu arkadaşlar ?

Show 50 latest

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

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı cemaliozan

  • Moderatör
  • *****
  • İ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: 821
  • Rep: +19/-3
  • Cinsiyet: Bay
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

Çevrimdışı akrep

  • Global Moderatör
  • *****
  • İleti: 1.241
  • Rep: +27/-13
  • Cinsiyet: Bay
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

  • Moderatör
  • *****
  • İleti: 230
  • Rep: +4/-3
  • Cinsiyet: Bay
  • Kodlarım, canlarım
    • Gerçek Sevgi Portalı
Ö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) [Seç]
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="sorular.pas" Inherits="sorular.TWebUserControl_Sorular"%>
<script>
<!--
  // Geri Sayim
  function _sayac(no,basla){
var div   = document.getElementById(no);
div.sayi  = basla;
div.sayim = function(){
if(div.sayi >= 0){
   div.innerHTML = 'Kalan Süre : '+ div.sayi-- +' Sn.';
   setTimeout('document.getElementById(\''+div.id+'\').sayim()',1000);
}else
{
window.location="default.aspx";
}
}
div.sayim();
  }
-->
</script>

<style type="text/css">.fixme {
RIGHT: 250px; BOTTOM: 50px; POSITION: absolute
}
UNKNOWN {
POSITION: fixed
}
</style>
<!--[if gte IE 5.5]>
<![if lt IE 7]>
<style type="text/css">
div#fixme {
  /* IE5.5+/Win - this is more specific than the IE 5.0 version */
  right: auto; bottom: auto;
  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' );
  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' );
}
</style>
<![endif]>
<![endif]-->

<script type="text/javascript">
<!--
var depth = 6 // in pixels

// addLoadEvent created by: Simon Willison
// http://simon.incutio.com/archive/2004/05/26/addLoadEvent
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
window.onload = func;
  } else {
window.onload = function() {
  if (oldonload) {
oldonload();
  }
  func();
}
  }
}

addLoadEvent(function() {

// Created by: Michael Burt
// http://galaxydefense.ga.funpic.org/
var a = document.all ? document.all : document.getElementsByTagName('*');
for (var i = 0;i < a.length;i++) {
if (a[i].className == "shadow") {
for (x = 0;x < depth;x++) {
var newSd = document.createElement("DIV")
newSd.className = "shadow2"
newSd.style.background = a[i].id
newSd.style.width = a[i].offsetWidth + "px"
newSd.style.height = a[i].offsetHeight + "px"
newSd.style.left = a[i].offsetLeft + x + "px"
newSd.style.top = a[i].offsetTop + x + "px"
document.body.appendChild(newSd)
}
}
}
}
);
 -->
</script>

<style>.shadow {
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
}
.shadow2 {
Z-INDEX: 10; FILTER: alpha(Opacity=15); OVERFLOW: hidden; POSITION: absolute; opacity: 0.1; moz-opacity: 0.2; khtml-opacity: 0.1
}
</style>

<div id="div1" style="FONT-WEIGHT: bold; FONT-SIZE: 14px" class="shadow2 fixme"></div>
<div id="Bitir" style="TEXT-ALIGN: center">
  <ASP:Button id="Button1" runat="server" text="DeÄŸerlendir" enableviewstate="False" borderstyle="Solid" borderwidth="1px" bordercolor="#C04000" backcolor="#FFE0C0"></ASP:Button><br>
</div>
  <div class="sidebarbox-border bg-red02" style="WIDTH: 100%">
<div class="sidebarbox-title-shading bg-red05" style="WIDTH: 100%; TEXT-ALIGN: center">
  <ASP:Label id="Label_GrupAdi" runat="server" enableviewstate="False" cssclass="txt-white yazi14">***</ASP:Label>
</div>
<p>
  DeÄŸerlendirme için tüm soruların eksiksiz cevaplanması zorunludur...
</p>
  </div>

<div id="baslik" style="POSITION: fixed; TEXT-ALIGN: center">
<ASP:Label id="Label_SureScript" runat="server" enableviewstate="False">Süre Yok</ASP:Label>
</div>

Buda code-behind tarafı....

Kod: (delphi) [Seç]
unit sorular;

interface

uses System.Data, System.Drawing, System.Web, System.Web.UI,
     System.Web.UI.WebControls, System.Web.UI.HtmlControls,
     System.Data.OleDb,KTestSabitler;

type
    /// <summary>
    /// Summary description for WebUserControl1.
    /// </summary>
  TWebUserControl_Sorular = class(System.Web.UI.UserControl)
  {$REGION 'Designer Managed Code'}
  strict private
    procedure InitializeComponent;
    procedure Button1_Click(sender: System.Object; e: System.EventArgs);
  {$ENDREGION}
  strict private
    procedure Page_Load(sender: System.Object; e: System.EventArgs);
  strict protected
    Label_SureScript: System.Web.UI.WebControls.Label;
    Button1: System.Web.UI.WebControls.Button;
    Label_GrupAdi: System.Web.UI.WebControls.Label;
    procedure OnInit(e: System.EventArgs); override;
  private
    FRBLSayisi       : Int32;
    FMetinKutuSayisi : Int32;
    FES              : Integer; // EriÅŸim Seviyesi
    FDTipi           : String; // DeÄŸerlendirme Tipi
    procedure SecenekleriAyarla(const GrupID, SoruID: String; _Panel: Panel);
    procedure SoruveSecenekleriBas(const GrupID: String);
    procedure SetGrupSureSayaci(const GrupID: String);
    procedure SetGrubESDT(const GrpID: String);
    function MukerrerCevaplamaVarmi(const GrpID,UyeID: String): Boolean;
    procedure CevaplariKaydet(Komutcu: OleDbCommand; Cevap,SecenekID, Puan, SoruID,  GrpID, UyeID,NitelikID: String);
    { Private Declarations }
  public
    { Public Declarations }
  end;

implementation

procedure TWebUserControl_Sorular.SecenekleriAyarla(Const GrupID,SoruID:String;_Panel : Panel);
 Var
    RBL                 : RadioButtonList;
    RBLItem             : ListItem;
    MetinBox            : TextBox;
    Baglantim           : OleDbConnection;
    SecenekKomutcu      : OleDbCommand;
    SecenekOkuyucu      : OleDbDataReader;
    Tbl                 : Table;
    Tblrw               : TableRow;
    TblCl               : TableCell;
    Lbl                 : &Label;
    RBLOlusturuldu      : Boolean;
    ZorunluAlan         : RequiredFieldValidator;
begin
  try
    Baglantim                  := OleDbConnection.Create('Provider=microsoft.Jet.OLEDB.4.0;'+
                                                   'data source='+server.MapPath(kTestSabitler.VT));
    SecenekKomutcu             := OleDbCommand.Create;
    SecenekKomutcu.Connection  := Baglantim;

    SecenekKomutcu.CommandText := 'SELECT * from ktestsecenek where pasif=false and grup_id='+GrupID+' and soru_id='+SoruID;
    Baglantim.Open;
    SecenekOkuyucu        := SecenekKomutcu.ExecuteReader;
    Tbl                   := Table.Create;
    Tbl.CellPadding       := 0;
    Tbl.CellSpacing       := 0;
    Tbl.CssClass          := 'secenektablosu';
    TblRw                 := TableRow.Create;
    TblCl                 := TableCell.Create;
    TblCl.CssClass        := 'secenekhucresi';
    RBLOlusturuldu        := False;
    While SecenekOkuyucu.Read do
    BEGIN
      //******** Seçenek RBL ITEM ise **********//
      if (SecenekOkuyucu.Item['metin'].ToString = 'False') or (SecenekOkuyucu.Item['metin'].ToString = '0') then
      begin
        if Not RBLOlusturuldu then
        begin
          RBLOlusturuldu        := True;
          //* Radiobuttonlist sayısını bir artır *//
          Inc(FRBLSayisi);
          RBL                   := RadioButtonList.Create;
          RBL.CssClass          := 'radiosecenekleri';
          RBL.ID                := 'RBL'+FRBLSayisi.ToString;
          RBL.EnableViewState   := True;
          TblCl.Controls.Add(RBL);
          Tblrw.Controls.Add(TblCl);
          Tbl.Controls.Add(TblRw);

          ZorunluAlan                   :=  RequiredFieldValidator.Create;
          ZorunluAlan.ErrorMessage      := '<img src="img/dikkat1.gif" title="Zorunlu Alan" Alt="Eksik" border="0"/>';
          ZorunluAlan.ControlToValidate := 'RBL'+FRBLSayisi.ToString;
          ZorunluAlan.ID                := 'ZR'+FRBLSayisi.ToString;

          //* Zorunlu Alan Hücresi *//
          TblCl                 := TableCell.Create;
          TblCl.VerticalAlign   := VerticalAlign.Middle;
          TblCl.CssClass        := 'zorunlualanhucresi';
          TblCl.Controls.Add(ZorunluAlan);
          Tblrw.Controls.Add(TblCl);
          Tbl.Controls.Add(TblRw);
        end;

        RBLItem            := ListItem.Create;
        if SecenekOkuyucu.Item['resim'].ToString <> '' then
           RBLItem.Text    := SecenekOkuyucu.Item['secenek'].ToString+'<br>'+SecenekOkuyucu.Item['resim'].ToString
        else
           RBLItem.Text    := SecenekOkuyucu.Item['secenek'].ToString;

        RBLItem.Value := 'R'+SecenekOkuyucu.Item['id'].ToString+'_'+SecenekOkuyucu.Item['puan'].ToString+'['+SoruID+']'+GrupID+'('+SecenekOkuyucu.Item['nitelik_id'].ToString+')';
        RBL.Items.Add(RBLItem);
      end
      //******** Seçenek RBL ITEM ise Sonu **********//
      //******* Seçenek Metinse ********************//
      else
      if (SecenekOkuyucu.Item['metin'].ToString = 'True') or (SecenekOkuyucu.Item['metin'].ToString = '1') then
      begin
        Inc(FMetinKutuSayisi);
        Lbl                   := &Label.Create;
        Lbl.ID                := 'Lbl'+FMetinKutuSayisi.ToString;
        Lbl.EnableViewState   := False;
        Lbl.CssClass          := 'metinkutusuetiketi';

        if SecenekOkuyucu.Item['resim'].ToString <> '' then
           Lbl.Text          := SecenekOkuyucu.Item['secenek'].ToString+'<br>'+SecenekOkuyucu.Item['resim'].ToString
        else
           Lbl.Text          := SecenekOkuyucu.Item['secenek'].ToString;

        //* Etiketin satırı *//
        TblRw             := TableRow.Create;
        Tblcl             := TableCell.Create;
        Tblcl.VerticalAlign := VerticalAlign.Bottom;
        Tblcl.CssClass    := 'metinkutusuetiketi';
        Tblcl.Controls.Add(Lbl);
        Tblrw.Controls.Add(TblCl);
        Tbl.Controls.Add(Tblrw);

        //* Zorunlu Alan Hücresi *//
        TblCl                 := TableCell.Create;
        TblCl.CssClass        := 'zorunlualanhucresi';
        TblCl.Text            := '&nbsp;';
        Tblrw.Controls.Add(TblCl);
        Tbl.Controls.Add(TblRw);

        MetinBox                      := TextBox.Create;
        MetinBox.ID                   := 'M'+FMetinKutuSayisi.ToString;
        MetinBox.EnableViewState      := True;

        ZorunluAlan                   :=  RequiredFieldValidator.Create;
        ZorunluAlan.ErrorMessage      := '<img src="img/dikkat1.gif" title="Zorunlu Alan" Alt="Eksik" border="0"/>';
        ZorunluAlan.ControlToValidate := 'M'+FMetinKutuSayisi.ToString;
        ZorunluAlan.ID                := 'ZM'+FMetinKutuSayisi.ToString;


        //* Metin Kutusunun Hangi grup, soru, seçenek ve puanlamaya tabii olduÄŸunu tutuyoruz *//
        ViewState.Item['M'+FMetinKutuSayisi.ToString]  := SecenekOkuyucu.Item['id'].ToString+'_'+SecenekOkuyucu.Item['puan'].ToString+'['+SoruID+']'+GrupID+'('+SecenekOkuyucu.Item['nitelik_id'].ToString+')';
        MetinBox.CssClass := 'metinkutusu';
        TblRw             := TableRow.Create;
        TblCl             := TableCell.Create;
        TblCl.CssClass    := 'metinkutusuhucresi';
        Tblcl.Controls.Add(MetinBox);
        Tblrw.Controls.Add(TblCl);
        Tbl.Controls.Add(Tblrw);

        //* Zorunlu Alan Hücresi *//
        TblCl                 := TableCell.Create;
        TblCl.CssClass        := 'zorunlualanhucresi';
        TblCl.Controls.Add(ZorunluAlan);
        Tblrw.Controls.Add(TblCl);
        Tbl.Controls.Add(TblRw);
       end;
      //******* Seçenek Metinse Sonu ***************//
    END;
    //* Nesnelere EriÅŸim Sayaçlarını Aklımızda Tutuyoruz *//
    ViewState.Item['MetinKutusuSayisi'] := FMetinKutuSayisi.ToString;
    ViewState.Item['RBLSayisi']         := FRBLSayisi.ToString;
    //* Ayraç koyuyoruz *//
    TblRw             := TableRow.Create;
    TblCl             := TableCell.Create;
    TblCl.Text        := '<img src="img/satirayraci1.gif" border="0" />';
    TblCl.CssClass    := 'sorulararasi';
    Tblrw.Controls.Add(TblCl);
    Tbl.Controls.Add(Tblrw);

    _Panel.Controls.Add(Tbl);
  finally
    SecenekKomutcu.Free;
    Baglantim.Close;
    Baglantim.Free;
  end;
end;

procedure TWebUserControl_Sorular.SetGrupSureSayaci(Const GrupID:String);
  Var
    Baglantim   : OleDbConnection;
    Komutcu     : OleDbCommand;
    Okuyucu     : OleDbDataReader;
    Sure        : Int32;
begin
  try
    Sure                := 0;
    Baglantim           := OleDbConnection.Create('Provider=microsoft.Jet.OLEDB.4.0;'+
                                                   'data source='+server.MapPath(kTestSabitler.VT));
    Komutcu             := OleDbCommand.Create;
    Komutcu.Connection  := Baglantim;

    Komutcu.CommandText := 'SELECT sure,grupadi from ktestgrup where pasif=0 and id='+GrupID;
    Baglantim.Open;
    Okuyucu             := Komutcu.ExecuteReader;
    if Okuyucu.Read then
    begin
      Sure              := Okuyucu.GetInt32(0);
      Label_GrupAdi.Text:= Okuyucu.GetString(1);
    end;

    if Sure > 0 then
       Label_SureScript.Text :='<script>_sayac(''div1'','+Convert.ToString(Sure*60)+');</script>';
  finally
    Komutcu.Free;
    Baglantim.Close;
    Baglantim.Free;
  end;
end;

procedure TWebUserControl_Sorular.CevaplariKaydet(Komutcu:OleDbCommand;Cevap,SecenekID,Puan,SoruID,GrpID,UyeID,NitelikID :String);
begin
  Komutcu.CommandText := 'INSERT INTO ktestcevaplar (uye_id, grup_id, soru_id, secenek_id, nitelik_id,puan, cevap,pasif) VALUES('+
                         UyeID+','+
                         GrpID+','+
                         SoruID+','+
                         SecenekID+','+
                         NitelikID+','+
                         Puan+', "'+
                         Duzelt(Cevap)+'",0)';
  Komutcu.ExecuteNonQuery;
end;

procedure TWebUserControl_Sorular.Button1_Click(sender: System.Object; e: System.EventArgs);
 Var
   RBL            : RadioButtonList; //Seçenek Listesi
   RS,MS        : String;
   i              : Integer;
   RBI            : String; // RBL'ye atanan ismi iÅŸaret etmek için
   MBI            : String; // MetinBox'a atanan ismi iÅŸaret etmek için
   MBW            : String; // İlgili metinbox viewstate inde tutulan Seçenek temel bilgilerine iÅŸaret etmek için
   SecenekID,
   SoruID,
   Puan,
   GrpID,
   NitelikID      : Int32;
   MBox           : TextBox; // EÄŸer seçeneÄŸin cevabı metin olarak istenmiÅŸse
   Cevap          : String;
   Baglantim      : OleDbConnection;
   Komutcu        : OleDbCommand;
   CevaplariSakla : Boolean;
   UyeID          : String;
   PuanToplami    : Int32;
   DegerlendirmeLinki : String;
begin
  TRY
    PuanToplami := 0;
    //* Kayıtlı Üye Cevaplamışsa ki genelde öyle olacak Cevapları Tabloda Sakla *//
    UyeID := '0';
    if Assigned(Page.Session['uid']) then
    begin
      CevaplariSakla := True;
      UyeID          := Page.Session['uid'].ToString;
    end else
      CevaplariSakla := False;
   
    Baglantim           := OleDbConnection.Create('Provider=microsoft.Jet.OLEDB.4.0;'+
                                                   'data source='+server.MapPath(kTestSabitler.VT));
    Komutcu             := OleDbCommand.Create;
    Komutcu.Connection  := Baglantim;
    Baglantim.Open;


    //* Önce Radiobuttonlist seçeneklerini inceliyoruz *//
    For i:=1 to Convert.ToInt32(ViewState.Item['RBLSayisi'].ToString) do
    begin
      RBI  := 'RBL'+i.ToString;
      RBL  := RadioButtonList(FindControl(RBI));
      if Assigned(RBL) then
      begin
        if RBL.SelectedIndex > -1 then
        begin
          KtestSabitler.GetSecenekPuanSoruGrup(RBL.SelectedValue,SecenekID,Puan,SoruID,GrpID,NitelikID);
          //* Seçenek cevabı radioitem dan alınacaksa *//
          Cevap       := RBL.SelectedItem.Text;
          //* Her seçeneÄŸe en az sıfır puan vermek zorunlu olduÄŸundan hata çıkmaması gerekir *//
          PuanToplami := PuanToplami + Convert.ToInt32(Puan);
          if CevaplariSakla then
             CevaplariKaydet(Komutcu,Cevap,Convert.ToString(SecenekID),Convert.ToString(Puan),Convert.ToString(SoruID),Convert.ToString(GrpID),UyeID,Convert.ToString(NitelikID));
          //RS := RS+'Grp:'+GrpId.ToString+'-Soru ID.:'+SoruID.ToString+'-SecenekID:'+SecenekID.ToString+'-Nitelik ID:'+NitelikID.ToString+'-Puan:'+Puan.ToString+':'+Cevap+'<br>';
        end;
      end;
    end;
    //* Sonra Metin GiriÅŸlerini Test Ediyoruz *//
    For i:=1 To Convert.ToInt32(ViewState.Item['MetinKutusuSayisi'].ToString) do
    begin
      MBI   := 'M'+i.ToString;
      MBox  := TextBox(FindControl(MBI));
      if Assigned(MBox) then
      begin
        Cevap   := MBox.Text;
        if Cevap <> '' then
        begin
          MBW     := ViewState.Item[MBI].ToString;
          KTestSabitler.GetSecenekPuanSoruGrup(MBW,SecenekID,Puan,SoruID,GrpID,NitelikID);
          //* Her seçeneÄŸe en az sıfır puan vermek zorunlu olduÄŸundan hata çıkmaması gerekir *//
          PuanToplami := PuanToplami + Convert.ToInt32(Puan);
          if CevaplariSakla then
             CevaplariKaydet(Komutcu,Cevap,Convert.ToString(SecenekID),Convert.ToString(Puan),Convert.ToString(SoruID),Convert.ToString(GrpID),UyeID,Convert.ToString(NitelikID));
          //MS := MS+'Grp:'+GrpId.ToString+'-Soru ID.:'+SoruID.ToString+'-SecenekID:'+SecenekID.ToString+'-Nitelik ID:'+NitelikID.ToString+'-Puan:'+Puan.ToString+':'+Cevap+'<br>';
        end;
      end;
    end;
    //DeÄŸerlendirme yapacağız...
  //  Label_GrupAdi.Text := RS+'<hr>'+MS+'<br> DeÄŸerlendireceÄŸiz';
  FINALLY
    Komutcu.Free;
    Baglantim.Close;
    Baglantim.Free;
    //DeÄŸerlendirme yapacağız...
    if ViewState.Item['DTipi'].ToString <> 'Y' then
    begin
      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');
      Response.Redirect(DegerlendirmeLinki);
    end else
      Response.Redirect('default.aspx');
  END;
end;

procedure TWebUserControl_Sorular.SoruveSecenekleriBas(Const GrupID : String);
  Var
    Baglantim       : OleDbConnection;
    SoruKomutcu     : OleDbCommand;
    SoruOkuyucu     : OleDbDataReader;
    SoruSayisi      : Int32;
    _Panel          : Panel;
   Tbl              : Table;
   Tblrw            : Tablerow;
   TblCl            : TableCell;
   BitirBtn         : Button;
begin
  SoruSayisi      := 0;
  FRBLSayisi      := 0;

  ViewState.Item['GrupID']             := GrupID;
  //* View State baÅŸlangıç deÄŸerleri hataları önlemek için atanıyor *//
  if Not Page.IsPostBack then
  begin
    ViewState.Item['MetinKutusuSayisi']  := SoruSayisi.ToString; //- 0
    ViewState.Item['RBLSayisi']          := FRBLSayisi.ToString; //- 0
  end; 

  try
    SetGrupSureSayaci(GrupID);
    Baglantim               := OleDbConnection.Create('Provider=microsoft.Jet.OLEDB.4.0;'+
                                                   'data source='+server.MapPath(kTestSabitler.VT));
    SoruKomutcu             := OleDbCommand.Create;
    SoruKomutcu.Connection  := Baglantim;

    SoruKomutcu.CommandText := 'SELECT * from ktestsorular where pasif=0 and grup_id='+GrupID;

    Baglantim.Open;
    SoruOkuyucu        := SoruKomutcu.ExecuteReader;
    _Panel             := Panel.Create;
    _Panel.ID          := 'sorusecenekpaneli';
    While SoruOkuyucu.Read do
    BEGIN
      Inc(SoruSayisi);
      Tbl              := Table.Create;
      Tbl.CssClass     := 'sorutablosu';
      Tblrw            := Tablerow.Create;
      TblCl            := TableCell.Create;
      TblCl.CssClass   := 'soruhucresi';
      Tblcl.ColumnSpan := 2;
      TblCl.Text  := '<strong><font class="soruno">&nbsp;&nbsp;'+SoruSayisi.ToString+'&nbsp;&nbsp;</font></strong>&nbsp;'+SoruOkuyucu.Item['soru'].ToString;
      Tblrw.Controls.Add(TblCl);
      Tbl.Controls.Add(Tblrw);
      if SoruOkuyucu.Item['resim'].ToString <> '' then
      begin
        Tblrw          := Tablerow.Create;
        TblCl          := TableCell.Create;
        TblCl.CssClass := 'soruhucresi';
        TblCl.Text     := SoruOkuyucu.Item['resim'].ToString;
        Tblrw.Controls.Add(TblCl);
        Tbl.Controls.Add(Tblrw);
      end;
      //Seçenekleri OluÅŸtur
      _Panel.Controls.Add(Tbl);
      SecenekleriAyarla(GrupID,SoruOkuyucu.Item['id'].ToString,_Panel);
    END;
    Controls.Add(_Panel);
    BitirBtn            := Button.Create;
    BitirBtn.ID         := 'BitirBtn';
    BitirBtn.Width      := Button1.Width;
    BitirBtn.BackColor  := Button1.BackColor;
    BitirBtn.ForeColor  := Button1.ForeColor;
    BitirBtn.Text       := Button1.Text;
    BitirBtn.BorderStyle:= Button1.BorderStyle;
    BitirBtn.BorderColor:= Button1.BorderColor;
    BitirBtn.BorderWidth:= Button1.BorderWidth;

    Tbl            := Table.Create;
    Tbl.CssClass   := 'btnbitir';
    Tblrw          := Tablerow.Create;
    TblCl          := TableCell.Create;
    TblCl.CssClass := 'btnbitir';
    TblCl.Controls.Add(BitirBtn);
    Tblrw.Controls.Add(TblCl);
    Tbl.Controls.Add(Tblrw);

    Controls.Add(Tbl);
    include(BitirBtn.Click,Button1_Click);

    ViewState.Item['sorusayisi']  := SoruSayisi.ToString;
  finally
    SoruKomutcu.Free;
    Baglantim.Close;
    Baglantim.Free;
  end;
end;

Procedure TWebUserControl_Sorular.SetGrubESDT(Const GrpID : String);
 Var
    Baglantim   : OleDbConnection;
    Komutcu     : OleDbCommand;
    Okuyucu     : OleDbDataReader;
Begin
  try
    Baglantim           := OleDbConnection.Create('Provider=microsoft.Jet.OLEDB.4.0;'+
                                                   'data source='+server.MapPath(kTestSabitler.VT));
    Komutcu             := OleDbCommand.Create;
    Komutcu.Connection  := Baglantim;

    Komutcu.CommandText := 'SELECT dtipi,erisim_seviyesi,grupadi from ktestgrup where pasif=0 and id='+GrpID;

    Baglantim.Open;
    Okuyucu        := Komutcu.ExecuteReader;
    if Okuyucu.Read then
    begin
      FDTipi    := Okuyucu.Item['dtipi'].ToString;
      FES       := Okuyucu.GetInt32(1);
      ViewState.Item['DTipi'] := FDTipi;
      ViewState.Item['Es']    := FES.ToString;
      Label_GrupAdi.Text      := Okuyucu.Item['grupadi'].ToString;
    end else
    begin
      ViewState.Item['DTipi'] := 'Y';
      ViewState.Item['Es']    := '9';
    end;
  finally
    Komutcu.Free;
    Baglantim.Close;
    Baglantim.Free;
  end;
End;

Function TWebUserControl_Sorular.MukerrerCevaplamaVarmi(Const GrpID,UyeID : String):Boolean;
 Var
    Baglantim   : OleDbConnection;
    Komutcu     : OleDbCommand;
    Okuyucu     : OleDbDataReader;
Begin
  try
    Baglantim           := OleDbConnection.Create('Provider=microsoft.Jet.OLEDB.4.0;'+
                                                   'data source='+server.MapPath(kTestSabitler.VT));
    Komutcu             := OleDbCommand.Create;
    Komutcu.Connection  := Baglantim;

    Komutcu.CommandText := 'SELECT count(id) as toplam from uyedegerlendirme where grup_id='+GrpID+' and uye_id='+UyeID;

    Baglantim.Open;
    Okuyucu        := Komutcu.ExecuteReader;
    if Okuyucu.Read then
    begin
      Result := Okuyucu.GetInt32(0) > 0;
    end else
      Result := False;
  finally
    Komutcu.Free;
    Baglantim.Close;
    Baglantim.Free;
  end;
End;

procedure TWebUserControl_Sorular.Page_Load(sender: System.Object; e: System.EventArgs);
 Var
   GrpID      : String;
   ES         : Int32; // ziyaretçinin eriÅŸim seviyesi
   Uyemi      : Boolean;
   Mukerrermi : Boolean;
   Go         : String;
begin
  // TODO: Put user code to initialize the page here
  if Assigned(Page.Request.Params['gid']) then
     GrpID  := Page.Request.Params['gid'].ToString
  else
     GrpID  := '0';
  {
    //* EriÅŸim İzinleri Denetimi Yapacağız *//

    Gruplara ait sorular üç tip kullanıcı tarafından cevaplanır
    1. Ziyaretçiler
    2. Kayıtlı Üyeler
    3. 1 nci derece özel üyeler
    4. 2 nci derece özel üyeler

    Soru deÄŸerlendirmeleri
     0. Yok - Y
     1. Kısa  - K
     2. Uzun  - U
     3. E-Postaya Kısa - PK
     4. E-Postaya Uzun - PU
  }
  //* Önce Soru Grubuna EriÅŸim Åžeklini ve deÄŸerlendirme tipini Buluyoruz *//
  SetGrubESDT(GrpID);

  //* Yönlendirme gerekirse adres belli olsun *//
  Go := KTestSabitler.SEOYap(Label_GrupAdi.Text,'sorular-gid'+GrpID+'-s2');  //'default.aspx?p=sorular&gid='+GrpID;
  Page.Session['sayfayagit'] := Go;

  //* Kullanıcının EriÅŸim Düzeyini Buluyoruz *//
  Uyemi       := False;
  Mukerrermi  := False;

  if Assigned(Page.Session['uid']) then
  begin
    Uyemi     := True;
    ES        := Convert.ToInt32(Page.Session['es'].ToString);
    Mukerrermi:= MukerrerCevaplamaVarmi(GrpID,Page.Session['uid'].ToString);
  end else
    ES  := 0;

  //* EriÅŸim İzni Gerekiyorsa ve ziyaretçinin eriÅŸim izni grubunkinden küçükse *//
  if (FEs > 0) and (ES < FES) and (Uyemi) then
    Response.Redirect('default.aspx?p=hatapaneli&hatakodu=1&s=100')
  else
  if (FEs > 0) and (ES < FES) and (Not Uyemi) then
    Response.Redirect('default.aspx?p=hatapaneli&hatakodu=0&go=1&s=100')
  else
  if (Uyemi) and (Mukerrermi)  then
    Response.Redirect('default.aspx?p=hatapaneli&hatakodu=2&s=100')
  else
  begin
    SoruveSecenekleriBas(GrpID);
  end;
end;

procedure TWebUserControl_Sorular.OnInit(e: System.EventArgs);
begin
  //
  // Required for Designer support
  //
  InitializeComponent;
  inherited OnInit(e);
end;

{$REGION 'Designer Managed Code'}
/// <summary>
/// Required method for Designer support -- do not modify
/// the contents of this method with the code editor.
/// </summary>
procedure TWebUserControl_Sorular.InitializeComponent;
begin
  Include(Self.Button1.Click, Self.Button1_Click);
  Include(Self.Load, Self.Page_Load);
end;
{$ENDREGION}


end.

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...

Çevrimiçi Fatih

  • Administrator
  • *****
  • İleti: 2.204
  • Rep: +43/-10
  • Cinsiyet: Bay
    • Delphi Dünyası
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 »
Delphi 2007/2009 çıktı.Ayrıntı için tıklayın