Live Chat Software
Emre CIRIK | C# , VB.NET , Delphi 7 , ASP.NET, SQL Server , T-SQL, IOS , X Code, Visual Studio.NET , Windows Mobile, Windows CE, Windows Phone 7-8 ,C++, C

Devex XtraReport Kullanımı

by EMRCRK 14. August 2011 04:59

(Dip Not : Kusura bakmayın resimler devasa boyutta olduğu için dipnotu buraya düştüm, resimleri büyül olarak upload etmem olayı daha net görmeniz içindir. Sorularınız olursa yardımcı olmaya çalışırım.)

 

Merhaba arkadaşlar, uzun zamandır bir başlık bile atamıyorum.Malumunuz işler yoğun ve vakit kısıtlı. Boş bir vaktimde ihtiyaç duyduğum ve sizlerinde ihtiyaç duyabilceğiniz bir konuya değinmek istiyorum "Raporlama" . Bilindiği gibi arkadaşlar raporlama konusu müşterilerden en çok istenilen şeydir ve bir çok componentle yada dahili visual studio komponentleri ile birşeyler yapmaya çalışırız fakat bazen yetersiz kalabiliyor. Ben component ihtiyacımı Devex üzerinden sağlıyorum çünkü çok başarılı ve kaliteli ve en önemlisi ihtiyaç duyabilceğim şeyleri üzerinde barındırıyor olmasıdır. Lafı çok uzatmadan Devex'in XtraReport undan bahsedelim :

Bu rapor komponenti Fatura,İrsaliye vb. gibi belgeler için ,

Teklif vb. belgeler için,

İş Emirleri vb. belgeler için,

Müşterilerin istediği özel formatlarda belge çıktıları için v.b birçok durumda kullanılan rapordur.

Ben burada bir fatura raporlama örneği vericem ve  bu hazır raporu müşterinin kendisine göre nasıl editleye bileceğini göstericem.

 

İlk önce raporun 3 noktasından bahsetmem gerek :

1.Report Header = Rapor Başlık bilgileri . Örnek : Faturadaki sabit bilgiler : Cari Adı,Adresi,Vergi Dairesi,Vergi Nosu , Tarihi,Sevk Tarihi,Tarihi.

Faturanın detayları için oluşturula bilecek başlık bilgileri :

Stok Adı  Stok Kodu Birim Miktar Birim Fiyat Tutar  gibi..

2.Detail = Faturanın detay kısmı , burası aşağı doğru akan kayıtlar için kullanılan kısımdır, mesela bir faturada 1 den fazla ürün çeşidi alına bilir ve her çeşit için tek satır belirtmeniz lazım. Burası bunun için kullanılacaktır.

3.PageFooter = Raporun Sonu . Bizde burası faturanın genel toplamı,aratoplamı,iskonto toplamı,kdv toplamı, cari son bakiyesi, genel tutarın yazı ile yazılışını parametrik olarak göndericeğiz. 

 

İlk olarak bir proje oluşturun . 

Sonra projeye sağ tıklayıp Add->New Item diyelim ve bir DataSet nesnesi ekleyelim.

Sonra oluşan dataset nesnesini SolutionExplorer üzerinden açın ve sağtıklayıp 2 tane tablo ekleyelim 

1.si FaturaBaşlık(Cari bilgileri vs.) bilgileri 2.si FaturaDetay(Ürünlerin Olduğu) bilgileri olsun

Sonra Faturanın başlıklarını tutacak tabloya gerekli sütunları ekleyelim :

CariKodu,CariAdı,CariAdres,VergiDairesi,VergiNumarası,Tarih,SevkTarihi,Saat

CariSonBakiyesi,FaturaAraToplamı,FaturaIskontoToplamı,FaturaKDVToplamı,FaturaGenelToplamı,FaturaGenelToplamıYazısı

Detay Tablosu için :

Stok Kodu,Stok Adı, Birim, Birim Fiyat, Miktar ,İskonto Oran,KDV ,İskonto Tutar,Kdv Tutar , Tutar ,Net Tutar

Şimdi gelelim Fatura Dizaynına , bunun için yine projeye sağ tıklayın Add - >New Item -> XtraReport ekleyelim.

Sonra Rapor Dizayn Sayfasında bize bir hazır şablon oluşturma sihirbazı çıkacaktır bunu direk Cancel diyerek kapayalım.

Daha sonra ToolBox üzerinde bulunan Data üzerinden bir DataSet nesnesine çift tıklayarak Rapora ekleyelim.

Sonra karşımıza böyle bir diyalog çıkacak ve bizim oluşturduğumuz DataSet üzerinden miras alma seçeneği çıkacaktır. Az önce bizim oluşturduğumuz DataSet aslında kendimiz için hazır kullanıla bilecek bir classtır. Bizde rapora eklediğimiz dataset i bunun özelliklerini devralması için ekliyoruz ve direk OK butonuna basalım.

Sonra DataSet e bir isim verelim , erişim belirtecinide Properties Penceresinden -> Modifiers Özelliğini -> PUBLİC  olarak değiştirelim

Bunuda yaptıktan sonra Field List penceresinden gerekli bilgileri istediğimiz yerlere sürükle bırak yapalım.

Dizaynımızı Oluşturalım.

 

Resim kocaman ama daha iyi görünmesi ve anlaşılması için küçültmek istemedim. Arkadaşlar dikkat ederseniz Cari Adresini DataSet üzerinde göremiyoruz ve buraya onu eklememiz gerek , bunun için Ana Dataset nesnemizi açıp oraya birde Cari Adres alanı eklememiz gerekmektedir. Daha sonra Field List üzerinde bu alanın güncellenmiş olduğunu görüceksiniz.

Evet gördüğünüz gibi bu alanda geldiğine göre dizaynda ilgili noktaya yerleştirmemiz gerekir ve şimdi gelelim işin kodlama tarafına ve en zevkli kısmına =) 

Formumuza 3 buton ekleyelim 

1.si Fatura Dizaynını kullanıcıya açsın 

2.si Baskı Önizlemesi Yapsın

