Rakkoc.Com Recep Akkoç / Rakkocun Yazıtları

31Oca/160

Windows Form Uygulamasında Konsol açma

Merhaba Arkadaşlar,

Windows uygulaması içinde konsol açmak için bir örneği paylaşmak istedim. Tabi birazda dökümante olsunda gerektiğinde buradan bakarım mantığında paylaşıyorum.

using System;  
using System.Windows.Forms;  
using System.Text;  
using System.IO;  
using System.Runtime.InteropServices;  
using Microsoft.Win32.SafeHandles;  
 
namespace WindowsApplication  
{  
    static class Program  
    {  
        [DllImport("kernel32.dll",  
            EntryPoint = "GetStdHandle",  
            SetLastError = true,  
            CharSet = CharSet.Auto,  
            CallingConvention = CallingConvention.StdCall)]  
        private static extern IntPtr GetStdHandle(int nStdHandle);  
        [DllImport("kernel32.dll",  
            EntryPoint = "AllocConsole",  
            SetLastError = true,  
            CharSet = CharSet.Auto,  
            CallingConvention = CallingConvention.StdCall)]  
        private static extern int AllocConsole();  
        private const int STD_OUTPUT_HANDLE = -11;  
        private const int MY_CODE_PAGE = 437;  
 
        static void Main(string[] args)  
        {  
            Console.WriteLine("This text you can see in debug output window.");  
              
            AllocConsole();  
            IntPtr stdHandle=GetStdHandle(STD_OUTPUT_HANDLE);  
            SafeFileHandle safeFileHandle = new SafeFileHandle(stdHandle, true);  
            FileStream fileStream = new FileStream(safeFileHandle, FileAccess.Write);  
            Encoding encoding = System.Text.Encoding.GetEncoding(MY_CODE_PAGE);  
            StreamWriter standardOutput = new StreamWriter(fileStream, encoding);  
            standardOutput.AutoFlush = true;  
            Console.SetOut(standardOutput);  
 
            Console.WriteLine("This text you can see in console window.");  
 
            MessageBox.Show("Now I'm happy!");  
        }  
    }  
} 

AllocConsole fonksionu tekbaşınada konsolu açıyor, Fakat daha önceden Console.Write gibi bir konsol işlemi yaptırdı iseniz yeni acılacak konsol ekranı sadece siyah ekrandan ibaret bir pencere olacaktır. Aktif uygulamayı handle (tutamaç) edip. bu handle'den bir stream (akış) oluşturup bu stream den bir stream writer (yazıcı akışkan) oluşturup mevcut thread'e basarsak yeni ekelenecek console metinleri direk siyah ekranımıza düşecektir.

iyi çalışmalar dilerim.

 

Windows form da bir örnek de yapayım; Aşağıdaki örnette Timer1 1 saniyede bir ekrana saat tarih basmakta. Button3'e basıldığında Console ekranı gelecek ve saat tarih ekrana yazılmaya başlayacaktır. Bütün işlem button3'un onclick fonksiyonun icindeki adımlar.

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;
using System.Runtime.InteropServices;
using System.IO;
using Microsoft.Win32.SafeHandles;

namespace MifareHidEmilator
{
    public partial class frmMainForm : Form
    {

        [DllImport("kernel32.dll",
    EntryPoint = "GetStdHandle",
    SetLastError = true,
    CharSet = CharSet.Auto,
    CallingConvention = CallingConvention.StdCall)]
        private static extern IntPtr GetStdHandle(int nStdHandle);
        [DllImport("kernel32.dll",
            EntryPoint = "AllocConsole",
            SetLastError = true,
            CharSet = CharSet.Auto,
            CallingConvention = CallingConvention.StdCall)]
        private static extern int AllocConsole();
        private const int STD_OUTPUT_HANDLE = -11;
        private const int MY_CODE_PAGE = 437;  

        
        public frmMainForm()
        {
            InitializeComponent();
            //this.Hide();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            AllocConsole();

            IntPtr stdHandle = GetStdHandle(STD_OUTPUT_HANDLE);
            SafeFileHandle safeFileHandle = new SafeFileHandle(stdHandle, true);
            FileStream fileStream = new FileStream(safeFileHandle, FileAccess.Write);
            Encoding encoding = System.Text.Encoding.GetEncoding(MY_CODE_PAGE);
            StreamWriter standardOutput = new StreamWriter(fileStream, encoding);
            standardOutput.AutoFlush = true;
            Console.SetOut(standardOutput);  
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            Console.WriteLine(DateTime.Now);
        }

