Basit Bir Büyüteç Uygulaması

N3CAT1

Dekan
Emektar
Katılım
20 Nisan 2008
Mesajlar
6,608
Reaksiyon puanı
144
Puanları
243
Bilgilendirme:
Masaüstünüz için eğlenceli küçük bir araç: basit büyüteç.

Arkaplan:
Daha önceleri en az bir kere olsun büyüteç uygulaması gördüğünüze inanıyorum. İşletim sistemi ile birlikte geleni denedim fakat beğenmedim. Bu yüzden kendi kullanımım için basit bit uygulama geliştirmeye karar verdim.

Kodlar hakkında birkaç kelime:
Daha önceden de açıkladığım gibi program basit bir uygulamadır. Ancak yine de birkaç ilginç nokta var: Bunların birincisi, nasıl ekran görüntüsü alınacağını gösteriyor, double buffering, Windows formunu programsal olarak hareket ettirme, ve XmlSerializer üzerinden serializing/deserializing yapılandırma işlemleri. Bunların ikincisi, bu küçük uygulama aklımda eğlenceli bir uygulama olarak tasarlanmıştır, onun için bu işlemler geleneksel Windows programlama adımlarını takip etmez. Onun yerine ana form olarak çerçevesiz bir pencere kullandım. Sadece 3 buton tüm işlevleri sağlar: Birincisi büyüteç formunu temsil eder, ikincisi yapılandırma işlemleri, üçüncüsü uygulamadan çıkış.

Uygulamadan birkaç ekran görüntüsü:

magnifier.png


magsample1.jpg


Yapılandırma kısmı basit birkaç şeyle oynamanızı sağlar:

magconfig1.jpg


Kod parçacıklarından bazıları altta görünüyor:

PHP:
// Pencereyi eliptik yapma
GraphicsPath gp = new GraphicsPath();
gp.AddEllipse(ClientRectangle);
Region = new Region(gp);
 
//--- Double Buffering --- 

protected override void OnPaintBackground(PaintEventArgs e)
{
    if (mConfiguration.DoubleBuffered)
    {
        // Arkaplanı boyamayın (double buffering için gerekli)!
    }
    else
    {
        base.OnPaintBackground(e);
    }
} 

protected override void  OnPaint(PaintEventArgs e)
{
    if (mBufferImage == null)
    {
        mBufferImage = new Bitmap(Width, Height);
    }
    Graphics bufferGrf = Graphics.FromImage(mBufferImage);

    Graphics g;

    if (mConfiguration.DoubleBuffered)
    {
        g = bufferGrf;
    }
    else
    {
        g = e.Graphics;
    }

    if (mScreenImage != null)
    {
        Rectangle dest = new Rectangle(0, 0, Width, Height);
        int w = (int)(Width / mConfiguration.ZoomFactor);
        int h = (int)(Height / mConfiguration.ZoomFactor);
        int x = Left - w / 2 + Width / 2;
        int y = Top - h / 2 + Height / 2;

        g.DrawImage(
            mScreenImage,
            dest,
            x, y,
            w, h,
            GraphicsUnit.Pixel);
    }

    if (mImageMagnifier != null)
    {
        g.DrawImage(mImageMagnifier, 0, 0, Width, Height);
    }

    if (mConfiguration.DoubleBuffered)
    {
        e.Graphics.DrawImage(mBufferImage, 0, 0, Width, Height);
    }      
} 
//--- XML Serialization --- 
public class XmlUtility
{
    public static void Serialize(Object data, string fileName)
    {
        Type type = data.GetType();
        XmlSerializer xs = new XmlSerializer(type);
        XmlTextWriter xmlWriter = new XmlTextWriter(fileName, System.Text.Encoding.UTF8);
        xmlWriter.Formatting = Formatting.Indented;
        xs.Serialize(xmlWriter, data);
        xmlWriter.Close();
    }

    public static Object Deserialize(Type type, string fileName)
    {
        XmlSerializer xs = new XmlSerializer(type);

        XmlTextReader xmlReader = new XmlTextReader(fileName);
        Object data = xs.Deserialize(xmlReader);

        xmlReader.Close();

        return data;
    }        
}
Lütfen detaylara bakmak için uygulamanın içinde sağlanan kodlara bakın.

Sonuç:
Bu uygulamayı kodlamak gerçekten eğlenceliydi. Bu uygulamayı arkadaşlarımla paylaştım ve gerçekten çok sevdiler. En az benim kadar sizin de seveceğinizi ümit ediyorum.

İyi geceler!

Tarih:
İlk mesaj: 2 Nisan 2007

Lisans:
Bu makale, makale içindeki kod ve dosyalar, The Code Project Open License (CPOL) altında lisanslanmıştır.

Kaynak: http://www.codeproject.com/KB/cs/SimpleMagnifier.aspx
Çeviri: Ben :flowers:
Proje Kodları: http://ul.to/e69rul
 

evowinds

Dekan
Katılım
2 Kasım 2008
Mesajlar
9,100
Reaksiyon puanı
174
Puanları
243
Güzelmiş, eline sağlık. Delphi ve Pascal için de benzer bir site var mı bildiğin?
 

N3CAT1

Dekan
Emektar
Katılım
20 Nisan 2008
Mesajlar
6,608
Reaksiyon puanı
144
Puanları
243
Valla bildiğim kadarıyla planet-source-code.com var. Ama delphi için codeproject.com gibi bir site bulmak zor. Üniversite sondayken delphi görüyorduk. Proje verirlerdi her hafta. Yapana kadar canımız çıkardı. Çünkü kaynak yok.

İnanmazsın NULL 'un delphideki karşılıını bulasıya göbeğim çatladı :D Meğer karşılığı nil 'miş. Syntax yapısı da çok kullanışlı gelmiyor bana.
 
Üst