3.sü Bizim kaydettiğimiz bir dizayn dosyasını yükleyerek kullanıcının bunu düzenleme şansını sağlasın.

 

Kodlarımı aşağıda yayınlıyorum:

 

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace DevexXtraReportExample
{
    public partial class Form1 : Form
    {
        XRprInvoice myInvoice = new XRprInvoice();
        public Form1()
        {
            InitializeComponent();
        }

        private void btnInvoiceDesign_Click(object sender, EventArgs e)
        {           
            myInvoice.ShowDesigner();
        }

        private void btnShowInvoice_Click(object sender, EventArgs e)
        {
            DataRow dRowHeader = myInvoice.dsRprInvoice.dtInvoiceHeader.NewdtInvoiceHeaderRow();//Fatura Başlık İçin Bir Satır Oluşturduk
            dRowHeader["CustCode"] = "CRY. YAZILIM EMRCRK";//Müşteri Kodu
            dRowHeader["CustName"] = "EMR CRK CORP.";//Müşteri Adı
            dRowHeader["CustAdress"] = "BEYLİKDÜZÜ";//Müşteri Adres
            dRowHeader["CustRemBalance"] = Math.Round((-1)*(529.056),2).ToString("#0.00");//Müşteri Kalan Bakiyesi
            dRowHeader["TaxOffice"] = "BEYLİKDÜZÜ";//Vergi Dairesi
            dRowHeader["TaxNum"] = "1122334455";//Vergi Numarası
            dRowHeader["Date_"] = DateTime.Now.ToShortDateString();//Fatura Tarihi
            dRowHeader["RecvDate_"] = DateTime.Now.ToShortDateString();//Sevk Tarihi
            dRowHeader["Time_"] = DateTime.Now.ToShortTimeString();//Saat
            dRowHeader["Total"] = Math.Round((200.00), 2).ToString("#0.00");//Fatura Tutar
            dRowHeader["TotalDiscount"] = Math.Round((00.00), 2).ToString("#0.00");//Fatura İskonto Toplamı
            dRowHeader["TotalVat"] = Math.Round((36.00), 2).ToString("#0.00");//Fatura Kdv Toplamı
            dRowHeader["NetTotal"] = Math.Round((236.00), 2).ToString("#0.00");//Fatura Genel Toplam
            dRowHeader["NetTotalStr"] = "İKİ YÜZ OTUZ ALTI /TL.  /KRŞ. ";//Genel Toplam Yazısı
            myInvoice.dsRprInvoice.dtInvoiceHeader.Rows.Add(dRowHeader);//Fatura Başlık Bilgisine
            //yeni bir satır ekledik

            DataRow dRowDetail = myInvoice.dsRprInvoice.dtInvoiceDetail.NewdtInvoiceDetailRow();//Fatura Detayı İçin Bir Satır Oluşturduk
            dRowDetail["StockCode"] = "HDD.SGT EXT 1TB";//Stok Kodu
            dRowDetail["StockName"] = "SEGATE GO FLEX 1 TB EXT. HDD";//Stok Adı
            dRowDetail["StockUnit"] = "ADET";//Stok Birim
            dRowDetail["Price"] = Math.Round((200.00), 2).ToString("#0.00");//Birim Fiyat
            dRowDetail["Amount"] = 1;//Miktar
            dRowDetail["DiscPer"] = 0;//İskonto Oranı
            dRowDetail["Vat"] = 18;//KDV Oranı
            dRowDetail["DiscCost"] = Math.Round((00.00), 2).ToString("#0.00");//İskonto Tutarı
            dRowDetail["VatMnt"] = Math.Round((36.00), 2).ToString("#0.00");//KDV Tutarı
            dRowDetail["Total"] = Math.Round((200.00), 2).ToString("#0.00");//Tutar
            dRowDetail["NetTotal"] = Math.Round((236.00), 2).ToString("#0.00");//Net Tutar

            myInvoice.dsRprInvoice.dtInvoiceDetail.Rows.Add(dRowDetail);

            myInvoice.ShowPreview();
        }

        private void btnLoadLayout_Click(object sender, EventArgs e)
        {
            myInvoice.LoadLayout(@"D:\NewXRprInvoice.repx");
            DataRow dRowHeader = myInvoice.dsRprInvoice.dtInvoiceHeader.NewdtInvoiceHeaderRow();//Fatura Başlık İçin Bir Satır Oluşturduk
            dRowHeader["CustCode"] = "CRY. YAZILIM EMRCRK";//Müşteri Kodu
            dRowHeader["CustName"] = "EMR CRK CORP.";//Müşteri Adı
            dRowHeader["CustAdress"] = "BEYLİKDÜZÜ";//Müşteri Adres
            dRowHeader["CustRemBalance"] = Math.Round((-1) * (529.056), 2).ToString("#0.00");//Müşteri Kalan Bakiyesi
            dRowHeader["TaxOffice"] = "BEYLİKDÜZÜ";//Vergi Dairesi
            dRowHeader["TaxNum"] = "1122334455";//Vergi Numarası
            dRowHeader["Date_"] = DateTime.Now.ToShortDateString();//Fatura Tarihi
            dRowHeader["RecvDate_"] = DateTime.Now.ToShortDateString();//Sevk Tarihi
            dRowHeader["Time_"] = DateTime.Now.ToShortTimeString();//Saat
            dRowHeader["Total"] = Math.Round((400.00), 2).ToString("#0.00");//Fatura Tutar
            dRowHeader["TotalDiscount"] = Math.Round((00.00), 2).ToString("#0.00");//Fatura İskonto Toplamı
            dRowHeader["TotalVat"] = Math.Round((72.00), 2).ToString("#0.00");//Fatura Kdv Toplamı
            dRowHeader["NetTotal"] = Math.Round((472.00), 2).ToString("#0.00");//Fatura Genel Toplam
            dRowHeader["NetTotalStr"] = "DÖRT YÜZ YETMİŞ İKİ /TL.  /KRŞ. ";//Genel Toplam Yazısı
            myInvoice.dsRprInvoice.dtInvoiceHeader.Rows.Add(dRowHeader);//Fatura Başlık Bilgisine
            //yeni bir satır ekledik

            DataRow dRowDetail = myInvoice.dsRprInvoice.dtInvoiceDetail.NewdtInvoiceDetailRow();//Fatura Detayı İçin Bir Satır Oluşturduk
            dRowDetail["StockCode"] = "HDD.SGT EXT 1TB";//Stok Kodu
            dRowDetail["StockName"] = "SEGATE GO FLEX 1 TB EXT. HDD";//Stok Adı
            dRowDetail["StockUnit"] = "ADET";//Stok Birim
            dRowDetail["Price"] = Math.Round((200.00), 2).ToString("#0.00");//Birim Fiyat
            dRowDetail["Amount"] = 1;//Miktar
            dRowDetail["DiscPer"] = 0;//İskonto Oranı
            dRowDetail["Vat"] = 18;//KDV Oranı
            dRowDetail["DiscCost"] = Math.Round((00.00), 2).ToString("#0.00");//İskonto Tutarı
            dRowDetail["VatMnt"] = Math.Round((36.00), 2).ToString("#0.00");//KDV Tutarı
            dRowDetail["Total"] = Math.Round((200.00), 2).ToString("#0.00");//Tutar
            dRowDetail["NetTotal"] = Math.Round((236.00), 2).ToString("#0.00");//Net Tutar

            myInvoice.dsRprInvoice.dtInvoiceDetail.Rows.Add(dRowDetail);
            dRowDetail = myInvoice.dsRprInvoice.dtInvoiceDetail.NewdtInvoiceDetailRow();//Fatura Detayı İçin Bir Satır Oluşturduk
            dRowDetail["StockCode"] = "RAM.KNG 1GB DDR2";//Stok Kodu
            dRowDetail["StockName"] = "1 GB KINGSTON DDR3 RAM";//Stok Adı
            dRowDetail["StockUnit"] = "ADET";//Stok Birim
            dRowDetail["Price"] = Math.Round((50.00), 2).ToString("#0.00");//Birim Fiyat
            dRowDetail["Amount"] = 4;//Miktar
            dRowDetail["DiscPer"] = 0;//İskonto Oranı
            dRowDetail["Vat"] = 18;//KDV Oranı
            dRowDetail["DiscCost"] = Math.Round((00.00), 2).ToString("#0.00");//İskonto Tutarı
            dRowDetail["VatMnt"] = Math.Round((9.00), 2).ToString("#0.00");//KDV Tutarı
            dRowDetail["Total"] = Math.Round((200.00), 2).ToString("#0.00");//Tutar
            dRowDetail["NetTotal"] = Math.Round((236.00), 2).ToString("#0.00");//Net Tutar

            myInvoice.dsRprInvoice.dtInvoiceDetail.Rows.Add(dRowDetail);
            myInvoice.DataMember = "dtInvoiceDetail";//Eğer bu satırı yazmazsanız detay da sadece ilk satırı görmüş olursunuz bu satır detayın hangi kaynaktan geldiğini belirdir. 
            myInvoice.ShowPreview();//Önizleme
            //myInvoice.ShowDesigner();//Dizayn Mod
        }
    }
}

 

