30 Ağustos 2013 Cuma

Ajax Control Toolkit çalışmıyorsa çözüm önerisi

"Failed to load resource: the server responded with a status of 500 (Internal Server Error) " , "Uncaught ReferenceError: Sys is not defined ", "Uncaught Error: ASP.NET Ajax client-side framework failed to load. "

Yukarıdaki hataları alıyorsanız eğer bir çözüm önerebilirim. Tabi bu hata mesajlarını pek çok nedenle alabileceğinizi unutmayın. Ajax Control Toolkit kontrolleri ve extender'ler çalışmıyordu. Microsoft Visual Studio 2010 ve C# kullanıyordum. Daha önceden hem lokalde hem de sunucuda sorunsuz çalışıyordu. Daha sonra projemde yaptığım bir değişiklik sonrası ajax kontrolleri çalışmamaya başladı. Framework olarak 4 sürümünü ve ajaxcontroltoolkit'in ise 4.1.60919.0 nolu sürümünü kullanıdığımı belirteyim. Bu arada hata mesajı vermiyor. Yukardaki hata mesajını Chrome/Araçlar/Javascript Konsolu aracından aldım.

Gelelim yaptığım değişikliğe. Global.asax dosyasında route yani yönlendirme yapıyordum. Burada yaptığım bir değişiklik sonrası ajax kontrolleri ve uzantıları(extender) çalışmamaya başladı. Bu yüzden global dosyanızı ve route tablonuzu kontrol etmenizi tavsiye ederim.

11 Mayıs 2013 Cumartesi

Implicit conversion from data type sql_variant to uniqueidentifier is not allowed. Use the CONVERT function to run this query.

"Implicit conversion from data type sql_variant to uniqueidentifier is not allowed. Use the CONVERT function to run this query."

Yukarıdaki hata mesajı alıyorsanız (elbetteki ki pek çok nedenden dolayı olmakla birlikte) uniquidentifier türü değişkeninizin türünün SqlDataSource gibi bir veri kontrolünde parametre veri türü olarak object olmasından kaynaklanıyordur. Eğer ilgili veri türünü string yaparsanız sorununuz büyük ihtimalle çözülecektir.

Örneğin :
 
<asp:SessionParameter Name="UserId" SessionField="UserId" Type="Object" />

yukarıdaki şekilde tanımlanmış bir değişkeniniz varsa bunu

<asp:SessionParameter Name="UserId" SessionField="UserId" Type="String" />

bununla değiştirmelisiniz. Yani Object veri türünü String yapmalısınız

17 Nisan 2013 Çarşamba

Opengl ile Nokta Oluşturma


#include <GL/glut.h>
#include <gl/GLU.h>
#include <gl/GL.h>

void myinit()
{
    glClearColor(1.0,1.0,1.0,1.0);
    glShadeModel(GL_FLAT);
}
void display () {

    /* pencereyi temizle */
    glClear(GL_COLOR_BUFFER_BIT);

    /* şekli çiz */
    glColor3f(1.0,0.0,0.0);
    glBegin(GL_POINTS);
        glVertex2f(0.5,0.5);  // Birden fazla nokta oluşturmak için glVertex2f fonksiyonunu
    glEnd();                       // buraya ekleyin

    /* görüntüyü çiz */
    glFlush();
}

int main ( int argc, char * argv[] ) {
       
    /* GLUT'u başlat */
    glutInit(&argc,argv);

    /* Pencerenin başlangıç pozisyonu, boyutu ve özelliklerini ayarlıyoruz */
    glutInitWindowSize(500,500);
    glutInitWindowPosition(0,0);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    
    /* Yeni bir pencere oluşturuyoruz */
    glutCreateWindow("Nokta");

    myinit();

    glutDisplayFunc(display); // görüntüleme fonksiyonu
    
    glPointSize(3.0); // nokta büyüklüğünü ayarlıyoruz

    /* glut olaylarını çalıştır */
    glutMainLoop();
}

Opengl ile Kare Çizimi



GLsizei wh=500,ww=500; // Pencerenin başlangıç pozisyonu
GLfloat size=50.0; // Karenin kenar uzunluğu
int x=10,y=10; 