        private void frmMainForm_Load(object sender, EventArgs e)
        {

        }
    }
}
20Ara/150

Bootstrap Nedir, Ne iş yapar, Neden kullanılır

Sevgili Blogum, okurlarım, google bot Bootstrapresponsive ve mobile-first projeler geliştirebileceğimiz en popüler framework'lerden biridir. Kendileri twiter tarafından responsivite amaçlı geliştirilmiştir. Özellikle Google'ın 21 nisan güncellemesi ile arama algoritmasında değişikliğe gidip, mobil arayüzü desteği olmayan siteleri 2. plana atacağını söylemesiyle birlikte her zamankinden daha fazla ihtiyaç duyuldu.

Responsive, duyarlı / uyumlu web tasarım, yani mobil cihazlarda iyi bir deneyim sunan web siteleridir.
Mobile-first, Web teknolojilerinde önceliği cep telefonuna ver, pc tarafını ondan sonra planla demektir.

Bootstrap ve buna benzer tüm plugin veya framework'leri belgemize dahil etmenin 2 yolu vardır. İlki CDN kullanmak, ikincisi de kütüphane dosyalarını kendi sunucumuzda host etmek. Benim kişisel önerim tüm plugin veya framework'leri kendi sunucunuza çekmeniz şeklindedir. Nedeni ise geliştirme süreçinde internet bağımlılığından kurtulma; kullanılan versionun desteğinin kalkması gibi durumlardan etkilen meme ve gerektiğinde uygulamaların yanlız intranet (iç network) üzerinden erişimi. en son aklıma gelen de https bağlantılarında cdn'in eklentısını kontrol etme gereksiniminden kurtulma (bu sonuncusu tembellikten başka bir şey değil)

Peki bu işler nasıl yapılır; GetBootStrap sayfasındaki Download bölümüne girip Download Bootstrap dersın ve gelir. güncel versionda 'bootstrap-3.3.6-dist' dosyası gelmekte.

CSS\bootstrap.css
CSS\bootstrap-theme.css
JS\bootstrap.min.js

bu dosyalari sayfaniza dahil ettikten sonra Jquery'yi de dahil etmeniz gerekmektedir. visual studio da bir MVC projesi açtığımızda nasıl gözüküyor neler çekiyor bir bakalım:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Home Page - My ASP.NET Application</title>
    <link href="/Content/bootstrap.css" rel="stylesheet" />
    <link href="/Content/bootstrap-theme.css" rel="stylesheet" />
</head>
<body>
    <div class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="/">Application name</a>
            </div>
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav">
                    <li><a href="/">Home</a></li>
                    <li><a href="/Home/About">About</a></li>
                    <li><a href="/Home/Contact">Contact</a></li>
                </ul>
                    <ul class="nav navbar-nav navbar-right">
        <li><a href="#" id="registerLink"><span class="glyphicon glyphicon-user"></span> Register</a></li>
        
        <li><a href="/Account/Login" id="loginLink">Log in</a></li>
    </ul>

            </div>
        </div>
    </div>
    <div class="container body-content">
        


<div class="jumbotron">
    <h1>ASP.NET</h1>
    <p class="lead">ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS and JavaScript.</p>
    <p><a href="http://asp.net" class="btn btn-primary btn-lg">Learn more »</a></p>
</div>

<div class="row">
    <div class="col-md-4">
        <h2>Getting started</h2>
        <p>
            ASP.NET MVC gives you a powerful, patterns-based way to build dynamic websites that
            enables a clean separation of concerns and gives you full control over markup
            for enjoyable, agile development.
        </p>
        <p><a class="btn btn-default" href="http://go.microsoft.com/fwlink/?LinkId=301865">Learn more »</a></p>
    </div>
    <div class="col-md-4">
        <h2>Get more libraries</h2>
        <p>NuGet is a free Visual Studio extension that makes it easy to add, remove, and update libraries and tools in Visual Studio projects.</p>
        <p><a class="btn btn-default" href="http://go.microsoft.com/fwlink/?LinkId=301866">Learn more »</a></p>
    </div>
    <div class="col-md-4">
        <h2>Web Hosting</h2>
        <p>You can easily find a web hosting company that offers the right mix of features and price for your applications.</p>
        <p><a class="btn btn-default" href="http://go.microsoft.com/fwlink/?LinkId=301867">Learn more »</a></p>
    </div>