KAYNAK KODU INDIR (SOURCE CODE DOWNLOAD ):     DevexXtraReportExample.rar (123,67 kb)

 

Umarım işinize yarar , iyi çalışmalar herkese...

Dosya Şifreleme ve Şifre Çözme (File Encrypt-Decrypt)

by EMRCRK 24. July 2011 00:37

Merhaba arkadaşlar , geçenlerde başımıza gelen bir olaydan dolayı bir program yazmaya ihtiyaç duydum ve bu programıda sizinle paylaşmak istedim. Şimdi bu program ne işe yarıyo hangi amaçla yazıldı anlatayım.

Arkadaşlar windows altında bir klasöre sağ tıklayıp gelişmişe tıkladığınızda veriyi korumak için şifrele seçeneği bulunmaktadır, bunu işaretlediğinizde size klasörün altında dosyalar var ise bunlarında şifrelenip şifrelenmeyeceğini sorar ve işleme evet derseniz o klasör ve altındaki tüm dosya/klasörleriniz yeşil renk alır yane şifrelenmiş olur. Fakat bu şifrelemeyi windows kendisi yapar. Daha sonradan siz bilgisayarınıza yeni bir windows kurduğunuzda yada o harddiski alıp başka bir bilgisayara taktığınızda şifrelenmiş olan dosya ve klasörlerinizi yeşil renkte görürsünüz fakat onların ne içeriğini okuya bilirsiniz nede başka bir alana kopyalayamazsınız. Böyle bir durumda o dosyalarınıza erişmeniz olasılık dışı değildir elbette . Klasörlerinizi şifreledikten sonra windows un altında Başlat->Çalıştır ->"certmgr.msc" yi çalıştırıp Kişisel altında sertifikaları görüceksiniz oradan gerekli sertifikaları dışarı verip saklarsanız ve yeni windows üzerinde yada başka bir windows üzerinde o sertifikayı yüklerseniz şifrelenmiş olan dosyalarınızı görürsünüz. Bu sertifika dosyasının uzantısı "*.*.pfx" dir. Bu dosya olmadan başka bir sistemde bunu açmayı ben şahsen çok denedim ama olmadı belki programlar vardır elbet ama bütçe yetermi bilmiyorum öyle bir programada rastlamadım. Çünkü bu dosyalar windowsun EFS ile şifrelenmiş olup baya bir uzun şifreleme sistemi mevcuttur ve çözülmesi çok zordur. 

 

O yüzden size kesinlikle böyle bir işlem yapmadan önce windowsunuzdan "*.*.pfx" anahtarlarınızı oluşturup yedeklemenizi tavsiye ederim. Biz bilgilere ulaştığımızda baya bir klasör ve dosya şifreliydi. Onun için yazdığım bir program işimizi kolaylaştırıp bunların çalışan windows altında (Dosya ve klasörleri şifrelediğimiz windows) şifrelerini kaldırmak için ;

