Loading...

21 Haziran 2007 Perşembe

Döndüüm :)

Evet Arkadaşlar Bir Süreliğine İzmire Gitmem Gerekti Bu Zaman Zarfında Makalelerde Durdu.Dün Evime Dönüş Yaptım :P,Bu Sırada Yeni Bloglar Açtım.Belki İlginizi Çeker.Bağlantılarım Kısmında Bloglara Ulaşabilirsiniz.

10 Haziran 2007 Pazar

Visual C# ile Programlamaya Giriş || C#

htt://www.csharpnedir.com adresinden alıntıdır.

Visual C#, Visual
Studio ailesinin yeni üyesidir, bu yeni dil c ve c++ temelleri üzerine kurulmasına
rağmen komponent temelli programlama tekniğini geliştirmek için birtakım yeni
özellikler eklenmiştir. C# dilinin sentaksı C ve C++ programcılarına çok tanıdık
gelecektir. Bundan şüpheniz olmasın.






Genel Açıklamalar


Bu yazıda göreceğimiz
basit uygulamada QuickSort algoritmasını kullanarak nasıl basit bir C# projesinin
oluşturulduğunu göreceğiz. Bu uygulamada bir c# programında en sık kullanılan
yapılardan olan dosyaya ve console ekranına okuma/yazma, fonksiyon oluşturma ve
basit dizilerin kullanımı açıklanacaktır.



Bu yazı kesinlikle C# dilinin tüm özelliklerinin anlatıldığı yazı değildir. Bu
yazı C# dilini öğrenmek için sizlere bir başlangıç noktası sunar.


Önerilen Kaynaklar


Visual Studio.NET
(Beta 2 veya sonrası) örnek kaynak kodu derlemeniz için gereklidir. C/C++ bilgisi
size bu yazıyı anlamanızda yardımcı olabilir ama gerekli değildir.


Adım
1. Projeye Başlama


Visual Studio ile
program geliştirme organizasyonu solution(çözüm) çalışma alanları üzerindendir. Solution
dediğimiz ortam bir veya daha fazla projeyi içerebilir. Bu makale için tek bir
C# projesi içeren bir solution oluşturacağız.



Yeni bir proje
oluşturmak



  1. Visual Studio.NET
    ortamından, class=command>File | New | Project menülerini
    seçin.



  2. Soldan(Project
    Types) Visual C#, sağdan(Templates) ise Console
    Application
    butonlarını seçin.



  3. Projenizin
    adını belirleyin ve projenizin hangi klasörde saklanacağını belirleyin.Bu
    klasör Visual Studio tarafından otomatik oluşturulur.Proje adı olarak ben
    quicksort yazıyorum.Siz istediğiniz adı verebilirsiniz.



  4. OK tuşuna basalım
    ve yola koyulalım.


"Visual C#
Solution" ortamımız


Visual Studio.NET
içinde bir Visual C# projesi bulunan bir solution oluşturdu. Proje assemblyinfo.cs
ve class1.cs adlı iki tane dosya içermektedir.

Bundan sonraki
adımlarda projemizi nasıl derleyeceğimizi ve bu iki dosya hakkında detaylı bilgiyi
öğreneceğiz.




Adım
2. Hello, World!


Kusura
bakmayın ama geleneği
bozmadan ilk defa C programlama dili ile yazılmış olan "Hello, World!" programını
c# ile yazacağız. Bu bir gelenektir ve her yeni bir dili öğrenmeye başladığınızda
bunu siz de göreceksiniz.



Kaynak Kodu Değiştirme



  1. Solution Explorer
    'da bulunan 'class1.cs'dosyasına çift tıklayın. Solution Explorer 'ı göremiyorsanız,
    view menüsünü kullanarak görünür hale getirebilirsiniz.

  2. Şablonla oluşturulmuş
    koda aşağıda kırmızı ile yazılmış kısmı ekleyin (class1.cs).

    using
    System;



    namespace quicksort

    {

        ///



        /// Summary description for Class1.
        ///


        class Class1

        {

            static void Main(string[]
    args)

            {

                //

                // TODO: Add code to start application
    here

                //

                Console.WriteLine
    ("Hello, C#.NET World!");


            }

        }

    }


  3. Dikkat edin
    siz kodunuzu yazdıkça Visual Studio size sınıflar ve fonksiyon adları hakkında
    bilgi verir, çünkü .NET Framework tip bilgisini yayınlamaktadır.








Uygulamamızı Derleyelim



  1. Programımızda
    değişiklik yaptığımıza göre artık Build menüsünden Build 'ı seçerek programımızı
    derleyebiliriz.



  2. Hata ve mesajlar
    en altta bulunan "Output Window" denilen pencerede görünür. Eğer
    herhangi bir hata yoksa uygulamamızı Debug menüsü altında bulunan 'Start
    without Debugging
    ' menüsüne tıklayarak çalıştırabiliriz.






Programımızın
Çıktısı


Aşağıda programımızın
Visual C# içinden çalıştırılarak oluşturulmuş çıktısının ekran görüntüsü mevcuttur.



Değişiklikleri
Anlamak


class=keyword>System.Console sınıfına ait WriteLine()
fonksiyonu
kendisine argüman olarak gönderilen dizgeyi sonuna satır sonu karakteri de
ekleyerek ekrana yazar.
Bu
fonksiyon integer ve floating-point gibi diğer veri tiplerini de argüman olarak
alabilir.



Program belleğe
yüklendiğinde programın kontrolu Main() fonksiyonuna gelir. class=keyword>WriteLine() fonksiyonunu oraya yazmamızın
sebebi budur.



Adım
3. Programın Yapısı


Şimdi basit bir Hello World
uygulaması geliştirmiş olduk, şimdi de bir Visual C# uygulamasının basit
componentlerini inceleyelim.



Kaynak Kod Yorumları


// karakterlerinden
sonra gelen ve satırın sonuna kadar olan sözcükler yorum satırlarıdır ve C# derleyicisi
tarafından görünmezler. Aynı zamanda birden fazla satıra yorum eklemek istiyorsak
/* */ karakterleri arasına yorum yazarız.


// Bu satır derleyici
tarafından görülmez

/* Aynı zamanda bu blok da

derleyici tarafından görünmez*/



Using Komutu


.NET Framework geliştiricilere
yüzlerce yararlı sınıflar sunar. Mesela, Console sınıfı, console ekranına ait
girdi ve çıktıları işler. Bu sınıflar hiyerarşik bir ağaç içinde organize edilmiştir.
Aslında Console sınıfının tam ismi System.Console ' dur. Diğer sınıflar ise System.IO.FileStream
ve System.Collections.Queue. içindedirler.




using komutu bize
sınıfın ismini namespace(isim alanı) kullanmadan kullanabilmemizi sağlar.

Aşağıda kırmızı ile yazılan yazılar using komutunun uygulamasının sonucudur.

using
System;


class Class1

{

    static void Main(string[]
args)

    {

        System.Console.WriteLine ("Hello, C#.NET World!");

        Console.WriteLine
("Hello, C#.NET World!");


    }

}




Sınıf Bildirimi


C++ ve Visual Basic
'den farklı olarak C# 'da bütün fonksiyonlar bir sınıf içerisinde olmalıdır. C#
'da bir sınıf tanımlamak için class anahtar sözcüğü kullanılır.Bu durumda bizim
uygulamamızda, Class1 sınıfı Main() adında bir fonksiyon içerir. Eğer sınıf bildirimini
bir isim alanı blokları içine alırsak sınıflarımızı CSharp.QuickSortApp şeklinde
bir hiyerarşi içine alabiliriz.



Sınıflar hakkında çok derin bir bilgi vermeyi düşünmüyorum.Fakat bizim örneğimizin
neden bir parçası olduğunu açıklamakta fayda gördüm.


Main() Fonksiyonu


Program belleğe yüklendiğinde
Main() fonksiyonu programın kontrolünü eline alır, bu yüzden başlangıç kodlarımızı
daima Main() fonksiyonu içinde yazmalıyız. Komut satırı argümanları ise bir string
dizisi olan args dizisine aktarılır.(mesela: delete x ) Burada programımızın adı
delete ise x bir komut satırı argümanıdır.


Adım
4. Console Girişi


Şimdi işlemlerimize
bir QuickSrot uygulaması geliştirerek devam edelim. İlk yapmamız gereken kullanıcya
hedef ve kaynak dosyasının isimlerini sormak olacaktır.