</div>

        <hr />
        <footer>
            <p>© 2015 - My ASP.NET Application</p>
        </footer>
    <script src="/Scripts/jquery-1.11.3.js"></script>
    <script src="/Scripts/bootstrap.js"></script>
</body>
</html>

7. ve 8. satırlarda

<link href="/Content/bootstrap.css" rel="stylesheet" />

<link href="/Content/bootstrap-theme.css" rel="stylesheet" />

72 ve 73 de

<script src="/Scripts/jquery-1.11.3.js"></script>

<script src="/Scripts/bootstrap.js"></script>

Content demesenin sebebi mvc projesinde cssleri default projede orada toplamışlar. Sayfayı bir gözden geçircek olursak ana tablo altında bir grid yapısı vs mevcut. bunları da anlatacağım ama hızlı olarak tab anlamarını söyliyim ve bu günlük bitiriyim.

.col-xs-*(extra small) - ekstra küçük cihazlar(telefonlar)
.col-sm-*(small) - küçük cihazlar(tabletler)
.col-md-*(medium) - orta boylu cihazlar(netbook'lar)
.col-lg-*(large) - geniş cihazlar(masaüstüler)

test ve görsel : http://www.bootply.com/xOLRwoOKFx

8Eyl/150

C# ve Printer 2

Merhaba sevgili okurlar,

Ben hep kendim yazıyorum kendim okuyorum diye düşünüyordum ama pek öyle değilmiş. Blog daki yazılar ile ilgili mail ve sms atanlar oldu. Entity framework ve Csharp printer ile ilgili yazılarımın devamını sormuşlar. Entity biraz zor, o konuda db hazırla örnek hazırla vs zaman istiyor. Devam edemeyeceğim o konuya büyük ihtimal ile.

Fazla uzatmadan direk printer ve resim ile ilgili bir basit örnek paylaşayim dedim.

proje dosyasınıda buradan indire bilirsiniz: testApp32

sifre : blog.rakkoc.com

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

namespace testApp32
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        PrintDocument pd = new PrintDocument();

        private void Form1_Load(object sender, EventArgs e)
        {
            pd.PrintPage += pd_PrintPage;
        }


        private void btnGetPrinterList_Click(object sender, EventArgs e)
        {
            //ListBox'i temizle
            listBox1.Items.Clear();
            // her bir yuklu printer
            foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
            {
                //listeye ekle.
                listBox1.Items.Add(printer);
            }
        }

        private void btnPrintImage_Click(object sender, EventArgs e)
        {
            //print al
            pd.Print();
        }

        void pd_PrintPage(object sender, PrintPageEventArgs e)
        {
            // Sayfa olcu birimi olarak milimetre kullanacak
            e.Graphics.PageUnit = GraphicsUnit.Millimeter;

            //oylesine bir imaj olusturalim.
            Bitmap biImage = new Bitmap("Yoroca.png");
            // X, Y, Width, height gibi olculer istege bagli milimetrik olarak girilir.
            e.Graphics.DrawImage(biImage, 10, 10);

            //bir tanede string koyalim
            e.Graphics.DrawString("test 1 2 3", new Font("Arial", 4), (Brush)Brushes.Black, 1, 1);

        }

        //listeden Printer secilirse
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                //Secilen printeri printdocument objesinin printer adina atayalim.
                pd.PrinterSettings.PrinterName = Convert.ToString(listBox1.Items[listBox1.SelectedIndex]);

            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.Message);
            }
        }

    }
}
27Eki/140

C# Guid

Merhabalar basta google bot olmak ozere butun botlar ve onlari takip eden clientlar.

suanda bir projede ihtiyacim oldugu icin google'a danistigim bir seyi burayada not dusmek istedim.

//Guid Tanimla            
Guid aNewGuid = Guid.NewGuid();

// string'e ata (mailingde kullandigim formatim)            
string stringAsLikeGuid = aNewGuid.ToString();

// ByteArray olarak kullan (Bunu soket serverde cok kullaniyorum)            
byte[] likeByteArray = aNewGuid.ToByteArray();

// havada yaratip atama yapalim
string alsoUseFly = Guid.NewGuid().ToString();

// Havadakinin byte arrayi (bunuda zamaninda ornek olsun diye kodlamisim ama hic kullanmadim galba)
byte[] FlyByteArray = Guid.NewGuid().ToByteArray();