System.IO namespaces altında bulunan File.Encrypt(Şifreler) ve File.Decrypt(Şifre Kaldırır) metotları sayesinde şifrelerimizi kaldıra biliriz.

Program sadece verdiğiniz dizin altındaki tüm dosya ve klasörleri ya şifreler yada şifresini çözer.

Projenin kaynak kodu ektedir..

FileEncryptDecrypt.rar (77,10 kb)

 

 

Aşağıda Sertifika dosyası nasıl export edilir onu resimlerle anlatıyorum. İlk olarak Başlat->Çalıştır->"certmgr.msc" diyoruz. Sonrasını 

resimlerden takip edebilirsiniz.

Export etmek istediğiniz sertifikaya sağtıklayıp Tüm Görevler->Ver demeniz ve sonraki resimde karşınıza çıkan diyalog penceresini 

takip etmeniz gerekmektedir.

Sql Server 2008 Replication

by EMRCRK 31. May 2011 12:50

 

Merhaba arkadaşlar, size ilk olarak kısaca replication nedir açıklamak istiyorum. Replikasyon : Server-Client ( Sunucu-Istemci) mimarisinde kullanılar ve belirli objeleri senkronize etmek için kullanılar bir yöntemdir. Anlaşılacak bir örnek ile açıklamak gerekirse kötü bir örnek olucak ama akılda kalıcıda olacaktır :

Öğrencilik hayatımızda kopya çekmek için kullanılan yöntemlerden bahsedeceğim, dersine çalışmayan bir öğrenci ( İstemci - Client) , dersin kurdu olmuş zeki öğrenci ( Sunucu - Server ) , kopya çekmek için kullanılan yöntem dağıtıcı(distributor) , sorunun cevabı olan bilgi ( eşitlenmek istenen kayıtlar olsun ) . Çalışkan öğrenci herhangi bir sorunun cevabını yazdığı zaman, ufak bir kağıda yazıp bunu diğer arkadaşına verirse ve arada kağıt iletişimini yapan arkadaşımız (distrubitor) istemci olan arkadaşlarımıza sorunun cevabını verirse bilgileri eşitlemiş olurlar =) Kısaca özeti budur.

 

Günlük hayatta nasıl ihtiyaç olur , bir banka düşünün arkadaşlar internet sürekli aktif olan birşey değil malum bizim ülkemizde bunun sıkıntısı var. Bankalar yapılan her işlemi ana veritabanında diğerleri ile birlikte eşitlemek ister. Örnek : X bankasının A şehrindeki şubesi , X bankasının B şehrindeki şubesi ve X bankasının merkezi, burada çift taraflı etkileşim söz konusudur aslında fakat ben basitten alıcam. X bankasının merkezi dağıtıcı veritabanıdır. A ve B şehrindekiler bağlantı olduğunda bilgileri alır ve bilgiler gün içinde işlenir. Daha sonra akşam olduğunu düşünün , belirli bir zamanda çalışan görev ( Biz buna Job diyoruz ve görevi çalıştıran servis SQL Server Agent) A ve B bankasında  yapılan işlemleri merkez veritabanına eşitler , bu sayede bilgilerin güncelliği söz konusu olur . Tam aktarırken internet kesilirse bilgi kaybı olmaz çünkü arada Transaction çalışır.

 

Sql Server 2008 Örnek Replication :

Arkadaşlar benim 2 tane SQL server 2008 instance name 'im mevcut. Birtanesi MSSQLSERVER2008N ve MSSQLSERVER2008 .

İlk olarak kendime ReplicationDB isimli veritabanını oluşturup , içine sadece isim ve id alanını ekliyorum her iki server 'a.

Şimdi replication için ilk olarak dağıtıcımı tanımlayacağım . Bunun için  SQl Server Object Explorer üzerinde

Replication a sağtıklıyoruz->Configure Distribution diyoruz->Çıkan uyarı kasik kurulum sistemini uygulayın (Next,Next,Next) :D . Bize kendi server üzerindemi yada başka server üzerindemi dağıtıcıyı kurmak istediğimizi soruyor. Biz kendi serverımız üzerinde kuracağız. ->

 

Next diyoruz -> SQl Server Agent'ın otomatik mi yoksa manuel mi başlayacağını soruyor , ben otomatik seçtim ki, otomatik önerilir . -> Sonra bizden SnapShot klasörü isteyecek, bu klasörde SQL Server veritabanına ait görüntüleri tutmaktadır. İleri deyin yada klasör belirleyin .-> Daha sonrasından distrubitor veritabanı ve log dosyaları için klasör soruluyor-> Sonra tekrar Next diyoruz ve Finish diyoruz. Kurulum tamamlandıktan sonra hangi veritabanını publish etmek istediğimizi ayarlayacağız. Replication altında bulunan Local Publications sağ tıklayın  ve New Publication diyin.

Sonra publish etmek istediğimiz veritabanını "ReplicationDB" yi seçin.ileri diyin , bize publication tiplerini gösterir bunların ( Snopshot,Transactional,Merge) çok detayına inmeden kısaca açıklamak gerkirse
Snopshot : Script alınarak bulk insert yapılan bir türdür. Burada , her değişiklik olduğunda veri tabanı karşı tarafta baştan oluşturulur.

Transactional :Yapılan değişiklikleri log dosyasına bakarak aktarır .

Merge : Çift taraflı etkileşim ve yapılan değişiklikleri iletir.

Ben Merge yi seçip ileri diyorum. Sonra hangi SQL Server versiyonu ile replice etmek istediğim çıkıyor , 2008 i seçiyorum ileri diyorum , sonra hangi Objeleri replice etmemi soruyor ve ben oluşturduğum tabloyu seçiyorum.

 


 


Job zamanlamasını ayarlaya bilirsiniz .

Burası bu kadar .

 

Sıra geldi istemci tanımına. Onuda Local Publications a sağ tıklayıp New Local Subscription diyoruz. ileri diyip kendi veritabanımızdaki Publication u seçip ileri diyoruz

 

