<?xml version="1.0" encoding="windows-1250"?><?xml-stylesheet href="/rss20.xsl" type="text/xsl"?><rss version="2.0">
  <channel>
    <title>Programování - A jedeme dál ...</title>
    <link>http://weblog.clovicek.net/</link>
    <description>Človíčkův Weblog aneb Michal Horák bloguje</description>
    <language>cs</language>  
    <generator>A jedeme dál ... 0.1</generator>

    <copyright>Michal Horák</copyright>
    <category>weblog</category>
    <docs>http://backend.userland.com/rss</docs>
    
	<item>
		<title>WPF analogové hodiny</title>
		<link>http://weblog.clovicek.net/prispevek-wpf-analogove-hodiny.html</link>
		<description>Když jsem si začal hrát s WPF tak první věc co se mi myslím trošku povedla, byly analogové hodiny jako userControl. Bylo to překvapivě snadné a tak se o řešení podělím. Nevýhodou userControlu je, že hodiny mají pevnou velikost, sice chvilku snaha na nápravu byla, ale už nebyl čas.




	
		
			
			
			
		
		
			
			
			
		
		
			
				
					
				
			
			
				
					
				
			
			
				
					
				
				
					
				
			
			
				
					
				
			
			
				
					
				
			
			
			
			
			
				
					
				
			
			
		
	


A samozřejmě kód v c#, který hodiny rozběhá:

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Timers;
using System.Windows.Threading;

namespace CashDeskVision
{
	/// 
	/// Interaction logic for Clock.xaml
	/// 
	public partial class Clock : UserControl
	{

        private RotateTransform minuteRotateTransform;
        private RotateTransform hourRotateTransform;
        private RotateTransform secondRotateTransform;

        public delegate void TickTackHandler(Object sender, EventArgs e);
        DispatcherTimer secondTimer = new DispatcherTimer();


        public string Text {
            get {
                return this.text.Text;
            }
            set {
                this.text.Text = value;
            }
        }

		public Clock()
		{
			this.InitializeComponent();
            SetTime(DateTime.Now);

            secondTimer.Tick += new EventHandler(secondTimer_Tick);
            secondTimer.Interval = new TimeSpan(0, 0, 1);
            secondTimer.Start();
		}

        void secondTimer_Tick(object sender, EventArgs e)
        {
            SetTime(DateTime.Now);
        }