/* Kareyi Çiz */
void drawSquare() 
{
    y=wh-y;
    glColor3f(0.0,0.0,1.0); // Karenin rengini belirliyoruz - Mavi
    glBegin(GL_POLYGON);
       glVertex2f(x+size,y+size);
       glVertex2f(x-size,y+size);
       glVertex2f(x-size,y-size);
       glVertex2f(x+size,y-size);
    glEnd();
    glFlush();
}

/* Yeniden şekillendiğinde ne olacak */
void myReshape(GLsizei w, GLsizei h)
{
    /* matris işlemlerini yap */
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0, (GLdouble)w, 0.0, (GLdouble)h, -1.0, 1.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    /* arkaplan rengi ve bakış açısını ayarla */
    glViewport(0,0,w,h);
    glClearColor (0.0, 0.0, 0.0, 0.0);
    glClear(GL_COLOR_BUFFER_BIT);
    glFlush();
    /* Pencere boyutlarını yeniden yapılandırıyoruz */
    ww = w;
    wh = h;
}
/* Uygulama başlatıldığında birtakım ayarlamalar yapıyoruz */
void myinit(void)
{
    glViewport(0,0,ww,wh);
    /* Pick 2D clipping window to match size of screen window
    This choice avoids having to scale object coordinates
    each time window is resized */
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0, (GLdouble) ww , 0.0, (GLdouble) wh , -1.0, 1.0);
    /* Arkaplanı siyah olarak ayarlıyoruz ve pencereyi temizliyoruz */
    glClearColor (0.0, 0.0, 0.0, 0.0);
    glClear(GL_COLOR_BUFFER_BIT);
    glFlush();
    /* Reshape callback fonksiyonu */
    glutReshapeFunc(myReshape);
}
/* Fare tıklanınca ne olacak */
void mouse(int btn, int state, int x, int y)
{
    if(btn == GLUT_RIGHT_BUTTON && state == GLUT_DOWN) 
        exit(btn); // Pencereyi kapat
}
/* Ana Program */
void main(int argc, char** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
    glutCreateWindow("square");
    myinit ();
    glutReshapeFunc (myReshape);
    glutMouseFunc (mouse);
    glutDisplayFunc(drawSquare);
   
    glutMainLoop();
}

16 Nisan 2013 Salı

Opengl ile Menü Oluşturma

GLUT kütüphanesi ,interaktif kontrol için pop-up menü fonksiyonları sağlar. Şimdi bu fonksiyonları sırasıyla görelim.

glutCreateMenu(menu_callback_func):

Adından da anlaşılacağı üzere yeni bir menü oluşturmamızı sağlıyor. menu_callback_func callback fonksiyonumun adı. Siz farklı bir ad verebilirsiniz. 


void menu_callback_func ( int ID )
{
   
}

Callback fonksiyonumuz yukarıdaki formatta olacak. Herhangi bir değer döndürmüyor. (Yani void) Ayrıca bir adet int türü parametre alıyor. ID değeri menüye ait elemanların id değeridir.

Örnek :  

if(ID == 0)
   exit(0);

Yukarıdaki gibi bir kod farenin ilişkili butonuna tıklandığında ilgili id değerine (mesela çık) basıldığında pencereyi kapatır. Siz de buna benzer komutlar yazabilirsiniz.


glutAddMenuEntry ( const char *label, int value ): Menüye yeni eleman ekliyor.

- label: Menü biriminin kullanıcıya gösterilen ismidir.
- value: Bu birim seçildiğinde ID’si , menü callback fonksiyonuna gönderilir.

Örneğin : glutAddMenuEntry("Kopyala",0);
glutAddMenuEntry("Kes",1);



glutAttachMenu ( int button ): 

button: Menu ile hangi fare butonu ilişkilendirileceği belirleniyor. Aşağıdaki enum değerlerden birini parametre kısmına eklemelisiniz.

GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, GLUT_RIGHT_BUTTON

glutAddSubMenu( const char *label, int value ): Menü içerisinde alt menüler oluşturur.

Böyle bir alt menü oluşturmak için şöyle bir ifade kullanabilirsiniz:

int deneme = glutCreateMenu(menu);
glutAddSubMenu("Kategori adı", deneme);