Bu ekranda replice edilecek diğer server ve veritabanını seçiyoruz.Daha sonra çıkan uyarılara ileri diyip geçebilirsiniz. Detaylarını araştırısınız.

 

Ve artık işlemimiz tamamlandı. Şimdi tablolarımıza bakarsak rowguid isimli bir alan eklendiğini göreceğiz.




 

Umarım anlaşılmıştır arkadaşlar, çok basit ve kolay detaylarını birazdaha araştırmanızı tavsiye ederim çünkü iş hayatında muhakkak birgün lazım oluyor :) Bir başka yazıda görüşürüz inşallah.

C# ve VB.NET ile Runtime'da Buton Ekleme ve Buton'a event Bağlama

by EMRCRK 14. May 2011 12:50

Arkadaşlar VB.NET ile C#Arasında  bir takım farklılıklar vardır. Bunlardan biriside Form kontrollerine bağlanan evetlerdir. Şimdi aşağıda 2 Örnek kod yazacağım ve ikisininde yaptığı iş aynıdır.

C# :

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CSharpAddRuntimeObject
{
    public partial class FrmMain : Form
    {

        public FrmMain()
        {
            InitializeComponent();
        }

        private void FrmMain_Load(object sender, EventArgs e)
        {
            Button btn;
            int x = 10, y = 0;
            int sizeH=25, sizeW=25;
            for (int i = 0; i < 10; i++)
            {
                y = 0;
                for (int j = 0; j < 5; j++)
                {
                    btn = new Button();
                    btn.Location = new Point(x, y);
                    btn.Size = new Size(sizeW, sizeW);
                    btn.Name = "btn" + i.ToString()+j.ToString();
                    btn.Text = "Buton " + i.ToString() +"-"+ j.ToString();
                    btn.Click += new EventHandler(btn_Click);
                    this.Controls.Add(btn);
                    y += 30;
                }
               
                x += 30;
            }
        }

        void btn_Click(object sender, EventArgs e)
        {
            Button btn = (Button)sender;
            MessageBox.Show(btn.Text);
        }
    }
}

 

 

VB.NET : 

 

 

Public Class FrmMain

    Private Sub FrmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim btn As Button
        Dim x, y As Integer : Dim sizeW, sizeH As Integer
        x = 10 : y = 0 : sizeW = 25 : sizeH = 25

        For i = 1 To 10
            y = 0

            For j = 1 To 5
                btn = New Button()
                btn.Location = New Point(x, y)
                btn.Size = New Size(sizeW, sizeH)
                btn.Name = "btn" + i.ToString() + j.ToString()
                btn.Text = "Buton " + i.ToString() + "-" + j.ToString()
                AddHandler btn.Click, AddressOf Me.btn_Click
                Me.Controls.Add(btn)
                y = y + 30
            Next

            x = x + 30
        Next

    End Sub



    Private Sub btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Dim btn As Button = sender
        MsgBox(btn.Text)
    End Sub

End Class

 

AddRuntimeObject.rar (96,76 kb)

Tags: , , , ,

CSharp | VB.NET

Multi Thread - Thread Nedir ? Ne işe yarar ? Nerede Kullanırım

by EMRCRK 12. May 2011 13:07

Arkadaşlar, bu konu geniş kapsamı olan bir konu fakat ben sizlere özet geçerek anlatacağım. 

Bildiğimiz üzere DOS gibi işletim sistemlerinde ve o güne ait işlemcilerde aynı anda sadece 1 program çalıştırıla biliyordu. Günümüze örnek vermek gerekirse , Windows altında notepadda yazı yazarken , internet explorer 'ı nızı kullanamadığınızı düşünün . İşte bu gibi sistem çalışma mantığı single processing (tek işlem) dir. 

Baktığınız zaman günümüzde işletim sistemleri , cep telefonları bile aynı anda birden fazla uygulama açabiliyor. Ben telefonda müzik dinlerken mesaj yazabiliyorum . Bu çalışma mantığı ise Multi-Processing( Çoklu işlem) dir.

 

Visual Studio gibi güçlü ve multi processing bulunan bir ortamda olupta , multi-processing programlama tekniğini öğrenmemek olmaz diyorum ve konuya yavaştan girelim.

Process (İşlem) = CPU Üzerinde çalışan tek bir program işlem olarak adlandırılır.

Thread (İşlem Parçacığı - Alt İşlem) = Bir Process içinde yaptırılması gereken , alt yordamlar(metot,fonksiyon) çalıştırılması işlemine denir. Örnek : Visual Studio biz kod yazarken , arka planda kod hata yakalama işlemini yapar.

 

.NET Platformu altında Multi Processing işlemleri 

 

.NET 'te Thread 'ler System.Threading namespaces(isim uzayı) altında toplanmıştır ve alt class(sınıflara) bölünmüştür.

 

Thread'leri kullanmak için projenize ilk önce namespaces'i eklemek gerekir .

Bu ilk örneğimiz , nasıl bir hata ile karşılaşabileceğimizi görmek içindir.

private void btnError_Click(object sender, EventArgs e)
        {
            Thread thrTest;// Thread Tanımlıyoruz
            thrTest = new Thread(new ThreadStart(TestFonk));
 // Thread nesnesini oluşturup, hangi alt metodu çağıracağını belirliyoruz
            thrTest.Start();//Thread'i başlatıyoruz
            for (int i = 0; i < 100; i++)
            {
                lstItems.Items.Add("butona tıklandı.");  
// Listbox kontrolüne döngü boyunca öğe ekletiyoruz

            }
            lstItems.Items.Add("...");           
   
        }


         void TestFonk()                              
        {
            for (int i = 0; i < 10; i++)
            {
// çalışmakta olan işlem ise , belli bir süre sonra
// buton click evet i içindeki döngü ile çakışarak
                Thread.Sleep(1000);
                lstItems.Items.Add("Fonksiyon yazıyor!");
 // Tam bu noktada bir hata verir :
 // Cross-thread operation not valid: 
//Control 'lstItems' accessed from a thread other than
// the thread it was created on.
             
            }
            lstItems.Items.Add("Fonksiyon bittii!");
            
        }

 