        private void SetTime(DateTime time)
        {


            minuteRotateTransform = new RotateTransform(time.Minute * 6, 0, 0);
            this.minute.RenderTransform = minuteRotateTransform;
           
            hourRotateTransform = new RotateTransform(time.Hour * 30, 0, 0);
            this.hour.RenderTransform = hourRotateTransform;

            secondRotateTransform = new RotateTransform(time.Second * 6, 0, 0);
            this.second.RenderTransform = secondRotateTransform;
        }


	}
}
. </description>
		<comments>http://weblog.clovicek.net/prispevek-wpf-analogove-hodiny.html#komentare</comments>
	</item>

	<item>
		<title>Google translator API pro C#</title>
		<link>http://weblog.clovicek.net/prispevek-google-translator-api-pro-c.html</link>
		<description>Kdo chcete využívat google translator i programově a ještě k tomu na platformě .NET tak je k nalezení knihovna, pomocí které můžete nechat přeložit jakýkoliv retězec. Tuto knihovnu najdete na adrese http://code.google.com/p/gtapi/. . </description>
		<comments>http://weblog.clovicek.net/prispevek-google-translator-api-pro-c.html#komentare</comments>
	</item>

	<item>
		<title>Spuštění výchozího emailového klienta s přednastavenou zprávou pomocí MAPI</title>
		<link>http://weblog.clovicek.net/prispevek-spusteni-vychoziho-emailoveho-klienta-s-prednastavenou-zpravou-pomoci-mapi.html</link>
		<description>Dnes jsem hledal, jak z programu spustit výchozího emailového klienta tak, aby se rovnou zobrazilo okno pro psaní zprávy a tu zprávu jsem již měl částěčně předvyplněnou. Prostě něco, jako když ve webovém prohlížeči kliknete na odkaz mailto. Hledání bylo úspěšné a našel jsem pár tříd napsaných v jazyku C#, které vše zvládnou. </description>
		<comments>http://weblog.clovicek.net/prispevek-spusteni-vychoziho-emailoveho-klienta-s-prednastavenou-zpravou-pomoci-mapi.html#komentare</comments>
	</item>

	<item>
		<title>Rozklad stromu reprezetovaného řetězcem na všechny podstromy (C#)</title>
		<link>http://weblog.clovicek.net/prispevek-rozklad-stromu-reprezetovaneho-retezcem-na-vsechny-podstromy-c.html</link>
		<description>V diplomce jsem řešil takový problém, mám program reprezentovaný stromem, který mám kvůli rychlosti v řetězci. Strom může vypadat například takto:

div((add((div((X1), (X0))), (X1))), (add((add((X0), (X2))), (X1))))

Což kdyby se převedlo na matematický výraz, tak bude vypadat následovně:

 ((X1/X0)*X1)/((X0*X2)*X1), kde X0, X1, X2 jsou proměnné
No a z toho stromu jsem potřeboval získat všechny podstromy, včetně těch, které mají pouze kořen. No a povedlo se tímto kódem:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections;

namespace Pokusy
{
    class Program
    {
        static void Main(string[] args)
        {
            List list = new List();
            string s = "div((add((div((X1), (X0))), (X1))), (add((add((X0), (X2))), (X1))))";
            foreach (Match m in Regex.Matches(s, @"(\w+)"))
            {
                if (Regex.IsMatch(m.ToString(), @"^X[\d+]$"))
                {
                    Console.WriteLine(m.ToString());
                }
                else
                {
                    Console.Write(m.ToString());

                    GetLists(s.Substring(m.Index));
                }
            }

            Console.ReadLine();
        }

        private static string GetLists(string s)
        {
            if (s.Contains("("))
            {
                char[] array = s.ToCharArray();
                int startIndex = 0;
                int endIndex = 0;
                int braces = 0;
                for (int i = 0; i < array.Length; i++)
                {
                    if (array[i].ToString() == "(" && startIndex == 0)
                    {
                        startIndex = i;
                    }
                    else if (array[i].ToString() == "(" && startIndex > 0)
                    {
                        braces++;
                    }
                    else if (array[i].ToString() == ")" && startIndex > 0)
                    {
                        if (braces == 0)
                        {
                            endIndex = i + 1;
                            i = array.Length;
                        }
                        braces--;
                    }
                }
                string left = "";
                left = s.Substring(startIndex, endIndex - startIndex);

                Console.WriteLine(left);
                return left;
            }
            return "";
        }
    }
}


. </description>
		<comments>http://weblog.clovicek.net/prispevek-rozklad-stromu-reprezetovaneho-retezcem-na-vsechny-podstromy-c.html#komentare</comments>
	</item>

	<item>
		<title>ASP.NET MVC</title>
		<link>http://weblog.clovicek.net/prispevek-aspnet-mvc.html</link>
		<description>Naposledy jsem tu začal psát o ASP.NET MVC a zamýšlel jsem to jako seriál, ale změnil jsem názor. Když jsem o tom psal do školy, tak jsem sepsal dokument, který nyní dávám k dispozici.
ASP.NET MVC
. </description>
		<comments>http://weblog.clovicek.net/prispevek-aspnet-mvc.html#komentare</comments>
	</item>

	<item>
		<title>ASP.NET MVC 1.díl</title>
		<link>http://weblog.clovicek.net/prispevek-aspnet-mvc-1dil.html</link>
		<description>Tak jsem zase po dlouhé době začal zkoumat něco nového v dotnetu. A ejhle ono se mi to zalíbilo :-) Jde o ASP.NET MVC, což je vlastně alternativa k WebForms, s tím že má řadu výhod, ale i nějakou tu nevýhodu.
Hlavními výhodami je striktnější oddělení logiky od prezentace, výsledný výstup je přesně takový jaký chcete a není ničím ovlivněn, lépe se testuje a dělá nám hezké url adresy v adresním řádku.
Nevýhodou oproti webforms je, že si musíme více věcí dělat sami, tedy je to méně pohodlné, ale za to můžeme dostat lepí výsledek.
Základem ASP.NET MVC je návrhový vzor model view controller, který už je známý zhruba tři desítky let, ale v poslední době se znovu ocitá na výsluní díky Ruby on Rails. No a Microsoft nemůže být nikdy pozadu, tak se pustil do ASP.NET MVC. </description>
		<comments>http://weblog.clovicek.net/prispevek-aspnet-mvc-1dil.html#komentare</comments>
	</item>

	<item>
		<title>Problém s bindováním dat v aspx stránce</title>
		<link>http://weblog.clovicek.net/prispevek-problem-s-bindovanim-dat-v-aspx-strance.html</link>
		<description>Opět jsem řešil drobný problém, který ale umí potrápit. Potřeboval jsem do repeateru vložit HyperLink, kde se dynamicky generovala vlastnost NavigateUrl. Nejprve jsem zkoušel toto:

    
        
            
            Odstranit z Blacklistu
        
    

Což se projevilo tak, že se vše vyhodnotilo jako text a teď co s tím? No řešení je opravdu jednoduché stačí malá změna :-)


    
        
            
            Odstranit z Blacklistu
        
    
. </description>
		<comments>http://weblog.clovicek.net/prispevek-problem-s-bindovanim-dat-v-aspx-strance.html#komentare</comments>
	</item>

	<item>
		<title>Převedení řetězce na datum v C#</title>
		<link>http://weblog.clovicek.net/prispevek-prevedeni-retezce-na-datum-v-c.html</link>
		<description>Opět tu mám jednu drobnost, která mě dokázala chvíly potrápit. Šlo o převedení řetězce ve tvaru dd-MM-yyyy na DateTime. Řešení je následující:

DateTimeFormatInfo formatInfo = new DateTimeFormatInfo();
formatInfo.ShortDatePattern = "dd-MM-yyyy";
formatInfo.DateSeparator = ".";

DateTime date = Convert.ToDateTime("15.04.2008", formatInfo);

DateTimeFormatInfo je k nalezení v Namespace System.Globalization, tak na to nezapomeňte :-). </description>
		<comments>http://weblog.clovicek.net/prispevek-prevedeni-retezce-na-datum-v-c.html#komentare</comments>
	</item>

	<item>
		<title>Simple Captcha v ASP.NET</title>
		<link>http://weblog.clovicek.net/prispevek-simple-captcha-v-aspnet.html</link>
		<description>Pro školní projekt jsem dnes dělal nějakou jednoduchou verzi Antispamové kontroly Captcha. Udělal jsem to tak, že jsem si vygeneroval kód a alespoň trošku přeházeně a s různými fonty jej vložil do obrázku, kde ještě matu s barevnými obdelníkčky. Kód jsem uložil do Sessions, abych se k tomu následně dostal a mohl vše zkontrolovat.
Zdrojový kód: Captcha.aspx.cs

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

namespace GUI
{
    public partial class Captcha : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.ContentType = "image/gif";
            int sirka = 180;
            int vyska = 80;
            string code = GenerateCode();
            Session["code"] = code;
            string[] fonts = new string[4];
            fonts[0] = "Verdana";
            fonts[1] = "Arial";
            fonts[2] = "Arial Black";
            fonts[3] = "Arial Black";

            Random rand = new Random();
            Bitmap image = new Bitmap(sirka, vyska);
            Graphics g = Graphics.FromImage(image);
            Pen pero = new Pen(Color.BurlyWood, 1);

            g.SmoothingMode = SmoothingMode.AntiAlias;
            g.FillRectangle(Brushes.Black, 0, 0, sirka, vyska);
            for (int i = 0; i < 30; i++)
            {
                g.FillRectangle(Brushes.DarkRed, rand.Next(0, sirka), rand.Next(0, vyska), rand.Next(7, 15), rand.Next(7, 15));
                g.FillRectangle(Brushes.DarkGreen, rand.Next(0, sirka), rand.Next(0, vyska), rand.Next(7, 15), rand.Next(7, 15));
                g.FillRectangle(Brushes.Red, rand.Next(0, sirka), rand.Next(0, vyska), rand.Next(7, 15), rand.Next(7, 15));
                g.FillRectangle(Brushes.Green, rand.Next(0, sirka), rand.Next(0, vyska), rand.Next(7, 15), rand.Next(7, 15));
            }

            g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
            for (int i = 0; i < 6; i++)
            {
                g.DrawString(code.Substring(i, 1), new Font(fonts[rand.Next(0, 3)], rand.Next(18, 26)), Brushes.White, new Point(i*30, rand.Next(5, 30)));
            }
            image.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
            g.Dispose();
            image.Dispose();
        }

        private string GenerateCode() {
            string znaky = "abcdefghijklmnopqrstuvwxyz0123456789";
            string code = string.Empty;

            Random rand = new Random();
            for (int i = 0; i < 6; i++)
            {
                code += znaky.Substring(rand.Next(0, znaky.Length - 1), 1);
            }
            return code;
        }
    }
}

A ověření je již jednoduché stačí dát:

if (kontrolaTextBox.Text == Session["code"].ToString()){}           
. </description>
		<comments>http://weblog.clovicek.net/prispevek-simple-captcha-v-aspnet.html#komentare</comments>
	</item>

	<item>
		<title>Jak měnit Master Page z kódu Web Content Formu</title>
		<link>http://weblog.clovicek.net/prispevek-jak-menit-master-page-z-kodu-web-content-formu.html</link>
		<description>Chvilku jsem si s tímto problémem lámal hlavu, ale docvaklo mi to a tak se můžu podělit. Je to jednoduché. Pro příklad si uděláme Master Page webGui.master, kde bude menu, ve kterém budeme chtít dát vědět, na které stránce jsme.
Otevřeme si soubor webGui.master.cs a přidáme do něj panely s odkazem a ke každému panelu property:

public Panel prvniLink {
    get {
        return PrvniPanel;
    }
    set {
        PrvniPanel = value;
    }
}

V kódu stránky využívající danou Master Page pak těmto property můžeme nastavit CssClass:

((webGui)this.Master).prvniLink.CssClass = "select";

No a už jen stačí pomocí css označit, že je tento odkaz vybraný &hellip;. </description>
		<comments>http://weblog.clovicek.net/prispevek-jak-menit-master-page-z-kodu-web-content-formu.html#komentare</comments>
	</item>
</channel>
</rss>	