Örnek menü programı : 


    int shrinkMenu = glutCreateMenu(processShrinkMenu);
    glutAddMenuEntry("Shrink",0);
    glutAddMenuEntry("NORMAL",1);

    int fillMenu = glutCreateMenu(processFillMenu);
    glutAddMenuEntry("Fill",3);
    glutAddMenuEntry("Line",4);

    int colorMenu = glutCreateMenu(processColorMenu);
    glutAddMenuEntry("Red",5);
    glutAddMenuEntry("Blue",6);
    glutAddMenuEntry("Green",7);
    glutAddMenuEntry("Orange",8);

    int mainMenu = glutCreateMenu(processMainMenu);
    glutAddSubMenu("Polygon Mode", fillMenu);
    glutAddSubMenu("Color", colorMenu);

    // menüyü farenin sağ tuşuna ilişkilendir
    glutAttachMenu(GLUT_RIGHT_BUTTON);

Programı çalıştırıp pencere üzerinde farenizin sağ tuşuna tıklarsanız aşağıdaki gibi bir ekranla karşılaşırsınız.

Ekran çıktısı : 






Opengl Uçan Çaydanlık Animasyonu c++


#include <GL/glut.h>


double x, y, z;           // mevcut çaydanlık pozisyonu (main'de başlatılıyor)

/* Görüntüleme fonksiyonu */
void display () {

    /* Pencereyi temizle */
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    /* Transform martisi türünü belirle */
    glMatrixMode(GL_MODELVIEW);

    /* Görüntüyü çiz */
    glPushMatrix();
    glTranslatef(x,y,z);
    glutWireTeapot(.5);
    glPopMatrix();

    /* OpenGL fonksiyonlarını sınırlı sürede çalışmaya zorlar */
    glFlush();
}
/* Animasyon fonksiyonu */
void animate () {

    /* Durum değişkenlerini güncelle */
    x += .001;
    y += .001;
    z -= .001;

    /* ekranı yenile */
    glutPostRedisplay();
}

void reshape ( int width, int height ) {

    /* viewport transformasyonunu tanımla */
    glViewport(0,0,width,height);

}

/* Ana Fonksiyon */
int main ( int argc, char * argv[] ) {

    /*  GLUT'u ilgili parametreleri kullanarak başlat */
    glutInit(&argc,argv);

    /* setup the size, position, and display mode for new windows */
   /* boyut, pozisyon ve görüntüleme modu için yeni pencereleri ayarla */
    glutInitWindowSize(500,500);
    glutInitWindowPosition(0,0);
    glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH);

    /* Uçan Çaydanlık başlında yeni bir pencere oluştur */
    glutCreateWindow("Uçan Çaydanlık");
    glutDisplayFunc(display);  // görüntüleme fonksiyonu
    glutReshapeFunc(reshape);   // pencerenin boyutu değiştiğinde meydana gelir.
    glutIdleFunc(animate);  /* boş fonksiyon yani herhangi bir olay meydana gelmediğinde oluşur animasyonlarda etkilidir */

    /* depth-buffering */
    glEnable(GL_DEPTH_TEST);

    /* Projeksiyon transformasyonunu tanımla */
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glFrustum(-1.0,1.0,-1.0,1.0,.5,3.0);

    /* görüntüleme transformasyonunu tanımla */
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(1.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0);

    /* durum değişkenlerine başlangıç değerlerini ata (çaydanlık pozisyonu) */
    x = 0;
    y = 0;
    z = 0;

    /*  GLUT'u olayları bekletmek için çağırır */
    glutMainLoop();
}

22 Ocak 2013 Salı

Javascript ile tarayıcı penceresinde kaydırma işlemleri

   Bu makalemde onscroll fonksiyonunu yakından tanıyacağız. Javascript fonksiyonlarından birisi olan onscroll tarayıcımızın sağ tarafındaki kaydırma çubuğunu aşağı veya yukarı doğru hareket ettirdiğimizde meydana gelen bir olaydır.(event) Gelin basit bir örnek üzerinden bu fonksiyonun ne iş yaptığını anlamaya çalışalım.


 <script>
      window.onscroll = function () {
          alert("Kaydırma çubuğunuzu kaydırdınız.");
      }
  </script> 