Gördüğünüz üzere almış olduğumuz bu hata bize aynı anda 2 döngünün bir listbox kontrolüne öğe ekleyemeyeceğini gösterir.Bu tip bir uygulama tabiki çok kullanılmaz ben şahsen bu hatayı görmeniz için uğraştım. Fakat bu hatayı böyle bir uygulama değilde daha çok seriport nesnesi , tcplistener nesnesi ni kullanırken karşılaşma olasılığınız çok yüksektir. Örnek veriyorum , bizzat yaşadığım bir örnektir.

RFID cihazına bir protokol yazmaya çalıştığımda, seriporttan o cihaza ait komutları gönderip sonrada bana verdiği cevapları dinliyordum. Tag üzerine bilgi yazarken güzel sıkıntı yoktu , fakat tag üzerinden bilgi okurken sıkıntı oldu. Çünkü datarecived olayı içerisinde ben hem

seri porttan gelen bilgiyi okuyup aynı anda onu textbox üzerine yazmak istediğimde buna benzer bir hata ile karşılaştım. Çözümü asenkron fonksiyon çağırma tekniğini kullanarak hallettim.

Asenkron Programlama , belirli bir kod parçasını arka planda özel bir thread açarak, ana thread'ten bağımsız bir biçimde çalışmasını sağlar.

 

Hemen seri port uygulamam ile ilgili örnek kodumuda yazıyorum...

 

delegate void WriteTextBox(string data);
        //Delegemizi tanımlıyoruz

        public FrmMain()
        {
            InitializeComponent();
        }


         private void spTest_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
         {
             Thread.Sleep(500);//500mili saniye bekletiyoruz
             string m_spData = spTest.ReadExisting();//gelen datayı değişkene atıyoruz
             m_spData = m_spData.Trim();//boşlukları kaldırıyoruz
             this.BeginInvoke(new WriteTextBox(sp_DataReceived), new object[] { m_spData });//Buradada textbox ı dolduracak metodu çağırıp , parametremizi veriyoruz.
         }
         private void sp_DataReceived(string data)
         {
             txtDataRecived.Text = data;
         }

 

 

 

Kodun içeriğine bakarsak arkadaşlar gayet basit ve kolay olduğunu görüyoruz. Fakat anlamadığınız noktalar muhakkak olabilir, özellikle yeni programlamaya başladıysanız yada ısınma turlarındaysanız. Çünkü delegete yapısı nesne tabanlı programlamanın en önemli özelliklerindendir . Eventlerin oluşmasında birer bir delegete ler kullanılır. Bununla ilgili ileride bir örnek yayınlarım. Thread'konusunu ise ben genel olarak bu şekilde anlattım. Ama bu konuyu daha kapsamlı ve detaylı daha anlaşılır öğrenmeniz için arkadaşlar muhakkak işlemcilerin ve işletim sisteminin  , işlemleri hangi sıralarda ne ölçüde hangi mantıkta çalıştırdığını biraz anlamanız gerekmektedir. Thread'in bir çok özelliği mevcuttur , windows görev yöneticisini incelerseniz işlemönceliği gibi ,işlem durumu , işlem adı gibi birçok özelliği mevcuttur. Farklı teknikler üzerine kullanılabilir. Gerekli kaynakları internet üzerinde gayet güzel açıklanmış şekilde bulabilirsiniz, kafanıza takılan sorularınız için iletişime geçebilirsiniz.

Umarım faydalı olmuştur...

Örnek Uygulama  ( Sample Application ) :

ThreadExample.rar (37,58 kb)

Programlama Dili Kategorileri

by EMRCRK 6. May 2011 13:30

Arkadaşlar bu benim Programlama 2 ödevimdir. Biraz araştırmalar yaptım ve sizlerle paylaşmak istedim. Hocam görürsede umarım kızmaz :) . 

 

 

Kategoriler [3] 

v  1  Array languages   v  2  Aspect-oriented languages  v  3  Assembly languages  v  4  Authoring languages

v  5  Command line interface languages  v  6  Compiled languages v  7  Concurrent languages  v  8  Curly-bracket languages

v  9  Dataflow languages  v  10  Data-oriented languages v  11  Data-structured languages v  12  Declarative languages

v  13  Esoteric languages v  14  Extension languages v  15  Fourth-generation languages 

 v  16  Functional languages

o    16.1  Pure

o    16.2  Impure

v  17  Interactive mode languages  v  18  Interpreted languages v  19  Iterative languages v  20  List-based languages – LISPs

v  21  Little languages v  22  Logic-based languages v  23  Machine languages v  24  Macro languages v  25  Metaprogramming languages  v  26  Multiparadigm languages v  27  Numerical analysis

v  28  Non-English-based languages

v  29  Object-oriented class-based languages

o    29.1 Multiple dispatch

o    29.2 Single dispatch

v  30  Object-oriented prototype-based languages  v  31  Off-side rule languages  v  32  Procedural languages

v  33  Reflective languages  v  34  Rule-based languages v  35  Scripting languages

v  36  Stack-based languages  v  37  Synchronous languages v  38  Syntax handling languages v  39  Visual languages

v  40  Wirth languages  v  41  XML-based languages


 

 

Temel Kategoriler

Yüksek Seviyeli Diller, Düşük Seviyeli Diller olarak ayrılır. Bunlar dışında ise şu şekilde kategorize edebiliriz :

1.Nesne Tabanlı Programlama Dilleri

2.Makine Dilleri

 3.Script Dilleri

4.Makro Dilleri

5.Veritabanı Dilleri

6.Fonksiyonel Diller

7.Prosedürel Diller

8.Mantıksal Diller

9.Assembly

 

Aslında dikkat edersek en başta 3.kaynaktan almış olduğum kategoriler bir biri ile hep ilişkilidir. 41 çeşit kategorize edile bilir. Ben lacivert renk ile yazdığım kategorileri kendi tecrubem ve eski araştırmalarıma dayanarak yazdım.