Google den lazim olan formatlama kismina bakmistim buraya not duseyim:

Console.WriteLine("Guid.NewGuid().ToString() = {0}", Guid.NewGuid().ToString());
Console.WriteLine("Guid.NewGuid().ToString(\"N\") = {0}", Guid.NewGuid().ToString("N"));
Console.WriteLine("Guid.NewGuid().ToString(\"D\") = {0}", Guid.NewGuid().ToString("D"));
Console.WriteLine("Guid.NewGuid().ToString(\"B\") = {0}", Guid.NewGuid().ToString("B"));
Console.WriteLine("Guid.NewGuid().ToString(\"P\") = {0}", Guid.NewGuid().ToString("P"));

ciktisi :

Guid.NewGuid().ToString() = 9b89ea45-0362-4bd7-b350-d8dbd768c581
Guid.NewGuid().ToString("N") = 1fa00e6adece4a19b121264508d91178
Guid.NewGuid().ToString("D") = eb941092-506e-4b8a-9945-7863bda96cc6
Guid.NewGuid().ToString("B") = {759ca2cb-9eed-4245-a378-3d16c9780876}
Guid.NewGuid().ToString("P") = (1afd9c5f-6a3a-462a-aa79-43c506b11639)

Daha fazlasi icin microsoft amcaya danisirim : http://msdn.microsoft.com/en-us/library/97af8hh4(v=vs.110).aspx

hayirdi iyi gecenin korleri bilokum.

17Eyl/142

Ean8 ve Ean13 Barkod hesaplamasi

Merhabalar, Kacan uykumun pesinden kosmak yerine bloglamak istedim. Fakat suan macbookumda oldugum icin turkce karakter kullanamiyorum malesef. Dubai mali olunca cihaz 🙂

Bu aralar check algoritmalarinin paylasildigi bir yer haline gelmekte baktim ki burasi, Luhn Check mod 10 dogrulamasi mevcut, Tc Kimlik dogrulamasi mevcut C# da EAN 13 ve EAN8 nasil hesaplanir onu yazayim dedim.

Turkce karakter kullanmadigim icin ozur dileyecektim konuyu nasil dagittim nereye ne sekilde blog'un iceriginde dondu 🙁 anlamadim ve suan ise yarar birsey yapmanin en guzel kismi uykum geldi 🙁

Fazla uzatmiyim EAN 8 ve EAN 13 birer barkod cesididir. Hatta en cok kullanilanlardan birtanesidir. Ean13'u surekli ev urunlerinde gorurz uzunlu kisali olan barkod cesitlerindendir ean.

Ean 13 e ornek :

perakendecilik sektorunden bir ornek ve anlatimi.

Ean 13 ilk 12 hanesi barkod datasidir. 13. karakter kontrol dijit.

Ean 8 ilk 7 hanesi barkod datasi, 8. karakter kontrol dijiti.

kimi yerde kontrol dijiti kimi yerde check digit yaziyorum kusura bakmayin.

(Kodlar baska kaynaklardan alintidir..)

Ean 13 C# kodu :

static int _checksum_ean13(String data)
{
    // Test string for correct length
    if(data.Length != 12 && data.Length != 13)
        return -1;

    // Test string for being numeric
    for(int i=0;i<data.Length;i++)
    {
        if(data[i] < 0x30 || data[i] > 0x39)
            return -1;
    }

    int sum = 0;

    for(int i=11;i>=0;i--)
    {
        int digit = data[i] - 0x30;
        if ((i & 0x01) == 1)
            sum += digit;
        else
            sum += digit * 3;
    }
    int mod = sum % 10;
    return mod == 0 ? 0 : 10 - mod;
}

Ean 8 C# Kodu :

static int _checksum_ean8(String data)
{
    // Test string for correct length
    if(data.Length != 7 && data.Length != 8)
        return -1;
	
    // Test string for being numeric
    for(int i=0;i<data.Length;i++)
    {
        if(data[i] < 0x30 || data[i] > 0x39)
            return -1;
    }

    int sum = 0;

    for(int i=6;i>=0;i--)
    {
        int digit = data[i] - 0x30;
        if ((i & 0x01) == 1)
            sum += digit;
        else
            sum += digit * 3;
    }
    int mod = sum % 10;
    return mod == 0 ? 0 : 10 - mod;
}
Toplam 4 sayfa mevcuttur; 1. sayfayi okuyorsunuz...1234