Yukarıdaki kodu sayfanıza yapıştırıp tarayıcının sağ tarafındaki kaydırma çubuğunu hareket ettirdiğinizde "Kaydırma çubuğunu kaydırdınız." şeklinde bir mesaj çıkacaktır. (Bu arada ekranınızın sağ tarafında kaydırma çubuğunun gözükebilmesi için dokümanın yüksekliğinin ekran yüksekliğinden fazla olması gerektiğini unutmayın.)

 <script>
      function yukariGit() {
          window.scrollTo(0, 0);
      }
        </script> 



<a href="javascript:yukariGit();">Yukayı git</a>

Yukarıdaki kodlara bir göz atalım. Bazen web sayfalarında dokümanın aşağı kısımlarında yukarı, yukarı git şeklinde yazılar veya yukarı ok işareti görürüz. Tıkladığımızda da dokümanın en üst tarafına geliriz. Yukarıdaki kod da benzer bir işi yapıyor. scrollTo fonksiyonuna x=genişlik, y=yükseklik olmak üzere farklı değerler verebilirsiniz. Böylece ekranın istediğiniz yerine gidebilirsiniz.

21 Ocak 2013 Pazartesi

Javascript ve C#'ı birlikte kullanmak

   Web programlama ile uğraşırken zaman zaman istemci ve sunucu işlemlerini bir arada yapmak isteyebiliriz. Örneğin sunucu tarafından javascript ile client-side işlemler yapmak veya javascript üzerinde sunucu kontrol ve değişkenlerine erişmek gibi.

Aslında ASP.NET sunucu kontrollerinin bir HTML karşılığı vardır. Örneğin Label sunucu kontrolü html tarafında span etiketine karşılık gelir. Bu yüzden ASP.NET kontrollerinde HTML olayları veya özelliklerini kullanabilirsiniz. Örneğin bir buton üzerinden gidelim. Butonda OnClientClick="test()" diyerek istemci tarafında tıklama olunca mesaj vermek istiyorum.

<script>
   function test(){
       alert("İstemci tarafında tıkladın.");
}
</script>

<asp:Button ID="Button1" onclick="Button1_Click" OnClientClick="test()" runat="server" Text="Button" />

Yukarıdaki kodu sayfanıza ekleyip çalıştırdıktan sonra butona tıklanınca tarayıcı "İstemci tarafında tıkladın." yazan bir pencere açacaktır. Sunucu tarafı da çalışacak orada da sayfaya "Sunucu tarafında tıkladın" yazacaktır.

protected void Button1_Click(object sender, EventArgs e)

        {
            Response.Write("Sunucu tarafında tıkladın");
        }

Tıklama haricinde başka bir olay daha ekleyelim. Fare üzerine gelince "fare üzerine geldi." şeklinde bir mesaj versin.

<script>
   function fareUzerineGeldi() {
          alert("Fare üzerine geldi.");
      }
</script>


<asp:Button ID="Button1" onmouseover="fareUzerineGeldi()" OnClientClick="test()" runat="server" 
Text="Button" onclick="Button1_Click" />


Butonun üzerine farenizi getirdiğinizde "Fare üzerine geldi." diyerek bir mesajla karşılaşıyorsunuz. HTML tarafında aşağıdaki forma dönüşmektedir.

 <input type="submit" name="Button1" value="Button" onclick="test();" id="Button1" onmouseover="fareUzerineGeldi()" />

Şimdi bir de C# tarafına göz atalım. Sunucudan javascript fonksiyonlarını nasıl çalıştırabiliriz. Aşağıdaki kodlara bir göz atalım.

protected void Button1_Click(object sender, EventArgs e) { ClientScript.RegisterClientScriptBlock(this.GetType(), "mesaj", "<script>alert('Merhaba')</script>"); }

Burada sunucu tarafından javascipt kodlarını ekleyerek çalıştırdık.

6 Ocak 2013 Pazar

Editör Ajax Kontrolü Türkçe Karakter Sorunu Çözüm Önerisi

Html editör kullanırken Türkçe karakter sorunu yaşıyorsanız eğer NoUnicode özelliğini True yapmanız sorununuzu çözebilir.