Nesne Tabanlı diller : C#,C,Objective – C,Java  örnek verile bilir. Bu diller içerisindede Fonksiyon,Prosedürler kullanılır ve Yüksek seviyeli dillerdir. Kullanımları kolaydır. Gerçek dünya daki nesneleri yazılımsal olarak ifade ederek büyük problemleri çözmemize yarar. Örnek olarak basit ama bir yazıcı nesnesini kodsal olarak ifade edebiliriz. Nesne tabalı diller genel olarak static yapıda olan dillerdir. Biz programlama dillerini alt kategorilere ayrırarak çoğalta biliriz. Fakat şuan .NET Framework teknolojisi sayesinde C#programlama dili dinamik şekilde kullanıla biliyor. [5] 

 

Makine Dilleri , çok zor ve en düşük seviyeli dillerdir.  CPU üzerinden direk işlenir.[1]  Örnek :“10000101”

Şeklinde kodlar ile ifade edilir.

Assembly dilleri 2. Nesil dillerdir . Makine kodu yazmanın zorluğundan sonra ilk kolay dildir.

Script dilleri , gününüzün popüler dil kategorilerindendir. Php,asp,ASP.NET,Javascript bu tür dillere örnek olarak verilebilir. Ayrıca script dilleri dinamik diller olarakda ifade edilir.

Makro dilleri , makro dillerine örnek C verilebilir yada VB diye düşünüyorum . Çünkü excelde,accessde makrolar tanımlana biliyor .

 

Veritabanı dilleri , T-SQL buna en güncel ve güzel örnektir. Bu dil sayesinde prosedürler,fonksiyonlar rahatlıkla tanımlana bilir . Kolay,esnek ve güzeldir. Veritabanı sistemlerine göre bu dilin bazı özellikleri vs. Değişe bilir. MySQL,Oracle ‘ın yapısında MS-SQL in kullandığı T-SQL arasında farklılıklar mevcuttur.

 

Fonksiyonel diller, bu dillerede örnek olarak Microsoft’un yeni dili olan F# en güncel örnektir.  Diğer dillerden Scala(Java),Lisp örnek verilebilir.

Prosedürel diller , C , C++, C# ,Delphi gibi dillerle yeterince procedure ve fonksiyon yazıla biliyor.

Mantıksal diller , genellikle yapay zeka programlamada kullanılır bu diller. Örnek olarak ALF,Curriy,Prolog verilebilir.

 

 

  

 

KAYNAKLAR

[1] http://www.slideshare.net/atillaozgur/programlama-dilleri-3623651

[2] http://www.cs.oberlin.edu/~jwalker/languageCategories.html

[3] http://en.wikipedia.org/wiki/List_of_programming_languages_by_category

[4] http://openmap.bbn.com/~kanderso/aop/AOP-thoughts.html

[5] http://www.emrecirik.com/post/2011/04/03/C-40-Dynamic-Visual-Studio-2010-NET-Framework-4-COM.aspx

[6] http://www2.parc.com/csl/groups/sda/publications/papers/Kiczales-ECOOP97/for-web.pdf 



PROGRAMLAMA DİLLERİ.doc (199,00 kb)

IPHONE 4 G GEVEY

by EMRCRK 5. May 2011 10:38

Arkadaşlar iPhoneAlSat 'da iphone 4 gevey donanımları satılmaktadır. Kesinlikle çalışıyor. Piyasada bir çok gevey mevcut fakat çalışıp çalışmama konusunda sıkıntılar var. Denendi ve görüldü ;). Lock'lu iPhone 4'ler bu donanım sayesinde çalışmaktadır.

Tags: , , ,

Java 4 Ever Video

by EMRCRK 5. May 2011 00:59

Arkadaşlar , az önce biraz kaçamak yaptım bir kaç siteyi dolaşırken çok güzel bir video ya rastladım. Bu kısa video'nun konusu açık kaynak yazılımlarla ilgili. :) Filmi anlatmak istemiyorum izlemelisiniz kesinlikle . 

 

This video deals with the open-source software. Very enjoyable and I recommend a nice video to watch. 

 

Link : Java 4 ever

Tags:

Veri Tabanı Tasarımı ve Programlama - Giriş

by EMRCRK 30. April 2011 15:01

Arkadaşlar bu konu birkaç bölümden oluşacak. Çünkü veritabanı  tasarlama,onu programlama ve üzerine arayüz yazılması gibi katmansal yapıda olması gereken bir sistemdir. Şimdi genelde biz millet olarak zeki bir milletiz fakat günü kurtaran,basit ve sıradan çözümler üretmektede üstümüze yoktur. Şimdiye kadar bir çok veritabanı sistemi gördüm, program veri tabanı sistemlerini inceledim ama şunlar bir kaç program dışında hep eksikti. 

1-) Normalizasyon

2-) Procedure , Function , Trigger gibi işleri kolaylaştıracak ve yazılan arayüz programının yükünü azaltacak sistemler yok.

3-) Veri tabanı planlama , ilişkilendirme yada diagram diyelim bu tarz bir sistemler mevcut değil.

 

Şimdi arkadaşlar ciddi manada bir program yazmak istiyorsak ve bunun mümkün olduğunca performanslı ve güvenilir çalışması gerekiyorsa ilk önce veri tabanını tasarlamak gerekir. Veri tabanını tasarlar kende yukarıdaki 3 kuralı ( 1. kural içerisinde 5 alt kural mevcuttur) mümkün olduğunca uygulamakta fayda var. 

Örnek veriyorum bir stok takip sistemi yazılacak ( Çok basit bir örnek ama hala günümüzde doğru düzgün birşey göremedim) olsun.

 

1.si benim stoklar için bir index alan (tekrarsız alan) belirtmem gerek. Belki ilerde stok kodu değişir,stok adı değişir.Bunları düşünerek hareket etmek gerekir. Daha bir sürü olasılık var ama aklıma gelmiyor. ( Not: Stok kodu değiştirmek  çok gerekmedikçe önerilmez. )