Source Code Modifications



  1. class1.cs dosyasına
    aşağıda kırmızı ile yazılanları yazın. Burada sınıf ismi ve isimalanı ismi
    bizim için çok önemli değildir.

    // namespaces
    ekleme

    using System;



    // namespace tanımlama

    namespace MsdnAA

    {

        // uygulama sınıfı tanımlama

        class QuickSortApp

        {

            // uygulama oluşturma

            static void Main (string[] szArgs)

            {

                // Programın
    hakkında

                Console.WriteLine ("QuickSort
    C#.NET Sample Application\n");



                // kullanıcıdan bilgi alma

                Console.Write
    ("Source: ");

                string szSrcFile = Console.ReadLine
    ();

                Console.Write ("Output: ");

                string szDestFile = Console.ReadLine
    ();


            }

        }

    }





Console'dan Okuma


class=keyword>Console sınıfının ReadLine() metodu
kullanıcıya bir giriş ekranı sunar ve geriye kullanıcının girdiği dizgeyi(string)
geri döndürür.Bu metod bellek tahsisatını otomatik olarak kendi içinde yapmaktadır
ve .NET garbage collector mekanizması sayesinde iade etmeniz gereken herhangi
bir alan yoktur.


Program Çıktısı


Programı Debug
| Start Without Debugging
menülerini kullanarak çalıştırın.

Aşağıda programımızın son halinin çıktısını görüyorsunuz.





Adım

5. Dizilerin Kullanımı



Programımız
sıralama yapmadan önce girişten satırları alarak bir dizi içinde saklaması gerekir.
Şimdi .NET temel sınıflarından olan ArrayList sınıfını inceleyeceğiz.


Kaynak Kod Değişikliği



  1. class1.cs dosyası
    içinde aşağıda kırmızı ile gösterilen yerleri ekleyin.

    // isim alanı
    ekleme

    using System;

    using System.Collections;



    // isimalanı tanımlama

    namespace c#nedircom

    {

        // uygulama sınıfı tanımlama

        class QuickSortApp

        {

            // uygulama başlangıcı

            static void Main (string[] szArgs)

            {

               

                Console.WriteLine ("QuickSort
    C#.NET Sample Application\n");



                // Dosya isimlerini almak için
    komut yaz

                Console.Write ("Source: ");

                string szSrcFile = Console.ReadLine
    ();

                Console.Write ("Output: ");

                string szDestFile = Console.ReadLine
    ();



             
      // TODO: Read contents of source file

                ArrayList szContents = new ArrayList
    ();


            }

        }

    }




ArrayList sınıfının
kullanımı


ArrayList sınıfına
direkt ulaşabilmek için System.Collections isimalanını projemize using komutuyla
ekliyoruz. Bu sınıf dinamik olarak büyüyüp küçülebilen nesne dizileri için kullanılır.
Yeni bir eleman eklemek için basit bir şekilde Add() metodunu kullanabilirsiniz.
Bu diziye eklenen yeni eleman orijinal nesne için referans olarak kullanılır, ve
garbage collector alan iadesi için hazır olacaktır.


string szElement
= "insert-me";

ArrayList szArray = new ArrayList ();

szArray.Add (szElement);

Dizinin var olan bir
elemanına ulaşabilmek için, diziye ait Item() metoduna ulaşmak istediğimiz elemanın
sıra(index) numarasını geçebiliriz.Kısaca [] operatörlerini kullanarak da
istediğimiz elemana Item() metodunu kullanmadan da ulaşabiliriz.




Console.WriteLine
(szArray[2]);

Console.WriteLine (szArray.Item (2));

ArrayList
sınıfının daha birçok metodu vardır, ancak biz bu uygulamada sadece ekleme ve okuma yapacağız.
ArrayList sınıfına ait tüm metod ve özellikleri öğrenmek için MSDN kitaplığına
başvurabilirsiniz.




Adım
6. File Girdi/Çıktı(Input/Output)


Şimdi isterseniz dosyadan
okuma ve dosyaya yazma işlemlerini gerçekleştirelim. Dosyadaki her satırı okuyup,
bir string dizisinin her elemanını bir satır gelecek şekilde ekleyeceğiz.Sonraki
aşamada ise QuickSort algoritmasını kullanarak diziyi sıralı bir şekilde yazacağız.



Kaynak Kod Değişikliği



  1. class1.cs dosyasına
    aşağıda kırmızı ile yazılanları yazın. Burada sınıf ismi ve isimalanı ismi
    bizim için çok önemli değildir.

    // isimalanı
    ekleme

    using System;

    using System.Collections;

    class=newcode>using System.IO;





    namespace MsdnAA

    {



        class QuickSortApp

        {



            static void Main (string[] szArgs)

            {

             
      string szSrcLine;

                ArrayList szContents = new ArrayList
    ();

                FileStream fsInput = new FileStream
    (szSrcFile, FileMode.Open,FileAccess.Read);

                StreamReader srInput = new StreamReader
    (fsInput);

                while ((szSrcLine = srInput.ReadLine
    ()) != null)

                {

                    // dizinin sonuna
    ekleme 
                    szContents.Add (szSrcLine);

                }

                srInput.Close ();

                fsInput.Close ();



                // TODO: Buraya QuickSort fonksiyonu
    gelecek



                // sıraları satırları yazma

                FileStream fsOutput = new FileStream
    (szDestFile,FileMode.Create, FileAccess.Write);

                StreamWriter srOutput = new StreamWriter
    (fsOutput);

                for (int nIndex = 0; nIndex <
    szContents.Count; nIndex++)

                {

                    // hedef dosyaya
    satır yazma

                    srOutput.WriteLine
    (szContents[nIndex]);

                }

                srOutput.Close ();

                fsOutput.Close ();



                // başarıyı kullanıcıya bildirme

                Console.WriteLine ("\nThe sorted
    lines have been written.\n\n");


            }

        }

    }




Kaynak Dosyadan
Okuma


Kaynak dosyayı açmak
için FileStream sınıfını ve StreamReader sınıfını kullanarak ReadLine() metodu
ile dosyayı okuyoruz. ReadLine() metodunu dosyanın sonunu ifade eden NULL değerine
geri dönene kadar çağırıyoruz.Döngü içinde okunan satırları dizinin içine ekliyoruz
ve sonrada tüm nesneleri kapatıyoruz.




Hedef Dosyaya
Yazma


Dosyaya yazarken dizinin
sıralanmış olduğunu varsaydık ve öyle devam ettik. Aynı şeklide FileStream nesnesini
ve StreamWriter sınıfını kullanarak hedef dosyaya yazma işlemini yaptık.




Adım
7. Fonksiyon Yaratma


Son aşamada diziyi
QuickSort algoritması ile sıralayan fonksiyonu yazmaya geldi. Bu fonksiyonu uygulamamızın
ana sınıfının içine koyacağız.



Kaynak Kod Değişikliği



  1. class1.cs dosyasına
    aşağıda kırmızı ile yazılanları yazın. Burada sınıf ismi ve isimalanı ismi
    bizim için çok önemli değildir.

    // isim alanı
    ekleme

    using System;

    using System.Collections;

    using System.IO;





    namespace c#nedircom

    {



        class QuickSortApp

        {



            static void Main (string[] szArgs)

            {

                ... ... ...



             
      // QuickSort fonksiyonuna parametrelerin geçişi

                QuickSort (szContents, 0, szContents.Count
    - 1);




                ... ... ...

            }



            //
    QuickSort fonksiyonu

            static void QuickSort (ArrayList szArray, int
    nLower, int nUpper)

            {



                if (nLower < nUpper)

                {

                    // Ayırma ve sıralama
    işlemi

                    int nSplit = Partition
    (szArray, nLower, nUpper);

                    QuickSort (szArray,
    nLower, nSplit - 1);

                    QuickSort (szArray,
    nSplit + 1, nUpper);

                }

            }



            // QuickSort bölmelere ayırma

            static int Partition (ArrayList szArray, int
    nLower, int nUpper)

            {

                // İlk elemanı bulma

                int nLeft = nLower + 1;

                string szPivot = (string) szArray[nLower];

                int nRight = nUpper;



                // Dizi elemanlarını bölme

                string szSwap;

                while (nLeft <= nRight)

                {

                   

                    while (nLeft <=
    nRight)

                    {

                        if
    (((string) szArray[nLeft]).CompareTo (szPivot) > 0)

                         
      break;

                        nLeft
    = nLeft + 1;

                    }

                    while (nLeft <=
    nRight)

                    {

                        if
    (((string) szArray[nRight]).CompareTo (szPivot) <= 0)

                         
      break;

                        nRight
    = nRight - 1;

                    }



                    // Eğer uygunsa
    yer değiştirme işlemi yap

                    if (nLeft < nRight)

                    {

                        szSwap
    = (string) szArray[nLeft];

                        szArray[nLeft]
    = szArray[nRight];

                        szArray[nRight]
    = szSwap;

                        nLeft
    = nLeft + 1;

                        nRight
    = nRight - 1;

                    }

                }



                szSwap = (string) szArray[nLower];

                szArray[nLower] = szArray[nRight];

                szArray[nRight] = szSwap;

                return nRight;

            }


        }

    }




QuickSort() Fonksiyonu


Bu fonksiyon alt sınır,
üst sınır ve bir dizi olmak üzere 3 tane parametre almaktadır. QuickSort fonksiyonu
Partition() fonksiyonunu çağırarak diziyi iki parçaya ayırır. Bu parçaların birinde
belirlenen bir diziden önceki ,diğer parçasında ise sonraki elemanlar bulunur.
Sonra fonksiyon tekrar kendini çağırarak bu iki parçanın sıralanmasını sağlar.


Yukarıdaki kodlarda
yeni gördüğümüz metod CompareTo() metodudur. Bu metod iki string ifadesini karşılaştırır.


QuickSort Uygulamasını
Çalıştırma


Bu adım uygulamamızın
son adımı olacaktır.Şimdi programımızı derleyip çalıştırabiliriz. Programımızın
çalışması için bir text dosyası oluşturmamız sıralama yapabilmek için gerekecek.
Exe dosyasının bulunduğu dizini text dosyasını oluşturup programı çalıştıralım.



Programın Çıktısı


Aşağıda programımızı
çalıştırdıktan sonraki ekran çıktısı mevcuttur. Yukarıdaki ekranda ise output.txt
dosyasında meydana gelen değişiklikleri görebilirsiniz.



Adım
8. Debugger Kullanmak


Debugger aracı programımızın
problemlerini çözmek için önemli ve gerekli bir araçtır. İyi bir başlangıç yaptığımıza
göre son aşamada programımız içinde nasıl dolaşacağımıza ve QuickWatch' ı nasıl
kullanacağımıza bakalım.


Breakpoint' leri
Ayarlama


Program Debugger içinde
çalışırken eğer breakpoint olan bir noktaya gelinirse program sonlandırılır ve
debugger control 'ü bizim elimize geçer. Herhangi bir satıra breakpoint koymak
için ilgili satıra sağ tıklayıp aşağıdaki gibi Insert BreakPoint menüsüne tıklayın.



BreakPoint bulunan
satırlar kırmızı ile gösterilir. BreakPoint ' i kaldırmak için ilgili satıra
sağ tıklayıp Remove BreakPoint menüsünü seçin.





Program içinde
Adım Adım ilerlemek


Aşağıdaki şekilde
görüldüğü gibi bir breakpoint oluşturduktan sonra debugger ile programımızı çalıştıralım.
Debug menüsünden daha önceden de yaptığımızı gibi class=command>Start Without Debugging yerine Start
menüsüne tıklayın. Bu şekilde programı çalıştırdığımızda program debugger ile
çalışmaya başlayacaktır, ve breakpoint 'ler aktif olmaya başlayacaktır.



Program breakpoint 'in olduğu noktaya geldiğinde, debugger programın kontrolünü
alır. Aşağıdaki şekilde görüldüğü gibi sarı okla programın geldiği nokta gösterilir.



Kod içinde adım
adım ilerlemek için menü çubuğundan Debug | Step Over ' ı seçerek sarı okun
hareketini izleyin. class=command>Debug | Step Into komutu gitmek istediğimiz
fonksiyona gitmemizi sağlar. Aşağıda iki defa Step Over menüsünü seçtikten sonra
kaynak kodumuzun görüntüsü mevcuttur.





Eğer programımızın
diğer bir sonlandırıcı nedene (yeni bir breakpoint, exception , exit, debug)
gelene kadar devam etmesini istiyorsanız Debug | Continue menülerini seçin.





Değişken Değerlerini
Takip Etme


Debugger 'ın kontrolü
bizde iken farenin imlecini kaynak kodda istediğimiz değişken üzerine götürerek
değişkenin o anki değerini öğrenebiliriz.



Aynı zamanda bir
değişkene sağ tıklayarak QuickWatch menüsünü açabilirsiniz. QuickWatch ile değişken
hakkında daha detaylı bilgiler elde edebilirsiniz. Mesela diziler hakkında aşağıdaki
şekilde görüldüğü gibi bilgiler elde edilebilir.






Diğer Debugger
Araçları


Visual Studio yukarıda
bahsettiğimiz araçları dışında farklı araçlarda barındırır. Mesela Call Stack
Wiever aracı ile o an hangi fonksiyonun çağrıldığı ile ilgili bilgiyi elde edebilirsiniz.
Bellekteki değerleri ve bir prosesteki thread 'leri de aynı anda görebileceğimiz
araçlar mevcuttur.


Son Söz &
Sonuç


Bu yazının amacı sizlere
Visual Studio ile nasıl basit bir uygulamanın yapılacağını adım adım göstermekti.
Diğer .NET ve C# kaynaklarını araştırmak için sizi cesaretlendirebildiysek ne
mutlu bize. Bu yazıyı buraya kadar okuduğunuza göre en azından şu aşamada çalışan
bir projeniz var, istediğiniz gibi üzerinde değişiklikler yapıp sonucu görebilirsiniz.




Bu yazı "Microsoft MSDN Magazine" 'den Türkçeye
tercüme edilmiştir.

9 Haziran 2007 Cumartesi

Transparan Formlar || VB

İşletim Sistemlerinde Görmüşsünüzdür,Transparan Formları Şimdi Bunları Beraber Yapacağız.
Simdi "Biz bunu nasil yapariz?" derseniz, VB de bu islemi API ile yapabiliyoruz. Yani windows un kullandigi sekildeki gibi.

Gelelim isin koduna. Asagidaki API leri modulde tanımlayın.


Public Declare Function GetWindowLong Lib "User32.dll" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "User32.dll" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function SetLayeredWindowAttributes Lib "User32.dll" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Public Declare Function SetLayeredAttributes Lib "User32.dll" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Public Declare Function UpdateLayeredWindow Lib "User32.dll" (ByVal hWnd As Long, ByVal hdcDst As Long, pptDst As Any, psize As Any, ByVal hdcSrc As Long, pptSrc As Any, crKey As Long, ByVal pblend As Long, ByVal dwFlags As Long) As Long


Bunlarida yine module ekleyin.


Public Const GWL_STYLE = (-16)
Public Const GWL_EXSTYLE = (-20)
Public Const WS_EX_LAYERED = &H80000
Public Const ULW_COLORKEY = &H1
Public Const ULW_ALPHA = &H2
Public Const ULW_OPAQUE = &H4
Public Const AC_SRC_OVER = &H0
Public Const AC_SRC_ALPHA = &H1
Public Const AC_SRC_NO_PREMULT_ALPHA = &H1
Public Const AC_SRC_NO_ALPHA = &H2
Public Const AC_DST_NO_PREMULT_ALPHA = &H10
Public Const AC_DST_NO_ALPHA = &H20
Public Const LWA_COLORKEY = &H1
Public Const LWA_ALPHA = &H2


Simdi isi kolaylastirmak amaciyla function yapalim. Bu functionida module yazin.


Public Sub MakeTransparent(hWnd, Rate)
Dim WinInfo As Long
On Local Error Resume Next
WinInfo = GetWindowLong(hWnd, GWL_EXSTYLE)
WinInfo = WinInfo Or WS_EX_LAYERED
On Local Error Resume Next
SetWindowLong hWnd, GWL_EXSTYLE, WinInfo
On Local Error Resume Next
SetLayeredWindowAttributes hWnd, 0, Rate, LWA_ALPHA
End Sub


Sira geldi function i kullanmaya. Function çalisirken pencerenin daha dogrusu formun hWnd(Handle) numarasini alip formu transparan yapacağız. Buradaki rate ne diyeceksiniz. Rate saydam olma orani. Bunu 0 dan 254 e kadar sayı değeri olmak üzere ayarlayabilirsiniz.

Simdi biz fonksiyonu efekt olsun diye forma Fade In - Fade Out özelligi verelim.

Formun Load olayina;


For X = 0 To 254 Step -19
MakeTransparent Me.hWnd, X
Next
Me.Show


Formun Unload ve Terminate olayinada bu kodu yerlestirelim..


For X = 254 To 0 Step -19
MakeTransparent Me.hWnd, X
Next
End

!! Programi kapatirken End degilde Unload Me komutunu kullaniniz. !!

Iste bu kadar. Artik formunuz Fade In- Out seklinde açilip kapanacak. Bence bu güzel bi görünüm katacak programa.

Dikkat: Unutmayin ki bu API sadece Windows 2000, Windows XP ve üzeri sistemlerde mevcut aksi halde çalismaz(Gerçi fonksiyonda göz önünde bulundurmuyor)

Visual Basic'de OpenGL'e Giriş || VB

1. Visual Basic Menusunden Project --> References Bolumunden --- VB OpenGL API 1.2(ANSI) Secenegini Seçmeniz Gerekir.

2. Bir Form ismi Form1 bir Modul ismi Module1 ve bir de Timer ismi Timer1 koymanız gerekir.



'Forma Yazilacak Kisim Burdan itibaren Baslamaktadir....(Copy Paste yapsaniz yeterli olur.)

Option Explicit

Dim xAngle As GLfloat
Dim yAngle As GLfloat
Dim zAngle As GLfloat
Dim YScale As Long
Dim XScale As Long

Private Sub Form_Load()
Dim hGLRC As Long
Dim fAspect As GLfloat
Call InitializeArrays

Form1.ScaleMode = 3

xAngle = 0
yAngle = 0
zAngle = 0

SetupPixelFormat hDC

hGLRC = wglCreateContext(hDC)
wglMakeCurrent hDC, hGLRC
glEnable GL_DEPTH_TEST
glEnable GL_DITHER
glDepthFunc GL_LESS
glClearDepth 1
glClearColor 0, 0, 0, 0
glMatrixMode GL_PROJECTION
glLoadIdentity
If Form1.ScaleHeight > 0 Then
fAspect = Form1.ScaleWidth / Form1.ScaleHeight
Else
fAspect = 0
End If

gluPerspective 60, fAspect, 1, 2000
glViewport 0, 0, Form1.ScaleWidth, Form1.ScaleHeight


glMatrixMode GL_MODELVIEW
glLoadIdentity

glLightfv GL_LIGHT0, GL_POSITION, LightPos(0)

glEnable GL_LIGHTING
glEnable GL_LIGHT0
glShadeModel GL_SMOOTH
glFrontFace GL_CCW

glMaterialfv GL_FRONT, GL_SPECULAR, SpecRef(0)
glMateriali GL_FRONT, GL_SHININESS, 50

BuildCube

Form_Paint

End Sub
Private Sub Form_Paint()
Dim i As Integer
Dim a As Integer
Dim b As Integer
Dim c As Integer

glLoadIdentity
gluLookAt m_Translate_X, m_Translate_Y, m_Translate_Z, m_Translate_X + (100# * (Cos(m_camera_radsFromEast))), m_Translate_Y + m_camera_direction_y, m_Translate_Z - (100# * Sin(m_camera_radsFromEast)), 0#, 1#, 0#


glClear GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT
glPushMatrix
glTranslatef 0, 0, -3
glRotatef xAngle, 0.1, 0, 0
glRotatef yAngle, 0, 0.1, 0
glRotatef zAngle, 0, 0, 1

glCallList m_Cube
glPopMatrix

glPushMatrix
glTranslatef 0, -2, 0

glPopMatrix

SwapBuffers hDC

End Sub
Private Sub Form_Resize()

glViewport 0, 0, Form1.ScaleWidth, Form1.ScaleHeight
Form_Paint
End Sub
Private Sub Form_Unload(Cancel As Integer)
If hGLRC <> 0 Then
wglMakeCurrent 0, 0
wglDeleteContext hGLRC
End If

If hPalette <> 0 Then
DeleteObject hPalette
End If

End Sub
Sub BuildCube()
Dim i As Integer
Dim a As Integer
Dim b As Integer
Dim c As Integer

m_Cube = glGenLists(1)
glNewList m_Cube, GL_COMPILE_AND_EXECUTE

For i = 0 To TRIANGLE_COUNT - 1
a = index(i, 0)
b = index(i, 1)
c = index(i, 2)
Call RenderTriangle(a, b, c)
Next

glEnd
glEndList

End Sub

Private Sub Timer1_Timer()
YScale = YScale + 1
XScale = XScale + 1
yAngle = YScale
xAngle = XScale
If YScale = 359 Then
YScale = 0
XScale = 0
End If

Form_Paint

End Sub

'Forma Yazilacak Kisim Burda Sona erdi (Umarim Copy Paste Yapmissinizdir.)

-------------------------------------------------------------------------------------------------------------------------------------


'Burasida Module Yazilacak Kisim (yine Hatirlatirim Copy Paste Yapiniz.)

Option Explicit
Private Type PALETTEENTRY
peRed As Byte
peGreen As Byte
peBlue As Byte
peFlags As Byte
End Type
Private Type LOGPALETTE
palVersion As Integer
palNumEntries As Integer
palPalEntry(0 To 255) As PALETTEENTRY
End Type
Private Type PIXELFORMATDESCRIPTOR
nSize As Integer
nVersion As Integer
dwFlags As Long
iPixelType As Byte
cColorBits As Byte
cRedBits As Byte
cRedShift As Byte
cGreenBits As Byte
cGreenShift As Byte
cBlueBits As Byte
cBlueShift As Byte
cAlphaBits As Byte
cAlphaShift As Byte
cAccumBits As Byte
cAccumRedBits As Byte
cAccumGreenBits As Byte
cAccumBlueBits As Byte
cAccumAlpgaBits As Byte
cDepthBits As Byte
cStencilBits As Byte
cAuxBuffers As Byte
iLayerType As Byte
bReserved As Byte
dwLayerMask As Long
dwVisibleMask As Long
dwDamageMask As Long
End Type

Const PFD_TYPE_RGBA = 0
Const PFD_TYPE_COLORINDEX = 1
Const PFD_MAIN_PLANE = 0
Const PFD_DOUBLEBUFFER = 1
Const PFD_DRAW_TO_WINDOW = &H4
Const PFD_SUPPORT_OPENGL = &H20
Const PFD_NEED_PALETTE = &H80

Private Declare Function ChoosePixelFormat Lib "gdi32" (ByVal hDC As Long, pfd As PIXELFORMATDESCRIPTOR) As Long
Private Declare Function CreatePalette Lib "gdi32" (pPal As LOGPALETTE) As Long
Private Declare Sub DeleteObject Lib "gdi32" (hObject As Long)
Private Declare Sub DescribePixelFormat Lib "gdi32" (ByVal hDC As Long, ByVal PixelFormat As Long, ByVal nBytes As Long, pfd As PIXELFORMATDESCRIPTOR)
Private Declare Function GetDC Lib "gdi32" (ByVal hWnd As Long) As Long
Private Declare Function GetPixelFormat Lib "gdi32" (ByVal hDC As Long) As Long
Private Declare Sub GetSystemPaletteEntries Lib "gdi32" (ByVal hDC As Long, ByVal start As Long, ByVal entries As Long, ByVal ptrEntries As Long)
Private Declare Sub RealizePalette Lib "gdi32" (ByVal hPalette As Long)
Private Declare Sub SelectPalette Lib "gdi32" (ByVal hDC As Long, ByVal hPalette As Long, ByVal bln As Long)
Private Declare Function SetPixelFormat Lib "gdi32" (ByVal hDC As Long, ByVal i As Long, pfd As PIXELFORMATDESCRIPTOR) As Boolean
Private Declare Sub SwapBuffers Lib "gdi32" (ByVal hDC As Long)
Private Declare Function wglCreateContext Lib "OpenGL32" (ByVal hDC As Long) As Long
Private Declare Sub wglDeleteContext Lib "OpenGL32" (ByVal hContext As Long)
Private Declare Sub wglMakeCurrent Lib "OpenGL32" (ByVal l1 As Long, ByVal l2 As Long)

Public hPalette As Long
Public hGLRC As Long

Public LightPos(3) As GLfloat
Public SpecRef(3) As GLfloat
Public Diffuse(3) As GLfloat

Public Const TRIANGLE_COUNT = 12

Public vdata(23, 2) As GLfloat
Public vcolor(23, 2) As GLfloat
Public index(TRIANGLE_COUNT, 3) As GLfloat
Public m_Grid As Integer
Public m_Cube As Integer
Public m_Translate_X As Integer
Public m_Translate_Y As Integer
Public m_Translate_Z As Integer
Public m_camera_radsFromEast As GLfloat
Public m_translationUnit As Double
Public m_camera_direction_y As Integer

Sub FatalError(ByVal strMessage As String)
MsgBox "Fatal Error: " & strMessage, vbCritical + vbApplicationModal + vbOKOnly + vbDefaultButton1, "Fatal Error In " & App.Title
Unload frmMain
Set frmMain = Nothing
End
End Sub
Sub SetupPixelFormat(ByVal hDC As Long)
Dim pfd As PIXELFORMATDESCRIPTOR
Dim PixelFormat As Integer
pfd.nSize = Len(pfd)
pfd.nVersion = 1
pfd.dwFlags = PFD_SUPPORT_OPENGL Or PFD_DRAW_TO_WINDOW Or PFD_DOUBLEBUFFER Or PFD_TYPE_RGBA
pfd.iPixelType = PFD_TYPE_RGBA
pfd.cColorBits = 24
pfd.cDepthBits = 24
pfd.iLayerType = PFD_MAIN_PLANE
PixelFormat = ChoosePixelFormat(hDC, pfd)
If PixelFormat = 0 Then FatalError "Could not retrieve pixel format!"
SetPixelFormat hDC, PixelFormat, pfd
End Sub
Sub SetupPalette(ByVal lhDC As Long)
Dim PixelFormat As Long
Dim pfd As PIXELFORMATDESCRIPTOR
Dim pPal As LOGPALETTE
Dim PaletteSize As Long
PixelFormat = GetPixelFormat(lhDC)
DescribePixelFormat lhDC, PixelFormat, Len(pfd), pfd
If (pfd.dwFlags And PFD_NEED_PALETTE) <> 0 Then
PaletteSize = 2 ^ pfd.cColorBits
Else
Exit Sub
End If

pPal.palVersion = &H300
pPal.palNumEntries = PaletteSize
Dim redMask As Long
Dim GreenMask As Long
Dim BlueMask As Long
Dim i As Long
redMask = 2 ^ pfd.cRedBits - 1
GreenMask = 2 ^ pfd.cGreenBits - 1
BlueMask = 2 ^ pfd.cBlueBits - 1
For i = 0 To PaletteSize - 1
With pPal.palPalEntry(i)
.peRed = i
.peGreen = i
.peBlue = i
.peFlags = 0
End With
Next
GetSystemPaletteEntries frmMain.hDC, 0, 256, VarPtr(pPal.palPalEntry(0))
hPalette = CreatePalette(pPal)
If hPalette <> 0 Then
SelectPalette lhDC, hPalette, False
RealizePalette lhDC
End If
End Sub

Public Sub InitializeArrays()
m_Translate_X = 0
m_Translate_Z = 5
m_translationUnit = 1
m_camera_direction_y = 0
m_camera_radsFromEast = 1.56

LightPos(0) = 0
LightPos(1) = 2
LightPos(2) = 2
LightPos(3) = 1

SpecRef(0) = 1#
SpecRef(1) = 0#
SpecRef(2) = 0#
SpecRef(3) = 1#


'Front (0-3)
vdata(0, 0) = 1
vdata(0, 1) = 1
vdata(0, 2) = 1
vdata(1, 0) = 1
vdata(1, 1) = -1
vdata(1, 2) = 1
vdata(2, 0) = -1
vdata(2, 1) = -1
vdata(2, 2) = 1
vdata(3, 0) = -1
vdata(3, 1) = 1
vdata(3, 2) = 1

'back (4-7)
vdata(4, 0) = 1#
vdata(4, 1) = 1#
vdata(4, 2) = -1#
vdata(5, 0) = 1#
vdata(5, 1) = -1#
vdata(5, 2) = -1#
vdata(6, 0) = -1#
vdata(6, 1) = -1#
vdata(6, 2) = -1#
vdata(7, 0) = -1#
vdata(7, 1) = 1#
vdata(7, 2) = -1#
'right (8-11)
vdata(8, 0) = 1#
vdata(8, 1) = 1#
vdata(8, 2) = 1#
vdata(9, 0) = 1#
vdata(9, 1) = 1#
vdata(9, 2) = -1#
vdata(10, 0) = 1#
vdata(10, 1) = -1#
vdata(10, 2) = -1#
vdata(11, 0) = 1#
vdata(11, 1) = -1#
vdata(11, 2) = 1#
'left (12-15)
vdata(12, 0) = -1#
vdata(12, 1) = 1#
vdata(12, 2) = 1#
vdata(13, 0) = -1#
vdata(13, 1) = 1#
vdata(13, 2) = -1#
vdata(14, 0) = -1#
vdata(14, 1) = -1#
vdata(14, 2) = -1#
vdata(15, 0) = -1#
vdata(15, 1) = -1#
vdata(15, 2) = 1#

'Top (16-20)
vdata(16, 0) = 1#
vdata(16, 1) = 1#
vdata(16, 2) = 1#
vdata(17, 0) = 1#
vdata(17, 1) = 1#
vdata(17, 2) = -1#
vdata(18, 0) = -1#
vdata(18, 1) = 1#
vdata(18, 2) = -1#
vdata(19, 0) = -1#
vdata(19, 1) = 1#
vdata(19, 2) = 1#

'Botton
vdata(20, 0) = 1#
vdata(20, 1) = -1#
vdata(20, 2) = 1#
vdata(21, 0) = 1#
vdata(21, 1) = -1#
vdata(21, 2) = -1#
vdata(22, 0) = -1#
vdata(22, 1) = -1#
vdata(22, 2) = -1#
vdata(23, 0) = -1#
vdata(23, 1) = -1#
vdata(23, 2) = 1#


'Index
'front
index(0, 0) = 0
index(0, 1) = 1
index(0, 2) = 2
index(1, 0) = 0
index(1, 1) = 2
index(1, 2) = 3
'Back
index(2, 0) = 4
index(2, 1) = 6
index(2, 2) = 5
index(3, 0) = 4
index(3, 1) = 7
index(3, 2) = 6
'Right
index(4, 0) = 8
index(4, 1) = 9
index(4, 2) = 10
index(5, 0) = 8
index(5, 1) = 10
index(5, 2) = 11
'Left
index(6, 0) = 12
index(6, 1) = 14
index(6, 2) = 13
index(7, 0) = 12
index(7, 1) = 15
index(7, 2) = 14
'Top
index(8, 0) = 16
index(8, 1) = 18
index(8, 2) = 17
index(9, 0) = 16
index(9, 1) = 19
index(9, 2) = 18
'Bottom
index(10, 0) = 20
index(10, 1) = 21
index(10, 2) = 22
index(11, 0) = 20
index(11, 1) = 22
index(11, 2) = 23

'Color
'front
vcolor(0, 0) = 1
vcolor(0, 1) = 1
vcolor(0, 2) = 1
vcolor(1, 0) = 1
vcolor(1, 1) = 0
vcolor(1, 2) = 1
vcolor(2, 0) = 0
vcolor(2, 1) = 0
vcolor(2, 2) = 1
vcolor(3, 0) = 0
vcolor(3, 1) = 1
vcolor(3, 2) = 1
'back
vcolor(4, 0) = 1#
vcolor(4, 1) = 1#
vcolor(4, 2) = 0#
vcolor(5, 0) = 1#
vcolor(5, 1) = 0#
vcolor(5, 2) = 0#
vcolor(6, 0) = 0#
vcolor(6, 1) = 0#
vcolor(6, 2) = 0#
vcolor(7, 0) = 0#
vcolor(7, 1) = 1#
vcolor(7, 2) = 0#
'right
vcolor(8, 0) = 1#
vcolor(8, 1) = 1#
vcolor(8, 2) = 1#
vcolor(9, 0) = 1#
vcolor(9, 1) = 1#
vcolor(9, 2) = 0#
vcolor(10, 0) = 1#
vcolor(10, 1) = 0#
vcolor(10, 2) = 0#
vcolor(11, 0) = 1#
vcolor(11, 1) = 0#
vcolor(11, 2) = 1#
'left
vcolor(12, 0) = 0#
vcolor(12, 1) = 0.1
vcolor(12, 2) = 1#
vcolor(13, 0) = 0#
vcolor(13, 1) = 1#
vcolor(13, 2) = 0#
vcolor(14, 0) = 0#
vcolor(14, 1) = 0#
vcolor(14, 2) = 0#
vcolor(15, 0) = 0#
vcolor(15, 1) = 0#
vcolor(15, 2) = 1#
'Top
vcolor(16, 0) = 1#
vcolor(16, 1) = 1#
vcolor(16, 2) = 1#
vcolor(17, 0) = 1#
vcolor(17, 1) = 1#
vcolor(17, 2) = 0#
vcolor(18, 0) = 0#
vcolor(18, 1) = 1#
vcolor(18, 2) = 0#
vcolor(19, 0) = 0#
vcolor(19, 1) = 1#
vcolor(19, 2) = 1#
'Bottom
vcolor(20, 0) = 1#
vcolor(20, 1) = 0#
vcolor(20, 2) = 1#
vcolor(21, 0) = 1#
vcolor(21, 1) = 0#
vcolor(21, 2) = 0#
vcolor(22, 0) = 0#
vcolor(22, 1) = 0#
vcolor(22, 2) = 0#
vcolor(23, 0) = 0#
vcolor(23, 1) = 0#
vcolor(23, 2) = 1#


End Sub

Public Sub RenderTriangle(a As Integer, b As Integer, c As Integer)
Dim x1 As GLfloat
Dim y1 As GLfloat
Dim z1 As GLfloat
Dim lRC As Long

Dim x2 As GLfloat
Dim y2 As GLfloat
Dim z2 As GLfloat

Dim x3 As GLfloat
Dim y3 As GLfloat
Dim z3 As GLfloat

Dim v1(3) As GLfloat
Dim v2(3) As GLfloat
Dim v3(3) As GLfloat

Dim v(3) As GLfloat
Dim w(3) As GLfloat
Dim out(3) As GLfloat

Dim r1 As GLfloat
Dim g1 As GLfloat
Dim b1 As GLfloat

Dim r2 As GLfloat
Dim g2 As GLfloat
Dim b2 As GLfloat

Dim r3 As GLfloat
Dim g3 As GLfloat
Dim b3 As GLfloat

b1 = vcolor(a, 1)
g1 = vcolor(a, 2)

r2 = vcolor(b, 0)
b2 = vcolor(b, 1)
g2 = vcolor(b, 2)

r3 = vcolor(c, 0)
b3 = vcolor(c, 1)
g3 = vcolor(c, 2)

v1(0) = vdata(a, 0)
v1(1) = vdata(a, 1)
v1(2) = vdata(a, 2)

x1 = vdata(a, 0)
y1 = vdata(a, 1)
z1 = vdata(a, 2)

v2(0) = vdata(b, 0)
v2(1) = vdata(b, 1)
v2(2) = vdata(b, 2)

x2 = vdata(b, 0)
y2 = vdata(b, 1)
z2 = vdata(b, 2)

v3(0) = vdata(c, 0)
v3(1) = vdata(c, 1)
v3(2) = vdata(c, 2)

x3 = vdata(c, 0)
y3 = vdata(c, 1)
z3 = vdata(c, 2)
'--------------------------------------------------------------------


v(0) = x2 - x1
v(1) = y2 - y1
v(2) = z2 - z1

w(0) = x3 - x2
w(1) = y3 - y2
w(2) = z3 - z2

Call normcrossprod(v, w, out)

glBegin (GL_TRIANGLES)
'Flip the normal
glNormal3f -1 * out(0), -1 * out(1), -1 * out(2)
Diffuse(0) = r1
Diffuse(1) = b1
Diffuse(2) = g1
Diffuse(3) = 1
glMaterialfv GL_FRONT, GL_AMBIENT_AND_DIFFUSE, Diffuse(0)
glVertex3f v1(0), v1(1), v1(2)
Diffuse(0) = r2
Diffuse(1) = b2
Diffuse(2) = g2
Diffuse(3) = 1
glMaterialfv GL_FRONT, GL_AMBIENT_AND_DIFFUSE, Diffuse(0)
glVertex3f v2(0), v2(1), v2(2)
Diffuse(0) = r3
Diffuse(1) = b3
Diffuse(2) = g3
Diffuse(3) = 1
glMaterialfv GL_FRONT, GL_AMBIENT_AND_DIFFUSE, Diffuse(0)
glVertex3f v3(0), v3(1), v3(2)
glEnd

End Sub

Public Sub normalize(out() As GLfloat)
Dim d As GLfloat
d = Sqr(out(0) * out(0) + out(1) * out(1) + out(2) * out(2))
If (d = 0) Then
Exit Sub
End If
out(0) = out(0) / d
out(1) = out(1) / d
out(2) = out(2) / d

End Sub

Public Sub normcrossprod(v() As GLfloat, w() As GLfloat, out() As GLfloat)
'[Vx Vy Vz] X [Wx Wy Wz] =[(Vy*Wz-Wy*Vz),(Wx*Vz-Vx*Wz),(Vx*Wy-Wx*Vy)]
out(0) = v(1) * w(2) - w(1) * v(2)
out(1) = w(0) * v(2) - v(0) * w(2)
out(2) = v(0) * w(1) - w(0) * v(1)
Call normalize(out)

End Sub


'Module ve Programa yazilacaklar bu kadar umarim isinize yarar

ASP'de Güvenlik

Flood DDOS Koruması
Oncelikle Sayfanıza Ddos saldırısı yapanlardan yada sayfanızı durmadan yenıyenlerden kurtulmak için yapılmış ufak olsada bir önlem..

Öncelikle
If CInt(SESSION("koru" ))> 10 Then 'Ö10 yazan kısmı kendinzie göre değiştirebilirsiniz. Bu 10 Sayfanızın yenilenme oranıdır .. yani kişi saldırı ve sayfa yenileme sayısını secersiniz..
suanki haliyle 10 defa saldırı yada refresh yapılırsa kişi siteden ban'lanır.

Session.TimeOut=1
1 yazan yer ise saldırı yapan kişinin siteden kaç dk uzaklastırılması gerektiğini belirler.. ve dakika bazındadır (Şuanda 1 dk)

ve diğer kalan kısımlarıda kendinize göre ayarlayabilirsiniz

Alıntı:
< %

If SESSION("koru" )="" Then '
SESSION("koru" )=0
Else
SESSION("koru" )= SESSION("koru" ) + 1
End If

If CInt(SESSION("koru" ))> 10 Then '
Session.TimeOut=1
Response.Write("< title> Flood Korumasi < / title>")
RESPONSE.Write("

Flood Korumasi Devrede !
")
Response.Write("Kisa Bir Süreligine Siteden Uzaklastirldiniz.")
Response.Write("

Nedenleri Sunlar olabilir

1. Siteye ddos Saldirsi yapmaniz
2.Siteyi Belirli zaman içerisinde Durmadan yenilemeniz
3.Siteye her hangi bi saldirida bulunmaniz.
")
RESPONSE.End
End If
%>

SQL INJECTON'DAN KORUNMA

Bir sitede bulunun ve önemli olan açıklardan birisidir..
mesela anasayfamız default.asp olsun ve anasayfamzıdan bi sayfa cagırdıgımızı war sayalım.. bu sayfamızda gel.asp?id=457 olsun .. yapmanız geren sey cagırdıgımız sayfaya kodları eklemek yada sizin REQUEST.QUERYSTRING kodunuzla yer değiştirmeniz gerekmektedir.



ASP Kodu:
< %
ID = REQUEST.QUERYSTRING("ID" )
IF Not IsNumeric(REQUEST.QUERYSTRING("ID" ) ) THEN
response.write "
Girdiğiniz ID geçersizdir
Geçerli bir ID numarası girin
"
response.end
END IF
%>


Uye Girişlerinde 'or' açığını kapama

öncelikle bu kısmı sayfnın en üstüne ekleyebilir yada include edebilirsin

ASP Kodu:
< %
function guvenlik(genel )
genel = Replace (genel ,"<","",1,-1,1 )
genel = Replace (genel ,"=","",1,-1,1 )
genel = Replace (genel ,"$","",1,-1,1 )
genel = Replace (genel ,">","",1,-1,1 )
genel = Replace (genel ,"%","",1,-1,1 )
genel = Replace (genel ,"'","",1,-1,1 )
guvenlik=genel
end function
%>

daha sonra uyelerin giriş yaptıgın kısımda yani k.adı ve şifreleri request ile çağırdıgın formlara eklemen gereken kodlar aşagıdakilerdir.. bunu eklemenin sebebi zararlı kodları temizlemektir.


ASP Kodu:
< %
kadi = guvenlik(Request.Form("kadi" ) )
sifre = guvenlik(Request.Form("sifre" ) )
%>

Şimdilik Aklımda olanlar bunlar neyse Aklıma Geldikce Eklerim ..

7 Haziran 2007 Perşembe

Split Fonksiyonu || VB

Visual Basicdeki bu fonksiyon kullanılarak , belirli bir karakter ile ayrılan metinleri, bileşenlerine ayrılabilmektedir.

Form üzerine 1 adet TextBox ve bir adet ListBox yerleştirelim.


Private Sub Text1_Change()

Dim vField As Variant

List1.Clear

If InStr(1, Trim(Text1), ";") Then

For Each vField In Split(Trim(Text1), ";")

List1.AddItem CStr(vField)

Next

End If

End Sub

Bir Kaç Püf Detay,İpucu Yeni Başlayanlar İçin || VB

Yeni başlayanlar için ipuçları

Listbox'a degisik renklerde item nasıl eklenir?
MSFlexGrid control kullanın

Form close butonu nasıl çalistirilir?
dim bClose as Boolean
Form'un QueryUnload event'ine ekle:
If bClose = false then cancel = true

Bir combo'nun içini diger bir combo'dan aldiklarinizla nasıl doldurursunuz?
Sub comboA_click()
comboB.text = comboA.text
End sub

Eger ComboA'daki seçili degerlerin ComboB'ye aktarilmasini istiyorsaniz
Sub comboA_click()
comboB.AddItem comboA.text
end sub


Birden fazla sütun içeren combolar nasıl yapılır?
Projenize Microsoft Forms 2.0 control ekleyin, oradaki
combo multi-column destekler.

Combo1.Clear
Combo1.ColumnCount = 2
Combo1.ListWidth = "6 cm" 'Total genislik
Combo1.ColumnWidths = "2 cm;4 cm" 'sütun genisligi
Combo1.AddItem "Ivir zivir"
Combo1.List(0, 1) = "Ivir zivir"


Dikine uzanan label nasıl yapılır?

Private Sub Form_Activate()
Dim s As String
Label1.Caption = "Visual Basic 2000"
For i = 1 To Len(Label1)
s = s & Mid$(Label1, i, 1) & vbCrLf
Next
Label1 = s
End Sub

dikkat: Label'i dikine çekmelisiniz

Joker karakterler kullanarak string nasıl aranır?


Dim Mystr As String
Mystr = "Hakan"
If Mystr Like "H*" Then
MsgBox "Bulundu"
Else
MsgBox "Bulunamadi"
End If


Her dile uyumlu tarih nasıl formatlanir?
Command1.Caption = Format$(Date, "Short Date")

Uyari isareti olan (X) mesaj kutusu nasıl yapılır?

MsgBox "Mesaj Buraya!!", vbCritical, "Önemli"

Içine tab yerlestirebileceginiz text kutulari nasıl yapılır?
Bir form içindeki tüm kontrollerin tabstoplarini False'e esitleyin
Text kutulari için kisayol tuslari nasıl belirlenir?
Kisayol tusuna sahip bir label hazirlayin ve label'in tabindex'ini textbox'un tabindexinden
bir asagiya esitleyin.

Command butondan popup menü nasıl yapılır?

Öncelikle menü editör ile bir menü yaratin.
Asagidaki gibi:

Button Menu (Menu name: mnuBtn, Visible: False - Unchecked)
....SubMenu Item 1 (Menu name: mnuSub, Index: 0)
....SubMenu Item 2 (Menu name: mnuSub, Index: 1)
....SubMenu Item 3 (Menu name: mnuSub, Index: 2)
....SubMenu Item 4 (Menu name: mnuSub, Index: 3)


ve bir tane de command button hazirlayin ve kodu yerlestirin:

Private Sub mnuSub_Click(Index As Integer)

Call MsgBox("Kliklenen menü: " & Index + 1, vbExclamation)

End Sub

Private Sub Command1_Click()
Call PopupMenu(mnuBtn)
End Sub

Not: Isterseniz daha güzel etki için "Call PopupMenu(mnuBtn)" çagrisi yerine

Call PopupMenu(Menu:=mnuBtn, X:=Command1.Left, Y:=Command1.Top + _
Command1.Height)

çagrisini yada;

Call PopupMenu(mnuBtn, vbPopupMenuCenterAlign, Command1.Left + _
(Command1.Width / 2), Command1.Top + Command1.Height)

çagrisini kullanin.


Text kutusunda olan degisiklik nasıl farkedilir?


'Amaç kullaniciyi yaptigi degisiklikler konusunda programi kapatmadan uyarmaktir.

Public Degisti As Boolean 'Bu degisken textbox'ta herhangi bir degisiklik olup olmadigini tutar.
Private Sub Text1_Change()
Degisti= True
End SubPrivate

Sub Form_Unload(Cancel As Boolean)
If Degisti Then
If Msgbox("Degisiklikler kaydedilsin mi?", vbYesNo, "Kayit'") = vbYes Then
'Buraya kaydetme ile ilgili kodlar gelecek
Degisti = False
' Degisti degerini tekrar False yap ki bir sonraki degisiklikte tekrar çalisabilsin. (Bu Önemli!!!!)
'Bunu sadece buradaki If - End If blogu arasina yaz
End If
End If
End Sub

Listbox'a bir text dosyasi içerigi nasıl yüklenir?
Private Sub Command1_Click()
Dim BulunanKelimeler As String
Open "C:\test.txt" For Input As #1
List1.Clear
While Not EOF(1)
Input #1, StringHold
List1.AddItem BulunanKelimeler
Wend
Close #1
End Sub


Textbox ve Combobox için Undo (geri al) fonksiyonu nasıl kullanılır?

'Bir Windows API undo islemi yapar

'asagidaki deklerasyonlari yaz
Declare Function SendMessage Lib "User" (ByVal hWnd As _
Integer, ByVal wMsg As Integer, ByVal wParam As _
Integer, lParam As Any) As Long

'asagidaki degismezleri yaz

Global Const WM_USER = &h400
Global Const EM_UNDO = WM_USER + 23

' Undo Sub 'lara asagidaki kodu yaz
UndoResult = SendMessage(myControl.hWnd, EM_UNDO, 0, 0)

'UndoResult = -1 olursa hata var demektir
'UndoResult sadece bir rakamdir ve hiç bir önemi yoktur. Sadece yer tutmasi için yazilir.
'VB'nin buna benzer gariplikleri vardir. Bir amaci varsa da ben bilmiyorum


Clipboard'dan text nasıl kopyalanir?
'Textbox'ta texti isaretle ve isaretlenen yeri clipboard'dan kopyaladiginla degistir:

txtBox.SelText = Clipboard.GetText

'Yada tüm text'i clipboarddan aldiginla degistir.

txtBox.Text = Clipboard.GetText

Clipboard'a text nasıl kopyalanir?

'Önce clipboard'u temizle
Clipboard.Clear

'Sonra kopyalanacak alani seç ve clipboard'a kopyala
Clipboard.SetText txtBox.Text, vbCFText

Toolbar'in click olayi nasıl kodlanir?

Private Sub Toolbar1_ButtonClick(ByVal Button As Button)

'button clicklerini saptamak için:

Select Case Button.Key
Case Is = "Exit"
If MsgBox("Çikmak istiyor musunuz??", vbQuestion + vbYesNo + _
vbDefaultButton2, "Programdan çikiyorsunuz!") = vbNo Then Exit Sub
Call ExitProgram
Case Is = "Repair"
Call Repairdb
Case Is = "Delete"
Call DeleteRoutine
Case Is = "Edit"
Call EditRoutine
Case Is = "New"
Call NewRoutine
Case Is = "Copy"
Call CopyToClipboard
Case Is = "Help"
Call ShowHelpContents
End Select
End Sub

Dogum gününden kişinin yaşı nasıl hesaplanır?

'Text'i Date data türüne çevir

Dim Birth as Date
Birth = DateValue(txtDOB)

'Yasi hesapla
Dim Age as Integer
Age = Int(DateDiff("D", Birth, Now) / 365.25)

4 rakamlı tarih nasıl kontrol edilir?

Public Function ValidDate(MDate)

'Amaç: 4 digitli "yyyy" formatindaki tarihi kontrol etmek; hata var ise kullaniciyi uyarmaktir.
'Input: Texbox'tan string
'Output: True yada False
'Default : False

ValidDate = False

'Eger uzunluk "m/d/yyyy" 'den kisa ise fonkiyondan çik
If Len(MDate) < 8 Then Exit Function

'Geçerli bir tarih türü girilmemisse terket
If IsDate(MDate) = False Then Exit Function

'Sonu "yyyy" ile bitmiyorsa yada baslamiyorsa terket
Dim StartDate As String
Dim EndDate As String

EndDate = Right(MDate, 4)
StartDate = Left(MDate, 4)

If ValidChar(EndDate, "0123456789") = False And _

ValidChar(StartDate, "0123456789") = False Then Exit Function


'Tüm bu testlerden geçilirse True yükle
ValidDate = True
End Function

Web adresleri nasıl açılır?

'Asagidaki kodu bir kontrolun click event'ine yaz
Dim iRet As Long
Dim Cevap As Integer

Cevap = MsgBox("www.hakanersoz.com adresini açmak istiyor musunuz?", vbInformation + vbYesNo, "www.hakanersoz.com")

Select Case Cevap
Case vbYes
iRet = Shell("start.exe http://www.hakanersoz.com", vbNormal)
Case vbNo
Exit Sub
End Select


Menüye 13x13 bitmaplar nasııl eklenir?

'Bir Picturebox control ekle
'Autosize özelligini 'True' yap unutma: bitmap olacak (Icon degil)
'maximum 13X13 bitmap olmali.

'Asagidaki deklerasyonlari bir Bas modulune ekle:
'Bu örnek VB4 içindir

Private Declare Function VarPtr Lib "VB40032.DLL" (variable As Any) As Long
Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function SetMenuItemBitmaps Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long

Const MF_BYPOSITION = &H400&
'form load event içine asagidaki kodu yerlestir

Dim mHandle As Long, lRet As Long, sHandle As Long, sHandle2 As Long
mHandle = GetMenu(hwnd)
sHandle = GetSubMenu(mHandle, 0)
lRet = SetMenuItemBitmaps(sHandle, 0, MF_BYPOSITION, imOpen.Picture, imOpen.Picture)
lRet = SetMenuItemBitmaps(sHandle, 1, MF_BYPOSITION, imSave.Picture, imSave.Picture)
lRet = SetMenuItemBitmaps(sHandle, 3, MF_BYPOSITION, imPrint.Picture, imPrint.Picture)
lRet = SetMenuItemBitmaps(sHandle, 4, MF_BYPOSITION, imPrintSetup.Picture, imPrintSetup.Picture)
sHandle = GetSubMenu(mHandle, 1)
sHandle2 = GetSubMenu(sHandle, 0)
lRet = SetMenuItemBitmaps(sHandle2, 0, MF_BYPOSITION, imCopy.Picture, imCopy.Picture)



Çalisma aninda menü nasıl olusturulur?

Dim index As Integer
index = mnuHook.Count
Load mnuHook(index)
mnuHook(index).Caption = "New Menu Entry"
mnuHook(index).Visible = True

'Yeni girdiler mnuHook 'dan sonra olusur. Ancak unutmayin mnuHook halihazirda varolan bir menü elemanidir.


Text nasıl sifrelenir?

'encryption function :

Public Function Encrypt(ByVal Plain As String)
For I=1 To Len(Plain)
Letter=Mid(Plain,I,1)
Mid(Plain,I,1)=Chr(Asc(Letter)+1)
Next
Encrypt = Plain
End Sub

Public Function Decrypt(ByVal Encrypted As String)
For I=1 to Len(Encrypted)
Letter=Mid(Encrypted,I,1)
Mid(Encrypted,I,1)=Chr(Asc(Letter)-1)
Next
Decrypt = Encrypted
End Sub

Print Encrypt("This is just an example")
Print Decrypt("Uijt!jt!kvtu!bo!fybnqmf")

Form nasıl yavas yavas karartilir? (Fade to black)

Sub FormFade(frm As Form)
' Formu yavas yavas karartir

For icolVal% = 255 To 0 Step -1
DoEvents
frm.BackColor = RGB(icolVal%, icolVal%, icolVal%)
Next icolVal%
End Sub

Formun caption'una nasıl kayan yazı yazılır?

Sub KayanYazi(frm As Form)
Dim X As Integer
Dim current As Variant
Dim Y As String
Y = frm.Caption
frm.Caption = ""
frm.Show
For X = 0 To Len(Y)
If X = 0 Then
frm.Caption = ""
current = Timer
Do While Timer - current < 0.1
DoEvents
Loop
GoTo bitti
Else: End If
frm.Caption = left(Y, X)
current = Timer
Do While Timer - current < 0.05
DoEvents
Loop
bitti:
Next X
End Sub



Verilen kredi karti numarasinin geçerli olup olmadigi nasıl anlasilir?

'Asagidaki fonksiyonu bir BAS modulu içine kopyala
'Not: Tüm kredi kartlari belli bir algoritma ile üretilir. Rastgele sayilar bu algoritmaya uymaz. Bu fonksiyon bu hesaplamalari yapar
'Asagidaki Sub bir command butonuna ait olabilir. Kliklendiginde verilen kart numarasini kontrol eder.

Sub KartKontrolu_Click ( )
'KartGecerli degiskeni True olur eger fonksiyon dogru deger çevirirse
Dim KartGecerli as Boolean
KartGecerli = GecerliKartNumarasimi("4552012301230123")
If KartGecerli then
Msgbox "Geçerli kart"
else
Msgbox "Aman dikkat. Bu kart geçersiz!!!"
End if
End Sub

Public Function GecerliKartNumarasimi(ByVal pCardNumber As String) As Boolean

Dim CharPos As Integer
Dim CheckSum As Integer
Dim tChar As String

For CharPos = Len(pCardNumber) To 2 Step -2
CheckSum = CheckSum + CInt(Mid(pCardNumber, CharPos, 1))
tChar = CStr((Mid(pCardNumber, CharPos - 1, 1)) * 2)
CheckSum = CheckSum + CInt(Left(tChar, 1))
If Len(tChar) > 1 Then CheckSum = CheckSum + CInt(Right(tChar, 1))
Next

If Len(pCardNumber) Mod 2 = 1 Then CheckSum = CheckSum + CInt(Left(pCardNumber, 1))

If CheckSum Mod 10 = 0 Then
IsValidCreditCardNumber = True
Else
IsValidCreditCardNumber = False
End If

End Function


Ayin son günü nasıl bulunur?

Public Function AyinSonGunu(ByVal GecerliTarih As Date) As Byte
Dim SonGun As Byte
SonGun = DatePart("d", DateAdd("d", -1, DateAdd("m", 1, _
DateAdd("d", -DatePart("d", GecerliTarih) + 1, Date))))
AyinSonGunu = SonGun
End Function

Private Sub Command1_Click()
MsgBox Date & " tarihine ait ayin son günü : " & AyinSonGunu(Date)
End Sub


VB6 projeleri VB5'te nasıl açilir?
Notepad yada baska bir editör ile VB 6.vbp dosyasini açin ve bu dosyadaki
'Retained = 0' satirini silip dosyayi kaydedin.
Artik VB6 projelerini VB5'te açabilirsiniz.

MDB veritabanlarinda hataya neden olan Null field degerlerinden nasıl kurtulunur?
Default deger olarak Access string alanlari NULL deger tasir (Çift tirnak yani bos string girilmedikçe)
Null deger tasiyan bir alani recordset araciligiyla bir string içine kopyalamak istediginizde (sanirim birçogunuz bunu görmüstür) runtime type-mismatch hatasi olusur. Bundan kurtulmanin en kolay yolu & karakteri kullanarak her alan basina çift tirnak (yani bos string) eklemektir. Asagidaki örnek gibi:

Dim DB As Database
Dim RS As Recordset
Dim sAd As String
Set DB = OpenDatabase("Test.mdb")
Set RS = DB.OpenRecordset("Ad")
sAd = "" & RS![Adi Soyadi] ' Adi Soyadi alani içine "" ekleniyor, böylece null deger yokediliyor.


Ekran çözünürlügü nasıl bulunur?
Genelde ekran çözünürlügüne göre programlarinizdaki nesneleri resize etmek oldukça kullanisli bir yoldur.

Ekran çözünürlügünü söyle bulursunuz:
Asagidaki kodu form_load'a yazarsanız her açılışta ekran çözünürlüðünü kontrol eder.

Genislik = Screen.Width \ Screen.TwipsPerPixelX
Yukseklik = Screen.Height \ Screen.TwipsPerPixelY

Ekran_Cozunurlugu = Genislik & "x" & Yukseklik

Sonuç asagidaki gibi olur:

800x600

Veritabanina nasıl daha hizli ulasilir?

Bir recordset içinde daha hızlı döngü çalıstırmak için bir yol var. Genelde bir çok programcı aþagidaki kodu kullanır:

Do While Not Records.EOF 'Dosya sonuna kadar döngü baslat
Combo1.AddItem Records![Firma Adi] 'Combo'ya Records recordset'inin [Firma Adi] adli alanini ekle
Records.Movenext 'Bir sonraki kayda git
Loop

Buradaki problem her defasinda veritabaninin bir sonraki kayda gitmek için dosya sonuna ulasip ulasmadigini kontrol etmek zorunda olmasidir. Bu zorunluluk özellikle çok büyük veritabanlarinda büyük performans kayiplarina neden olur. Çözüm ise önce kayit adedini RecordCount ile bulmak ve For ---- Next döngüsü ile kayit okumaktir :

Records.MoveLast ' Recordset'in sonuna giderek kaç adet kayit oldugunu bulmalisiniz. Bu islemin bir kez yapilmasi yeterlidir.
KayitSayisi=Records.RecordCount 'Kayıt sayısı bir long deðiþken içine alındı
Records.MoveFirst 'Ilk kayda gel

For i =1 To KayitSayisi 'Þimdi kayıtları EOF telaþı olmadan birer birer okuyalim
Combo1.AddItem Records![Firma Adi]
Records.MoveNext
Next

ışte size garantili %33'lük performans artışı

Gökkusagi renklerinde text nasıl olusturulur?

1. Standart EXE projesi baslat
2. Asagidaki kodu Form'un Paint proc'una yaz:

Sub Form_Paint()
Dim I As Integer, X As Integer, Y As Integer
Dim C As String
Cls
For I = 0 To 91
X = CurrentX
Y = CurrentY
C = Chr(I)
Line -(X + TextWidth(C), Y = TextHeight(C)), QBColor(Rnd * 16), BF
CurrentX = X
CurrentY = Y
ForeColor = RGB(Rnd * 256, Rnd * 256, Rnd * 256)
Print "Merhaba Basic Programciligi"
Next
End Sub

3. Projeyi çalistirirsaniz formun degisik renklerde yaziyla kaplandigini görürsünüz.
and watch the form fill with lots of multi-coloured text

Text kutusundaki bosluklar nasıl yokedilir?
Kullanicilarin text kutusuna bosluk karakteri girmelerini engellemek için :
Textbox 'un KeyPress olayina asagidaki kodu yaz:

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 32 Then
KeyAscii = 0
End If
End Sub


Tek harekette text dosyasi nasıl yüklenir?
FileText fonksiyonunu kullanarak istediginiz dosyayi açar ve textbox içine yerlestirirsiniz.
Fonksiyonu Bas modulu içine yaz

Function FileText (filename$) As String
Dim dosya As Integer
dosya = FreeFile
Open filename$ For Input As #dosya
FileText = Input$(LOF( dosya), dosya)
Close # dosya
End Function

Text1.Text = FileText("c:\autoexec.bat") 'Text1 textbox'una tek hamlede autoexec.bat içerigi yüklenir.


Windows Control Panel (Denetim masasi) uzantilari VB ile nasıl açilir?

Option Explicit
Private strPanelAdi As String
Private Sub Command1_Click()

strPanelAdi = File1.filename
If strPanelAdi = "" Then
MsgBox "Bir .CPL dosyasi seçilmedi." & vbCrLf & _
"Windows Control Panel açiliyor.",vbInformation
End If
Shell "rundll32.exe shell32.dll,Control_RunDLL " & _
strPanelAdi, vbNormalFocus
End Sub

Private Sub Form_Load()
With File1
'Sadece Control Panel uzantili dosyalari göster
.Pattern = "*.CPL"
'FileListBox yalnizca System yada System32 dizinini hedef alsin:
.Filename = "C:\Windows\System"
End With
End Sub


Bellegi bosaltmak için tüm formlar nasıl unload edilir?

Public Sub UnloadAllForms()
Dim Form As Form
For Each Form In Forms
Unload Form
Set Form = Nothing
Next Form
End Sub

Bu prosedürü çalistirmak için en uygun yer ana formun unload event'idir


Kontroller nasıl taşınabilir? (Drag&Drop)

Burada bir picturebox form üzerinde drag&drop ile tasinmaktadir.

Option Explicit
Public globalX As Integer
Public globalY As Integer

Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)
Picture1.Move X - globalX, Y - globalY
End Sub

Private Sub Picture1_MouseDown(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
Picture1.Drag vbBeginDrag
globalX = X
globalY = Y
End Sub


Kendi Popup menünüz bir textbox içinde nasıl gösterilir?

Bu ipucu ile standart Windows pop up menüsünü bastirir kendi popup menünüzü çalistirirsinz.

Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = 2 Then
With Text1
.Enabled = False
PopupMenu {KendiMenunuz}
.Enabled = True
.SetFocus
End With
End If
End Sub


Mesaj kutusunun ileri özellikleri nasıl kullanilir?

Dim Msg, Style, Title, Help, Ctxt, Cevap, MyString
Msg = "Devam edelim mi ?" ' Mesaji tanimla
Style = vbYesNo + vbCritical + vbDefaultButton2 'Butonlari tanimla
Title = "MsgBox Gösterimi" ' Title tanimla
Help = "DEMO.HLP" 'Bir help dosyasi bagla
Ctxt = 1000 ' Baslik tanimla

Cevap = MsgBox(Msg, Style, Title, Help, Ctxt) 'Masaji göster ve kullanici cevabini bekle
If Cevap = vbYes Then ' Kullanici evet'i seçti
MsgBox "Kabul ettiniz" ' Karsilik ver
Else ' Tersi durumda kullanici hayir'i seçmis demektir
MsgBox "Kabul etmediniz" ' Karsilik ver
End If

Menülerde seperatör (ayraç) nasıl yapılır?

mnu.Caption="-"

Listbox'taki tüm elemanlar nasıl seçilir?

'Asagidaki kodu cmdYeniEkle_Click() yordamina yaz

List1.AddItem Text1.Text ' Yeni bir item ekle

'Asagidaki kodu cmdTumunuSec_Click() yordamina yaz

For x = 0 To List1.ListCount - 1
List1.Selected(x) = True ' item(x) seç
Next x

Listview'deki satirlarin kaç tane oldugu nasıl sayilir?

lItemCount = lstCount.ListItems.Count
Msgbox lItemCount
Form konfetti ile nasıl doldurulur?

DrawWidth = 5 ' noktaciklarin genisligi
Dim x As Long
Dim y As Long
Dim r As Integer
Dim g As Integer
Dim b As Integer
Randomize
Do
x = Val(Screen.Width) * Rnd
y = Val(Screen.Height) * Rnd
bir sonraki noktacigin rengi rastgele seçilir
r = 255 * Rnd
g = 255 * Rnd
b = 255 * Rnd
Form1.PSet (x, y), RGB(r, g, b)
Loop


Form üzerindeki Picturebox nasıl ortalanir?

Picture1.Left = (Form1.Width - Picture1.Width) / 2


Clipboard kullanarak bir Picturebox içerigi resim diger bir picturebox'a nasıl kopyalanir?

Command1_Click()
Clipboard.Clear 'Clipboard'i mutlaka sil
Clipboard.SetData Picture1.Picture

Command2_Click()
Picture2.Picture = Clipboard.GetData ' Clipboard içerigini Picture2 içine yapistir.


Mouse pointer nasıl saklanir?
Bu is için ShowCursor API'si kullanilir. Asagidaki kodu bir module içine yaz:

Declare Function ShowCursor Lib "user32" (ByVal bShow
As Long) As Long

Bu kod mouse imlecini saklar:
FareImleci = ShowCursor(False)

Bu kod mouse imlecini görünür hale getirir:
FareImleci = ShowCursor(True)

Programiniz disinda keypress nasıl saptanir?

GetAsyncKeyState API'si kullanilir. Asagidaki kodu module içine yazin

Declare Function GetAsyncKeyState Lib "user32"
(ByVal vKey As Long) As Integer


' Asagidaki constant TAB tusu için. Diger tuslar için
' API Text Viewer'i kullanin

Public Const VK_TAB = &H9

'Timer1_Timer() içine asagidaki kodu ekleyin

If GetAsyncKeyState(VK_TAB) Then
Beep ' TAB'a basilirsa beep
End If
Yazdirma islemi nasıl iptal edilir?
'Bu örnekte ayrica birden fazla sayfanin nasıl yazilacagi da gösteriliyor

Printer.Print "Page 1"
Printer.Newpage
Printer.Print "Page 2"
Printer.KillDoc


Resim nasıl yazdırılır?

Printer.PaintPicture Picture1.Picture
Printer.EndDoc




Windows'un Belgeler içerigi nasıl silinir?

Bir module asagidaki API deklerasyonunu ekle:

Declare Sub SHAddToRecentDocs Lib "shell32.dll" (ByVal uFlags As Long,
ByVal pv As String)

Herhangi bir click içine de asagidaki kodu ekle:

SHAddToRecentDocs(2,vbNullString)

Windows'un Belgeler içine nasıl ekleme yapılır?
Bir module asagidaki API deklerasyonunu ekle:

Declare Sub SHAddToRecentDocs Lib "shell32.dll" (ByVal uFlags As Long,
ByVal pv As String)
Herhangi bir click içine de asagidaki kodu ekle:
Dim ekleme as String
ekleme="c:\falan dizin\filan dosya.txt"
SHAddToRecentDocs(2,ekleme)


Alan adina göre bir Recordset içindeki kayitlar nasıl siraya konur?


'Bu kod tüm kayitlari Z-A (geriye dogru) siraya dizer

' A-Z (ileri dogru) sirasi isterseniz ,DESC yerine ASC kullanin.

Dim DB as Database
Dim Kayitlar as Recordset

Set Kayitlar = DB.OpenRecordset("SELECT * FROM _
Personel " & "ORDER BY Personel.Adi DESC;")

Personel tablosundan tüm kayitlari Adi (personel adi) field degerine göre azalan (Z-A ) sekilde siraya dizer

Listbox'u Access (mdb) veritabanina nasıl baglarsiniz?

On Error GoTo Hata_Kontrol

Dim DB as Database
Dim Kayitlar as Recordset
Dim X as Long, record_count as Long

'Veritabanini açalim

Set DB = OpenDatabase("Ogrenci.mdb", dbOpenSnapshot)
Set Kayitlar = DB.OpenRecordset("Ogrenciler")

' Dikkat ederseniz asagida yapilan islem önce veritabaninin sonuna gitmek, RecordCount degerini
' ögrenmek ve sonra tekrar veritabani basina dönmektir. Veritabani sonuna gitmeden kaç adet kayit
' oldugunu ögrenemezsiniz.

Kayitlar.MoveLast
X = Kayitlar.RecordCount
Kayitlar.MoveFirst

' Listbox içine adlari yerlestirelim
' Ilk kayita geldikten sonra artik sirayla ögrenci adlarini listbox içine alabiliriz

Do
List1.AddItem Kayitlar!OgrenciAdi
Y = Y + 1
Kayitlar.MoveNext
Loop Until Y = X ' X = Recordcount, yani son kayit

Hata_Kontrol:
Select Case (Err)
Case 3021 ' Kayit yok
record_count = 0 'Kayit yoksa degeri 0 a esitleyelim.
Exit Sub
List1.Refresh
End Select


Bir form nasıl asagi ve yukari katlanir? (açilista splash screen olarak kullanmak üzere..)

Sub FormuYukariKatla(frm As Form, yukari As Integer)

' Formunuzun Scalemode property'sine dikkat edin. Eger degeri pixel ise
' ve siz twip deger kullanirsaniz form sonsuz bir döngü içinde katllanir.
' formunuzun ne kadar katlanmasini istiyorsaniz yukari degerini o kadar yükseltin
' Açilista splash screen olarak kullanilir...

Dim NereyeKadar

NereyeKadar = frm.Height - yukari
If NereyeKadar <= 0 Then Exit Sub
If yukari < 0 Then Exit Sub

Do
frm.Height = frm.Height - 1
DoEvents
Loop Until frm.Height <= NereyeKadar
End Sub

Sub FormuAsagiKatla(frm As Form, asagi As Integer)

'Yine scalemode'a dikkatedin!
' Formun ne kadar asagi katlanmasini istiyorsaniz "asagi " degerini o kadar büyütün

Dim NereyeKadar

NereyeKadar = frm.Height + yukari
If yukari < 0 Then Exit Sub

Do
frm.Height = frm.Height + 1
DoEvents
Loop Until frm.Height >= NereyeKadar
End Sub

'Asagidaki sub yordamimiz çagirir
Private Sub Command1_Click()
Call FormuAsagiKatla(Form1, 100)
End Sub


isEven fonksiyonu nasıl kullanilir?

'Bu fonksiyon tek sayilarda TRUE döndürür

Function isEven(n As Integer) As Boolean
isEven = True
If n And 1 Then isEven = False
End Function


Dosya boyutu nasıl ögrenilir?

Aslinda dosya boyutu ögrenmek kolaydir. Buradaki ipucu kullanicinyn seçtigi dosyalarin boyutunu çalisma aninda buluyor.

Bir form üzerine bir dirlistbox (lstDizin) ve bir filelistbox (lstDosya) ve
bir Label (lblDosyaBoyutu) yerlestirin.
Kullanici istedigi dizine gidebilir ve dosya seçebilir. Bu program kullanicinin seçtigi dosyalarin boyutunu gösterecek:

Private Sub cmdDosyaBoyutunuGoster_Click()

Dim strDosyaTemp As String
Dim strBoyutTemp As String
Dim strDizin As String
Dim strDosya As String

' Kullanicinin seçtigi dizin ve dosya kutulari araciligiyla degiskenlerimize deger yüklüyoruz:
strDizin = lstDizin.Path
strDosya = lstDosya.File

' Yukaridan alinan degerlerle ulasilan path degerini geçici dosya degiskenine yükleyip
' o degiskenin dosya boyutunu hesaplatiyoruz.:
strDosyaTemp = strDizin & "\" & strDosya
strBoyutTemp = FileLen(strDosyaTemp)

lblDosyaBoyutu.Caption = strDosyaTemp & " adli dosya " & _
Format(strBoyutTemp, "#,##0") & " byte boyutundadir."

End Sub


Title bar nasıl yanıp söner?

Yeni bir EXE projesi aç ve bir modul içine asagidaki WinApi'yi yaz:

Public Declare Function FlashWindow Lib "user32" (ByVal hwnd As Long, _
ByVal bInvert As Long) As Long

Bir Form üzerine bir timer ve 2 commandbutton yerlestir (özellikleri sagida) :

command1.caption="Baslat"
command2.caption="Durdur"
timer1.interval=500 'yarim saniyede bir yanpi sönecek
timer1.enabled=false

Private Sub Timer1_Timer()
a& = FlashWindow(Me.hwnd, 1)
End Sub

Private Sub Command1_Click() 'Programi çalistirir ve form caption'u yanip söner
Timer1.Enabled = True
End Sub

Private Sub Command2_Click() 'Yanip sönme isini kapatir
Timer1.Enabled = False
End Sub


Ctrl-Alt-Delete ve Ctrl-Esc tus kombinasyonlarinin çalismasi nasıl iptal edilir?


Asagidaki kodu projenizin declarations kismina yazin:

Private Declare Function SystemParametersInfo Lib _
"user32" Alias "SystemParametersInfoA" (ByVal uAction _
As Long, ByVal uParam As Long, ByVal lpvParam As Any, _
ByVal fuWinIni As Long) As Long


Sub CtrlAltDeleteKapat(Kapali As Boolean)
Dim X As Long
X = SystemParametersInfo(97, Kapali, CStr(1), 0)
End Sub


Ctrl-Alt-Delete kombinasyonunu kapatmak için:

Call CtrlAltDeleteKapat(True)


Ctrl-Alt-Delete kombinasyonunu açmak için:

Call CtrlAltDeleteKapat(False)




Sistemin bir ses kartina sahip olup olmadigi nasıl bulunur?

Asagidaki kodu projenizin declarations kismina yazin:

Declare Function waveOutGetNumDevs Lib "winmm.dll" _
Alias "waveOutGetNumDevs" () As Long

Dim i As Integer

i = waveOutGetNumDevs()
If i > 0 Then
MsgBox "Sisteminiz ses dosyalarini çalabilir.", _
vbInformation, "Sound Card Test"
Else
MsgBox "Sisteminiz ses dosyalarini çalamaz.", _
vbInformation, "Sound Card Test"
End If


Hangi kullanicinin login yaptigi nasıl anlasilir?

Dim s As String
Dim cnt As Long
Dim dl As Long
Dim AktifKullanici as String

cnt = 199
s = String$(200, 0)
dl = GetUserName(s, cnt)

If dl <> 0 Then AktifKullanici = Left$(s, cnt) Else AktifKullanici = ""


Asagidaki API fonksiyonunu ya formun decleration kismina yada bir modul içine yazacaksinz:

Declare Function GetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, nSize As Long) _
As Long


Bos disk alanı nasıl saptanır?

GetDiskFreeSpace API fonksiyonunu kullanmalisiniz. Bu fonksiyonun declarasyonu söyledir:

Declare Function GetDiskFreeSpace Lib "kernel32" Alias _
"GetDiskFreeSpaceA" (ByVal lpRootPathName As String, _
lpSectorsPerCluster As Long, lpBytesPerSector As Long, _
lpNumberOfFreeClusters As Long, lpTotalNumberOfClusters _
As Long) As Long

Dim SectorsPerCluster&
Dim BytesPerSector&
Dim NumberOfFreeClusters&
Dim TotalNumberOfClusters&
Dim BosAlan&

temp& = GetDiskFreeSpace("c:\", SectorsPerCluster, _
BytesPerSector, NumberOfFreeClusters, TotalNumberOfClusters)

' BosAlan degiskeni toplam bos byte degerini tutar:

BosAlan = NumberOfFreeClusters * SectorsPerCluster * _
BytesPerSector





Bir form altina nasıl gölge eklenir ve form yukarida hissi verilir?

Formlarin altinda bulunan gölgeleri merak etmissinizdir. Formu sanki birkaç santimetre havada duruyormus hissi veren bu isleme "Dithering" denir:

Asagidaki kodu bir forma ekleyin.

Sub Dither(vForm As Form)

Dim intLoop As Integer

vForm.DrawStyle = vbInsideSolid
vForm.DrawMode = vbCopyPen
vForm.ScaleMode = vbPixels
vForm.DrawWidth = 2
vForm.ScaleHeight = 256

For intLoop = 0 To 255

vForm.Line (0, intLoop)-(Screen.Width, intLoop - 1), _
RGB(0, 0,255 -intLoop), B

Next intLoop

End Sub

Kodu çalistirmak için formun Activate olayina ise asagidaki kodu ekleyin:

Form_Activate ()
Dither Me


Kontroller nasıl gölgelendirilir?


Yeni bir proje baslatip form üzerine bir textbox yerlestirin

Asagidakini bir module yerlestirin:

Global Const GFM_BACKSHADOW = 1
Global Const GFM_DROPSHADOW = 2

Public Sub ControlShadow(f As Form, C As Control, shadow_effect _
As Integer, shadow_width As Integer, shadow_color As Long)

Dim shColor As Long
Dim shWidth As Integer
Dim oldWidth As Integer
Dim oldScale As Integer
shWidth = shadow_width
shColor = shadow_color
oldWidth = f.DrawWidth
oldScale = f.ScaleMode
f.ScaleMode = 3
f.DrawWidth = 1
Select Case shadow_effect
Case GFM_DROPSHADOW
f.Line (C.Left + shWidth, C.Top + shWidth)-Step(C.Width - 1, _
C.Height - 1), shColor, BF
Case GFM_BACKSHADOW
f.Line (C.Left - shWidth, C.Top - shWidth)-Step(C.Width - 1, _
C.Height - 1), shColor, BF
End Select
f.DrawWidth = oldWidth
f.ScaleMode = oldScale
End Sub
Form'un Load procedurüne asagidaki kodu ekleyin:
Private Sub Form_Load()
Dim r
r = ControlShadow(me,text1,1,2,black)
End Sub


Title bar'ın rengi nasıl deðiþtirilir?

Windows'un tüm desktop renklerini SetSysColors API fonksiyonu ile degistirebilirsiniz.
Bu fonksiyon 3 parametre alir :
1. Rengi degisecek elemanlarin sayisi
2. Color nesnesi degismezleri (const)
3. RGB degeri

API:

Declare Function SetSysColors Lib "user32" Alias _
"SetSysColors" (ByVal nChanges As Long, lpSysColor As _
Long, lpColorValues As Long) As Long


Degismezler:

Public Const COLOR_SCROLLBAR = 0 'Scrollbar rengi
Public Const COLOR_BACKGROUND = 1 'Duvarkagidi yokken masaüstü arkaplan rengi
Public Const COLOR_ACTIVECAPTION = 2 'Aktif pencere adi rengi
Public Const COLOR_INACTIVECAPTION = 3 'Aktif olmayan pencere adinin rengi
Public Const COLOR_MENU = 4 'Menu
Public Const COLOR_WINDOW = 5 'Windows arkaplan
Public Const COLOR_WINDOWFRAME = 6 'Pencere çerçevesi
Public Const COLOR_MENUTEXT = 7 'Pencere Texti
Public Const COLOR_WINDOWTEXT = 8 '3D koyu gölge (Win95)
Public Const COLOR_CAPTIONTEXT = 9 'Pencere caption text rengi
Public Const COLOR_ACTIVEBORDER = 10 'Aktif pencere sinirlari rengi
Public Const COLOR_INACTIVEBORDER = 11 'Inaktif pencere sinirlari rengi
Public Const COLOR_APPWORKSPACE = 12 'MDI desktop arkaplan rengi
Public Const COLOR_HIGHLIGHT = 13 ' seçili alan arkaplan rengi
Public Const COLOR_HIGHLIGHTTEXT = 14 'Seçili menü rengi
Public Const COLOR_BTNFACE = 15 'Button
Public Const COLOR_BTNSHADOW = 16 '3D buton gölgeleme
Public Const COLOR_GRAYTEXT = 17 'Gri text
Public Const COLOR_BTNTEXT = 18 'Button text
Public Const COLOR_INACTIVECAPTIONTEXT = 19 'Inactive pencere rengi
Public Const COLOR_BTNHIGHLIGHT = 20 'Butonun 3D isaretlenmesi rengi


Aktif pencere title bar rengini degistirmek için :

t& = SetSysColors(1, COLOR_ACTIVECAPTION, RGB(255,0,0))

Bu örnek kirmiziya çevirir

 
eXTReMe Tracker
Sayfa Bloggoayrılık yazılarıoyunlarkurye web tasarımı broşürlük dizi izle dizi izleKombi Tesisat Radyo DinleChat paysafe paysafe kartSohbet arkadaş travestitravesti travesti travesti