2.si stok giriş-çıkış hareketlerini tutan bir tablo tasarlamakmı gerek yoksa ben stok tablomda bakiye tutarım her hareket işlemindede güncellerim demek mi? Bu noktada tabikide hareket bilgisi tutucaksınız ama bir daha kalkıpta stok tablosunda gidip bakiye güncellemek çok saçma birşey. Bunun yerine hareket tablomda özel alanlar belirtirim TIP gibi. Tip 1 ise giriş hareketi , 2 ise çıkış hareketi derim ve bunun için bir view tasarlarım yada function yazarım ki mantıklısı budur. Bana ilgili stok referansımı verdiğimde o stoğun bakiyesini versin. Tüm giriş ve çıkış hareketlerinin farkını alan bir fonksiyon. Bunu program üzerindede yaparsınız ama SQL hızlıdır. Ve bu tip işlemleri SQL üzerinde yaparsanız programdan daha fazla verim alırsınız.

3.sü bir stok giriş hareketinde stokğun hangi depoya girdiğini nereden geldiğini vb. bilgileri barındıran tablolara muhakkak ihtiyaç olacaktır. Bunları o tablolara bir şekilde insert yada update yapmak gerekir. Bu noktadada trigger yazmak mantıklıdır. Fakat stok hareket tablosuna bilgi yazarken bunu triggerla yapamıcağımıza göre procedure ile yapıcaz ve bu tablomuz için inserted trigger ı yazarsak dediğimiz işlem harika bir şekilde güzel olacaktır.

4.sü tekrarlı bilgilerimizi önlemek amaçlı illaki index alanları belirtmemiz gerekir.

5.si Tablo alanlarınızın mümkün olduğunca düzgün olmasına özen gösterin. Örnek içeri sadece tam sayı şeklinde bilgi yazılıcak bir alana gidipte float veri tipini vermek çok saçmadır. Bu aynı boxing ve unboxing işlemlerine benzer. 

6.sı Viewlarınızı raporlamalar için kullanın.

7.si SQL TRANSACTION kullanmayı sakın unutmayın. Bu bir insert yaparken heleki ilişkili tablolar arası insert yaparken bir tabloyu yazıp diğerinde hata verirse işlemleri geri almak ve veri güvenliği için süper bir çözümdür.

0.sı BUNU EN SON SÖYLEDİM AMA EN BAŞTA OLMASI GEREKİR =) BİR İŞE BAŞLAMADAN ÖNCE SİZDEN NE İSTENDİĞİNİ İYİ ÖĞRENİN. NE YAPMANIZ GEREKTİĞİNİ PLANLAYIN. VE BU KURALARA UYARAK BİR ŞEMA TASARLAYIN. TAHTA KULLANIN , FİKİR ALIŞ VERİŞİNDE BULUNUN. HER TÜRLÜ OLASILIKLARI GÖZ ÖNÜNDE BULUNDURUN. 

Bu maddeleride yaz yaz bitceğini sanmıyorum. 

Konu devamında sizlerle örnek yaparak gidicez inşallah. Vakit buldukça sizlere yardımcı olmaya çalışacağım.

Tags: , , , , ,

SQL

Text Dosya birleştirici ( Text File Joiner )

by EMRCRK 28. April 2011 12:41

Merhaba arkadaşlar,size çok basit bir programdan bahsediceğim. Konu başlığındada belirtildiği gibi text dosya birleştirici. Arkadaşlar bu programa nasıl ihtiyaç duydum bugün müşterimde 105 adet text dosyada sayım bilgileri mevcuttu ve bunları tek dosyada birleştirmem gerekiyordu. Çok kolay bir program diye google dan aradım ve buldum programı. Kurdum daha sonra bir baktım ki program ücretli . Dedim nasıl olur bu programı satın alırlarmı ki alıyolarmış :) Şimdi biz bu programı cracklermiydik evet ama gerek yok. Oturup program yazmak hem ahlaki açıdan hemde bizim açımızdan daha iyidir. 

Normal şartlarda .NET platformu ile yazabileceğimiz bu porgramı bu sefer Delphi 7 de hazırladık. Çünkü Delphi ile daha hızlı programlar hazırlaya biliyorsunuz. Nuh hocam bu işi üstlendi ve tamı tamına 2 dk gibi kısa bir sürede programı hazırladı. 

 

TextBirlesTirme.rar (168,71 kb)

 

 

 


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    Button2: TButton;
    Memo2: TMemo;
    Memo3: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
Procedure FindFiles(const Path, Mask: string; IncludeSubDir: boolean; Out List:TStringList);
var
  FindResult: integer;
  SearchRec : TSearchRec;
begin
  FindResult := FindFirst(Path + Mask, faAnyFile - faDirectory, SearchRec);
  while FindResult = 0 do
  begin
    { do whatever you'd like to do with the files found }
    List.Add(Path + SearchRec.Name);
    FindResult := FindNext(SearchRec);
  end;
  { free memory }
  FindClose(SearchRec);
  if not IncludeSubDir then
    Exit;
  FindResult := FindFirst(Path + '*.*', faDirectory, SearchRec);
  while FindResult = 0 do
  begin
    if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
        FindFiles (Path + SearchRec.Name + '\', Mask, TRUE,List);
    FindResult := FindNext(SearchRec);
  end;
  { free memory }
  FindClose(SearchRec);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
liste:TStringList;
begin
    liste:=TStringList.Create;
    FindFiles(edit1.Text+'\','*.txt',False,liste);
    Memo1.Lines.Clear;
    Memo1.Lines:=Liste;
    liste.Free;
 end;

procedure TForm1.Button2Click(Sender: TObject);
var
 i:integer;
begin
  for i:= 0 to memo1.Lines.Count -1 do
      begin
        memo2.Lines.LoadFromFile(memo1.Lines[i]);
        memo3.Lines.Add(memo2.Text );
      end;
  memo3.Lines.SaveToFile(edit1.text+'\birlesmis.txt');
end;

end.

Tags: , ,

Delphi 7

Month List

Calendar

<<  December 2014  >>
MoTuWeThFrSaSu
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

View posts in large calendar