our notes for our youngers

December 30, 2009

developing a site ( part 3 )

Filed under: developing website — Tags: , , — sevenlamp @ 11:59 AM

HISTORY

Dec 30, 2009
- chatbox မွာ validation အပိုင္းထည့္တယ္
- postback ျပန္ေနတာကို ျပင္တယ္။
Dec 28, 2009
- project ျပီးသေလာက္ကို publish လုပ္တယ္။
Dec 27, 2009
- chatbox အပိုင္းေရးတယ္။
Dec 26, 2009
- template လက္စသတ္တယ္။
- database ေဆာက္တယ္။
Dec 23, 2009
- template ျပင္ျပီးသေလာက္ကို publish လုပ္တယ္။
Dec 14, 2009
- template sample ရွာျပီး ေဒါင္းတယ္။
- ပံုေတြျဖတ္တယ္။ templateျပင္တယ္။

****************************************

ကြၽန္ေတာ္ မေန႔ညတုန္းက ChatBox ေလးမွာ က်န္ေနတဲ႔ အပိုင္းေလးေတြ ဆက္ျပင္ပါတယ္။ Send button ေလး click ရင္ server side ကို postback ျပန္ေနေတာ့ နည္းနည္းၾကာေနတယ္။ အဲ့ဒါေၾကာင့္ button ေလးကို update panel ထဲကို ထည့္ေပးလိုက္ပါတယ္။ ေနာက္ျပီး textbox ေတြထဲမွာ data မထည့္ပဲ send ႏွိပ္ရင္ alert ျပဖို႔အတြက္လည္း CustomValidator Control ေလးထည္ျပီးစစ္လိုက္ပါတယ္။ CustomValidator အတြက္ client script ေလးက ဒီလိုပါ။

function CheckMessage(source, arguments)
{
      if(document.getElementById("ctl00_ContentPlaceHolder1_SenderNameTextBox").value=="")
      {
           alert("Enter Your Name First!");
           document.getElementById("ctl00_ContentPlaceHolder1_SenderNameTextBox").focus();
           arguments.IsValid = false;
      }
      else if(document.getElementById("ctl00_ContentPlaceHolder1_SenderLocationTextBox").value=="")
      {
           alert("Enter Your Location First!");
           document.getElementById("ctl00_ContentPlaceHolder1_SenderLocationTextBox").focus();
           arguments.IsValid = false;
      }
      else if(document.getElementById("ctl00_ContentPlaceHolder1_ChatLogTextBox").value=="")
      {
           alert("Enter Message First!");
           document.getElementById("ctl00_ContentPlaceHolder1_ChatLogTextBox").focus();
           arguments.IsValid = false;
      }
      else
      {
           arguments.IsValid = true;
      }
}

ဒီေန႔ ၃၀ ဒီဇင္ဘာ အထိ Latest program ကို ဒီကေန ေဒါင္းလို႔ ရပါျပီ။ http://www.sendspace.com/file/kpywr0

December 28, 2009

developing a site ( part 2 )

Filed under: ASP.NET, developing website — Tags: , , , , — sevenlamp @ 10:54 AM

http://www.sevenlamp.co.cc ကို လာၾကပါ ခင္ဗ် :)

ကြၽန္ေတာ္ Template ျပင္တာေတာ့ Home Page အတြက္ အၾကမ္းထည္ျပီးသြားပါျပီ။ Home Page မွာ ေလာေလာဆယ္ Chat Box ေလး ထည့္ထားပါတယ္။ www.cbox.ws လို site ေတြကေန chatbox ေတြ အလြယ္တကူရနိုင္ေပမယ့္ ကြၽန္ေတာ္ကေတာ့ ကိုယ္တိုင္လုပ္ဖို႔ပဲ ဆံုးျဖတ္လိုက္ပါတယ္။ ဒါနဲ႔ MS-SQLServer2008 ထဲမွာ chatbox အတြက္ Table ေလးသြားေဆာက္လိုက္ပါတယ္။ Table structure ကေတာ့ ဒီလိုပါ….

Column Name Data Type Allow Nulls
ChatLogID int Unchecked
ChatLog nvarchar(MAX) Checked
SenderName nvarchar(50) Checked
SenderLocation nvarchar(50) Checked
SendingTime datetime Checked
MemberID int Checked
Color varchar(50) Checked
Bold bit Checked
Italic bit Checked

ChatLogID column ကို primary key ေပးျပီး auto increment လည္း လုပ္လိုက္ပါတယ္။

DataBase ျပီးသြားေတာ့ Program ကေန ျပန္ေခၚနိုင္ဖို႔အတြက္။ DataSet ေဆာက္ပါတယ္။ ျပီးေတာ့ Home Page ထဲမွာ လိုအပ္တဲ႔ design ေတြ ျပင္ပါတယ္။ ကြၽန္ေတာ္ ဒီ program ေလး မွာ ASP.NET MasterPage ကိုလည္း သံုးထားပါတယ္။ Program Code အေသးစိတ္ကို ကြၽန္ေတာ္ ရွင္း ျပေပးခ်င္ေပမယ့္။ ကြၽန္ေတာ္မွာ အခ်ိန္မလံုေလာက္တဲ႔ ျပႆနာျဖစ္ေနလို႔။ Source Code ကိုပဲ တင္ေပးလိုက္ပါတယ္။ ညီတို႔ Run ၾကည့္ျပီး သိခ်င္တဲ႔ အပိုင္းေလးေတြကို ျပန္ေမးေစခ်င္ပါတယ္။ညီတို႔ ဆီမွာ database ျပန္ေဆာက္ရပါမယ္။ ကြၽန္ေတာ္ေပၚမွာ ေျပာတဲ႔ table structure အတိုင္းေပါ့။ ျပီးရင္ program ရဲ႕ connection string မွာ ျပင္ရပါဦးမယ္။ web.config file ထဲမွာ connectionstring ဆိုတဲ႔ ေနရာေလးမွာ ျပင္ရမွာပါ။

source code link -> http://www.sendspace.com/file/7rhq0x

ေနာက္တစ္ခုက ကြၽန္ေတာ္ အခု လုပ္ျပီးသမွ်ကို http://www.sevenlamp.co.cc မွာ တင္ထားပါတယ္။ အဲ့ဒီကိုလည္း ၀င္ျပီးအားေပးၾကပါဦး။ ျပီးရင္ လိုအပ္တာေလးေတြ လည္း ေျပာၾကေစခ်င္ပါတယ္။ ေနာက္ျပီး ညီတို႔ အေနနဲ႔ ထပ္ျပီး ထည့္ခ်င္တာေလးေတြ ရွိရင္လည္း ေျပာၾကပါ။ အတူတူၾကိဳးစားၾကတာေပါ့။ ေၾသာ္ ဒါနဲ႔ sevenlamp.co.cc ကိုေရာက္ရင္ chat box ေလးမွာလည္း တခုခု ေျပာထားခဲ႔ပါဦးေနာ္။

December 23, 2009

developing a site ( part 1 )

Filed under: ASP.NET, DataBase, developing website — Tags: , , , , — sevenlamp @ 4:47 PM

သူငယ္ခ်င္းတို႔ေရ… မေတြ႔တာလဲၾကာျပီ :)   မဂၤလာရွိေသာ… သာယာေအးခ်မ္းေသာ… ေပ်ာ္ရႊင္စရာ Christmas ခ်ိန္ခါေလး ျဖစ္ၾကပါေစေနာ္။

ဒီ တစ္ေလာ ကြၽန္ေတာ္လည္း အလုပ္ပိေနတာနဲ႔ ဘေလာ့ေလးကို ပစ္ထားသလိုေတာင္ ျဖစ္သြားတယ္။ လာလည္ၾကတဲ႔ သူငယ္ခ်င္းေတြကိုလည္း ေတာင္းပန္ပါတယ္။ ကြၽန္ေတာ္ ပိုဒ့္ေတြ ျပန္တင္နိုင္ေအာင္ ၾကိဳးစားပါ့မယ္။ ရန္ကုန္မွာက သိတဲ႔ အတိုင္းပဲ ဒီ အခ်ိန္ေရာက္ရင္ မီးက ေဖာက္လာျပီေလ။ အဲဒီေတာ့ အိမ္မွာလည္း မီးလာတဲ႔ အခ်ိန္ေလးမွာပဲ computer သံုးျဖစ္တာဆိုေတာ့၊ နည္းနည္းေတာ့ သည္းခံျပီး ေစာင့္ေပးၾကပါလို႔ အရင္ဆံုး ေတာင္းဆိုပါရေစ။

အခုကြၽန္ေတာ္ စိတ္ထဲမွာ လုပ္ခ်င္စိတ္ျပင္းျပေနတာ တစ္ခုရွိတယ္ဗ်။ အဲ့ဒါ ဘာလဲဆိုေတာ့ ASP.NET နဲ႔ CMS ေလးတစ္ခုေလာက္ ေဆာက္ခ်င္တာပါ။ CMS ဆိုရင္ အရမ္းက်ယ္ေနမယ္ထင္တယ္။ ကြၽန္ေတာ္လည္း တစ္ခါမွ မလုပ္ဖူးဘူးဗ်။ :) ဒါေၾကာင့္ အခု စလုပ္မလားလို႔။ နည္းနည္းခ်င္းစီေပါ့ဗ်ာ။ အရင္ဆံုး ကိုယ္ပိုင္ ဘေလာ့ေလး တစ္ခုစျပီးေတာ့လုပ္ၾကည့္ပါမယ္။ ဘယ္ေတာ့ ျပီးမလဲေတာ့ မသိဘူးေပါ့။ ညီတို႔လည္း ကြၽန္ေတာ္နဲ႔ အတူတူ လုိက္ျပီး လုပ္ၾကည့္ေစခ်င္တယ္။ အနည္းဆံုးေတာ့ အေတြ႔အၾကံဳေလးေတြ ရမွာပါ။

ဒီ project ေလး လုပ္ဖို႔ ဘာေတြ လုပ္မလဲေပါ့။ အရင္ဆံုး လိုတာက စလုပ္ဖို႔လိုတာပါ။ :) ကဲ.. အခု အရင္ဆံုး ကြၽန္ေတာ္က ဘေလာ့ေလးရဲ႕ design အတြက္ google ကေန free template ေတြ လိုက္ရွာလိုက္တယ္ဗ်ာ။ အခုကြၽန္ေတာ္သေဘာက်တဲ႔ template ေလးက ဒီမွာပါ။

http://media.freewebtemplates.com/templates/zip/5650.zip

ညီတို႔ စိတ္ၾကိဳက္ template ေလးေတြ ရွာလိုက္ပါ။ http://www.freewebsitetemplates.com/ မွာလည္း template လန္းလန္းေလးေတြ ရွိတယ္။ template တစ္ခု download လုပ္လိုက္ျပီဆိုရင္ သူ႔မွာ မ်ားေသာအားျဖင့္ html file တစ္ဖိုင္ရယ္၊ CSS file တစ္ဖိုင္ရယ္၊ Image folder တစ္ခုရယ္ ပါလာေလ့ရွိပါတယ္။ အဲ့ဒါေတြကိုအေျခခံျပီး ကြၽန္ေတာ္လိုခ်င္တဲ႔ design ေလး ရလာေအာင္ ျပဳျပင္ရမွာပါ။ အခုစျပီးျပင္ပါ့မယ္။ ကြၽန္ေတာ္ VS2008 မွာ new website တစ္ခု ေဆာက္လိုက္ပါတယ္။ Template မွာ ပါလာတဲ႔ Image folder နဲ႔ Css folder ကို project ထဲ copy – paste လုပ္ျပီး ထည့္လိုက္ပါတယ္။ ျပီးရင္ index.htm file ေလးကိုပါ project ထဲကိုထည့္လိုက္ပါတယ္။ ျပီးေတာ့ အဲ့ဒီထဲမွာ ပါတဲ႔ html code ေတြကို ၾကည့္ျပီး အရင္ဆံုး Home page ကို စျပီး design ဆြဲပါတယ္။ အခုထိ ကြၽန္ေတာ္ လုပ္ျပီးသမွ်ကို  http://www.sevenlamp.co.cc/home.aspx မွာ ၀င္ေရာက္ၾကည့္ နိုင္ပါတယ္။ အားလံုး ျပီးသြားရင္ေတာ့ ဒီ wordpress.com ကေန အိမ္ေျပာင္းေတာ့မယ္။ ( ေမွ်ာ္မွန္းထားတာပါပဲ :) )

ကြၽန္ေတာ္လည္း ဆက္ျပီး design ျပင္လိုက္ဦးမယ္ဗ်ာ။ ေနာက္မွဆက္ၾကတာေပါ့။

December 9, 2009

Shooting Game ေလးေရးရေအာင္ – 2

pic1

pic1

download source window apppication here

http://www.mediafire.com/download.php?kyndziv3ijv

ကြၽန္ေတာ္ Exercise Two အေနနဲ႔ ေပးခဲ႔တဲ႔ ေသနတ္ပစ္တဲ႔ game ေလးပါ။ ကြၽန္ေတာ္ video tutorial အေနနဲ႔ လုပ္ေပးခ်င္ေပမယ့္ မိုးကုန္သြားျပီဆိုေတာ့ မီးက အခြင့္အေရး မေပးေတာ့ဘူးဗ်ာ။ ဒါေၾကာင့္ ကုဒ္ေလးကိုပဲ ျမန္ျမန္ကူးလာျပီး တင္ေပးလိုက္ပါတယ္။ ညီတို႔ Program ကို Run ျပီး Code ကို Trace လိုက္ၾကည့္လိုက္ရင္ နားလည္မွာပါ။ မရွင္းတဲ႔ အပိုင္းေလးေတြကို ေကာမန္႔မွာ ျပန္ေမးပါ။ ကြၽန္ေတာ္ ျပန္ရွင္းျပပါ့မယ္။ ေနာက္ထပ္ exercise three အေနနဲ႔ေရာ ဘာေရးရင္ ေကာင္းမလဲ… အၾကံရွိရင္လည္း ေကာ္မန္႔ေပးခဲ႔ၾကပါဦး။

public partial class Form1 : Form
{
    int startCounter = 6;
    int bulletCount = 7;
    int totalPoint = 0;
    int currentPoint = 0;
    int tmr = 0;
    bool PlayingTime = false;
    bool bulletMovingTime = false;
    Random rnd = new Random();

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyValue == 113 && !PlayingTime)
        {
            StartGame();
        }
        else if (PlayingTime)
        {
            if (e.KeyValue == 38)
            {
                if (picGun.Top > groupBox1.Height + groupBox1.Top)
                {
                    picGun.Top -= 5;
                    if (!bulletMovingTime)
                    {
                        picMovingBullet.Top -= 5;
                    }
                }
            }
            else if (e.KeyValue == 40)
            {
                if (picGun.Top + picGun.Height < panel1.Top)                 {                     picGun.Top += 5;                     if (!bulletMovingTime)                     {                         picMovingBullet.Top += 5;                     }                 }             }             else if (e.KeyValue == 13 || e.KeyValue == 32)             {                 if (!bulletMovingTime)                 {                     if (bulletCount >= 1)
                    {
                        bulletCount--;
                        lblTotalBullet.Text = bulletCount.ToString();
                        totalPoint += Convert.ToInt32(lblTarget.Text);
                        bulletMovingTime = true;
                        tmrMovingBullet.Enabled = true;
                        picMovingBullet.Left = picGun.Left + picGun.Width;
                        picMovingBullet.Top = picGun.Top + 3;
                        switch (bulletCount)
                        {
                            case 1: picBullet1.Visible = true;
                                picBullet2.Visible = false;
                                picBullet3.Visible = false;
                                picBullet4.Visible = false;
                                picBullet5.Visible = false;
                                picBullet6.Visible = false;
                                picBullet7.Visible = false;
                                break;
                            case 2: picBullet1.Visible = true;
                                picBullet2.Visible = true;
                                picBullet3.Visible = false;
                                picBullet4.Visible = false;
                                picBullet5.Visible = false;
                                picBullet6.Visible = false;
                                picBullet7.Visible = false;
                                break;
                            case 3: picBullet1.Visible = true;
                                picBullet2.Visible = true;
                                picBullet3.Visible = true;
                                picBullet4.Visible = false;
                                picBullet5.Visible = false;
                                picBullet6.Visible = false;
                                picBullet7.Visible = false;
                                break;
                            case 4: picBullet1.Visible = true;
                                picBullet2.Visible = true;
                                picBullet3.Visible = true;
                                picBullet4.Visible = true;
                                picBullet5.Visible = false;
                                picBullet6.Visible = false;
                                picBullet7.Visible = false;
                                break;
                            case 5: picBullet1.Visible = true;
                                picBullet2.Visible = true;
                                picBullet3.Visible = true;
                                picBullet4.Visible = true;
                                picBullet5.Visible = true;
                                picBullet6.Visible = false;
                                picBullet7.Visible = false;
                                break;
                            case 6: picBullet1.Visible = true;
                                picBullet2.Visible = true;
                                picBullet3.Visible = true;
                                picBullet4.Visible = true;
                                picBullet5.Visible = true;
                                picBullet6.Visible = true;
                                picBullet7.Visible = false;
                                break;
                            case 7: picBullet1.Visible = true;
                                picBullet2.Visible = true;
                                picBullet3.Visible = true;
                                picBullet4.Visible = true;
                                picBullet5.Visible = true;
                                picBullet6.Visible = true;
                                picBullet7.Visible = true;
                                break;
                            default: picBullet1.Visible = false;
                                picBullet2.Visible = false;
                                picBullet3.Visible = false;
                                picBullet4.Visible = false;
                                picBullet5.Visible = false;
                                picBullet6.Visible = false;
                                picBullet7.Visible = false;
                                break;
                        }
                    }
                    else
                    {
                        tmrMovingTarget.Enabled = false;
                    }
                }
            }
        }
    }

    private void tmrTimer_Tick(object sender, EventArgs e)
    {
        tmr++;
        lblTimer.Text = tmr.ToString("D4");
        if (currentPoint != 0 && totalPoint != 0)
        {
            decimal accuracy = ((Convert.ToDecimal(currentPoint) / Convert.ToDecimal(totalPoint)) * 100);
            lblAccuracy.Text = Math.Round(accuracy).ToString("N0") + "%";
            lblPoint.Text = currentPoint + "/" + totalPoint;
        }
    }

    private void tmrMovingTarget_Tick(object sender, EventArgs e)
    {
        lblTarget.Top = rnd.Next(groupBox1.Height + groupBox1.Top, panel1.Top - lblTarget.Height);
        lblTarget.Text = Convert.ToString(rnd.Next(1, 6) * 2 - 1);
    }

    private void tmrStartCounter_Tick(object sender, EventArgs e)
    {
        if (startCounter == 6)
        {
            lblReady.Text = "Ready to start";
            startCounter--;
        }
        else if (startCounter >= 1)
        {
            lblReady.Text = (startCounter--).ToString();
        }
        else if (startCounter == 0)
        {
            lblReady.Text = "GO!";
            startCounter--;
        }
        else
        {
            PlayingTime = true;
            tmrMovingTarget.Enabled = true;
            tmrStartCounter.Enabled = false;
            lblReady.Visible = false;
            tmrTimer.Enabled = true;
        }
    }

    private void tmrMovingBullet_Tick(object sender, EventArgs e)
    {
        if (picMovingBullet.Left + picMovingBullet.Width >= this.ClientSize.Width)
        {
            tmrMovingBullet.Enabled = false;
            bulletMovingTime = false;
            picMovingBullet.Left = picGun.Left + picGun.Width;
            picMovingBullet.Top = picGun.Top + 3;
            ShowMessage();
        }
        else if ((picMovingBullet.Left + picMovingBullet.Height >= lblTarget.Left) &&
            (picMovingBullet.Top + picMovingBullet.Height > lblTarget.Top && picMovingBullet.Top < lblTarget.Top + lblTarget.Height))
        {
            currentPoint += Convert.ToInt32(lblTarget.Text);
            lblPoint.Text = currentPoint + "/" + totalPoint;
            tmrMovingBullet.Enabled = false;
            bulletMovingTime = false;
            picMovingBullet.Left = picGun.Left + picGun.Width;
            picMovingBullet.Top = picGun.Top + 3;
            ShowMessage();
        }
        else
            picMovingBullet.Left += 3;
    }

    private void ShowMessage()
    {
        if (bulletCount == 0)
        {
            tmrMovingTarget.Enabled = false;
            tmrTimer.Enabled = false;
            lblPoint.Text = currentPoint + "/" + totalPoint;
            PlayingTime = false;
            decimal accuracy = ((Convert.ToDecimal(currentPoint) / Convert.ToDecimal(totalPoint)) * 100);
            lblAccuracy.Text = Math.Round(accuracy).ToString("N0") + "%";
            MessageBox.Show("Your Score : " + currentPoint + "\nAccuracy : " + Math.Round(accuracy).ToString("N0") + "%\nTotal Time : " + tmr/100 + "." + tmr%100 + " - seconds");
        }
    }

    private void StartGame()
    {
        lblAccuracy.Text = "0%";
        lblPoint.Text = "0/0";
        tmrStartCounter.Enabled = true;
        lblReady.Visible = true;
        startCounter = 6;
        bulletCount = 7;
        totalPoint = 0;
        currentPoint = 0;
        tmr = 0;
        lblTimer.Text = "0000";
        lblTotalBullet.Text = bulletCount.ToString();
        PlayingTime = true;
        picBullet1.Visible = true;
        picBullet2.Visible = true;
        picBullet3.Visible = true;
        picBullet4.Visible = true;
        picBullet5.Visible = true;
        picBullet6.Visible = true;
        picBullet7.Visible = true;
    }
}

December 8, 2009

Basic Window Application (Part 3)

Filed under: Window Form Application — Tags: , , , , — sevenlamp @ 10:23 AM

ေဘာလံုးေလး လႈိမ့္ရေအာင္

pic1

pic1

ဒီတစ္ေခါက္ ကြၽန္ေတာ္တို႔ ေဘာလံုးေလးကို form ေပၚမွာ လႈိမ့္ၾကရေအာင္။ အရင္ဆံုး picturebox တစ္ခုယူလိုက္ပါ။ ျပီးရင္ image property ကေန ေဘာလံုးပံုေလးကို import လုပ္ထားလိုက္ပါဦး။ picturebox ရဲ႕ property ေတြမွာ ေနာက္ထပ္ သိဖို႔ လိုတာ တစ္ခုက sizemode property ပါ။ sizemode property ကို ေလွ်ာက္ျပီး ေျပာင္းျပီး စမ္းၾကည့္လိုက္ရင္ သိသြားမွာပါ။ ကဲ အခု ေဘာလံုးပံုေလး ရသြားပါျပီ၊ ေရႊ႕ဖို႔ပဲ က်န္ေတာ့တယ္။ ကြၽန္ေတာ္က ပထမဆံုး အေနနဲ႔ေတာ့ keyboard က up – down, left – right keys ေလးေတြကို အသံုးျပဳျပီး ေဘာလံုးကို ေရႊ႕ခ်င္ပါတယ္။ ဒီေတာ့ keyboard က key ႏွိပ္ပါတယ္ဆိုတဲ႔ event မွာ ႏွိပ္လိုက္တဲ႔ key ကို ျပန္ျပီး စစ္ရပါမယ္။ picturebox မွာ key နဲ႔ ပါတ္သက္တဲ႔ event မရွိပါဘူး၊ ဒီေတာ့ ကြၽန္ေတာ္တို႔ form ရဲ႕ key events ေတြကိုပဲ သံုးရပါမယ္။ KeyDown, KeyUp နဲ႔ KeyPress event 3 ခုထဲကေနျပီး ကြၽန္ေတာ္တို႔ KeyDown or KeyUp event ကိုသံုးရပါမယ္။ ဘာလို႔လဲ ဆိုရင္ KeyPress Event မွာ Arrow keys ေတြကို ဖမ္းလို႔ အဆင္မေျပတာေၾကာင့္ပါ။

private void Form2_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Up)
    {
        if(pictureBox1.Top > 0)
            pictureBox1.Top -= 1;
    }
    else if (e.KeyCode == Keys.Down)
    {
        if(pictureBox1.Top+pictureBox1.Height < this.ClientSize.Height)
            pictureBox1.Top += 1;
    }
    else if (e.KeyCode == Keys.Left)
    {
        if(pictureBox1.Left > 0)
            pictureBox1.Left -= 1;
    }
    else if (e.KeyCode == Keys.Right)
    {
        if(pictureBox1.Left+pictureBox1.Width < this.ClientSize.Width)
            pictureBox1.Left += 1;
    }
}

keydown event မွာ user ရိုက္လိုက္တဲ႔ keycode ေလးကို ျပန္စစ္ရပါတယ္။ ျပီးေတာ့မွ up arrow ဆိုရင္ picturebox ေလးကို အေပၚကို ေရြ႕ဖို႔အတြက္ picturebox ရဲ႕ top property ကို ေလွ်ာ့ေပးလိုက္တာပါ။ ဒီအတိုင္းပဲ down arrow ဆိုရင္ေတာ့ top property ကို တိုးေပးရမွာပါ။ ဒီလို တိုးေပး ေလွ်ာ့ေပးလုပ္တဲ႔ ေနရာမွာ form ရဲ႕ အျပင္ဘက္ကို picturebox မေရာက္သြားရေလေအာင္ထိန္းထားေပးဖို႔လဲ လိုပါေသးတယ္။ ဒါ့ေၾကာင့္ ကြၽန္ေတာ္တို႔ up arrow ႏွိပ္တဲ႔ ေနရာမွာ picturebox ရဲ႕ top ကို form ရဲ႕ အေပၚဆံုးေနရာထက္ၾကီးလား စစ္ရပါတယ္။ အေပၚဆံုးေနရာက 0 ပါ။ ဒီလိုပါပဲ down arrow ႏွိပ္တဲ႔ ေနရာမွာလည္း pictureboxရဲ႕ ေအာက္ေျခက form ရဲ႕ ေအာက္ေျခထက္ ငယ္မွ ဆက္ျပီး ေရြ႕ခြင့္ေပးတာပါ။ ဒါဆိုရင္ left arrow နဲ႔ right arrow မွာ ေရးထားတာကိုလည္း နားလည္မွာပါ။ ေဘာလံုးေလးကို ပိုျပီး ျမန္ျမန္ေရြ႕ေစခ်င္ရင္ေတာ့ ၁ တိုး၊ ၁ေလွ်ာ့တဲ႔ ေနရာမွာ ၂ တို႔ ၃ တို႔ စသည္ျဖင့္ တိုးေပးလို႔ ရပါတယ္။

Automatic Moving the Ball

အခုကြၽန္ေတာ္က ဒုတိယ အဆင့္ေနနဲ႔ ေဘာလံုးေလး အခုလို ေရႊ႕တဲ႔ ကိစၥကို user key ႏွိပ္မွ မဟုတ္ပဲ၊ ဒီအတိုင္းထားရင္လည္း သူဟာသူ ေရြ႕ေနေစခ်င္ပါတယ္။ ဒါဆိုရင္ ဘယ္လို လုပ္ရမွာပါလဲ။ user ရဲ႕ action အတြက္ reaction မဟုတ္ပဲ program ကေန သူဟာသူ အလိုအေလွ်ာက္ အလုပ္လုပ္ေနေစခ်င္တဲ႔ ကိစၥတိုင္းအတြက္ ကြၽန္ေတာ္တို႔ Timer Control ကို သံုးရပါမယ္။ ကဲ… timer control ေလး form ထဲထည့္လိုက္ပါဦး။ Timer Control အေၾကာင္းကို ကြၽန္ေတာ္ Screen Server Program ေလးမွာ ေျပာျပီးပါျပီ။ timer control ရဲ႕ interval property မွာ ၁၀ ေလာက္ထား၊ enabled ကို true ေပးၿပီး၊ Tick event ထဲမွာ ေဘာလံုး ေရြ႕ဖို႔ လိုအပ္တဲ႔ code ေတြေရးေပးလိုက္ပါမယ္။

bool ToUp = true;
bool ToLeft = true;
private void timer1_Tick(object sender, EventArgs e)
{
    if (ToUp)
        pictureBox1.Top--;
    else
        pictureBox1.Top++;

    if (ToLeft)
        pictureBox1.Left--;
    else
        pictureBox1.Left++;

    if (pictureBox1.Top <= 0)         
        ToUp = false;     
    if (pictureBox1.Top + pictureBox1.Height >= this.ClientSize.Height)
        ToUp = true;

    if (pictureBox1.Left <= 0) 
        ToLeft = false;
    if (pictureBox1.Left + pictureBox1.Width >= this.ClientSize.Width)
        ToLeft = true;
}

ဒီေနရာမွာ နည္းနည္း ရွင္းဖို႔ လိုတာက အခုကြၽန္ေတာ္က ေဘာလံုးေလး ေရႊ႕တဲ႔ အလုပ္ေတြအားလံုး(အေပၚ၊ေအာက္… ) ကို event တစ္ခုထဲအတြင္းမွာ ေရးမွာ ျဖစ္တဲ႔ အတြက္၊ လက္ရွိ အေျခအေနက အေပၚဖက္ကို သြားေနတဲ႔ အခ်ိန္လား၊ ေအာက္ဆင္းေနတဲ႔ အခ်ိန္လား ဆိုတာကို မွတ္ထားဖို႔လိုပါတယ္။ ဒီလို မွတ္ထားဖို႔အတြက္ ToUp ဆိုတဲ႔ bool variable တစ္လံုးကို member variable အျဖစ္ေၾကာျငာထားလိုက္ပါတယ္။ အဲ့ဒီ ToUp ထဲမွာ true ဆိုရင္ အေပၚကို ေရႊ႕ဖို႔အတြက္ top ကို ၁ ေလွ်ာ့တယ္။ မဟုတ္ဘူး false ဆိုရင္ေတာ့ top ကို ၁ တိုးလိုက္ပါတယ္။ ျပီးေတာ့ ေဘာလံုးေလးက form ရဲ႕ အေပၚဆံုးကို ေရာက္ျပီဆိုရင္ ေအာက္ျပန္ဆင္းရမယ္ ဒါေၾကာင့္ အဲ့ဒီ ToUp ထဲကို false ထည့္ပါတယ္။ ဒီလိုပါပဲ ေအာက္ဆံုးေရာက္ျပီဆိုရင္လည္း အေပၚျပန္တက္ဖို႔အတြက္ ToUp ထဲကို true ျပန္ထည့္ေပးလိုက္ပါတယ္။ ဒါဆို ကြၽန္ေတာ့္ ေဘာလံုးေလးက အေပၚတက္လိုက္၊ ေအာက္ဆင္းလိုက္နဲ႔ အျမဲတမ္း ေရႊ႕ေနပါလိမ့္မယ္။ ဘယ္၊ညာ အတြက္လည္း ဒီသေဘာအတိုင္းပါပဲ။

ဒီ program ေလးမွာ ကြၽန္ေတာ္ အဓိက သိေစခ်င္တာက Key Event ေတြအေၾကာင္းနဲ႔ Timer Control အေၾကာင္းေလးပါ။ ေနာက္ျပီး Event တစ္ခုအတြင္းမွာ ဆန္႔က်င္ဖက္ အလုပ္ ၂ ခုကို ေရးရေတာ့မယ္ဆိုရင္ အခုလိုမ်ိဳး variable ေလးနဲ႔ ထိန္းျပီးသံုးရမယ္ဆိုလည္း သိရပါမယ္။ ေနာက္ဆံုးတစ္ခ်က္ကေတာ့ အခုလိုမ်ိဳးကိစၥေတြအတြက္ variable ေၾကာျငာမယ္ဆိုရင္ local variable ကိုသံုးလို႔ မရပါဘူး။ member variable ကိုေၾကာျငာမွသာလွ်င္ variable ထဲက တန္ဖိုးကို သိမ္းေပးထားနိုင္မွာပါ။

December 4, 2009

Basic Window Application (Part 2)

Filed under: Window Form Application — Tags: , , , , — sevenlamp @ 5:29 PM

Event 2 (Mouse Event)

ဒီေန႔ ကြၽန္ေတာ္တို႔ window form application ရဲ႕ event ေတြ အေၾကာင္းပဲ ဆက္ရေအာင္။ အခုကြၽန္ေတာ္က program run လိုက္ျပီး form ေပၚမွာ mouse ေရႊ႕ရင္ အဲ့ဒီ mouse pointer ရဲ႕ location ေလးကို form ရဲ႕ caption မွာ ျပခ်င္တယ္ဆိုပါေတာ့။ ဒါဆိုရင္ ကြၽန္ေတာ္က ဘယ္ event ကိုသံုးရမလဲ ဆိုရင္ Form ရဲ႕ Mouse Move Event ကိုသံုးရပါမယ္။

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
        this.Text = e.Location.ToString();
}

ကြၽန္ေတာ္က form Title bar မွာ မျပခ်င္ဘူး mouse pointer ေလးရဲ႕ ေဘးမွာ ပဲ location ေလးကို ေပၚေနေစခ်င္တယ္ဆိုရင္ေတာ့ Form ေပၚမွာ စာသားေတြ ျပဖို႔အတြက္ Label Control ကိုသံုးျပီး အခုလိုေရးရပါမယ္။

pic1

pic1

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
      label1.Left = e.X + 10;
      label1.Top = e.Y - 10;
      label1.Text = e.Location.ToString();
}

အရင္ဆံုး Form ေပၚမွာ Label တစ္ခုထည့္ရပါမယ္။ Mouse Move event မွာ အဲ့ဒီ Label ေလးရဲ႕ Location ကိုေရႊဖို႔အတြက္ Left နဲ႔ Top ကို mouse pointer လက္ရွိေရာက္ေနတဲ႔ location(x,y) သြားထည့္ေပးလိုက္ပါတယ္။ ဒီေနရာမွာ တစ္ခါတည္း သိလိုက္ဖို႔လိုတာက form ေပၚမွာ control ေတြ ေနရာေရႊ႕ခ်င္ရင္ အဲ့ဒီ control ရဲ႕ left နဲ႔ top ကို ေျပာင္းျခင္းအားျဖင့္ ေရႊ႕နိုင္တယ္ဆိုတာေလးပါ။

December 3, 2009

Sending Email From ASP.NET

Filed under: ASP.NET, Other — Tags: , , , , — sevenlamp @ 4:55 PM

ကြၽန္ေတာ္ဗ်ာ ရံုးက frontend system ထဲမွာ email ပို႔တဲ႔ အပိုင္းေလး မရေတာ့လို႔ ျပန္လုပ္လိုက္ရတာ ေတာ္ေတာ္ေလးကို ပင္ပန္းသြားတယ္။ အခ်ိန္လည္း ၂ရက္ ေလာက္ကုန္သြားတယ္။ ( ရသြားလို႔ ေတာ္ပါေသးရဲ႕ :D ) ညီတို႔လည္း email sending အပိုင္းေလး ေရးဖို႔လိုအပ္လာရင္ ဒီပိုဒ့္ေလးက အသံုး၀င္မွာပါ။

အရင္ဆံုး သိထားရမွာက ျမန္မာနိုင္ငံထဲမွာေတာ့ ဒီ program ကို run လို႔မရဘူးေနာ္ :)

ကြၽန္ေတာ္တို႔ email ပို႔ဖို႔အတြက္ smtp server လိုပါတယ္။ ကြၽန္ေတာ္တို႔ domain hosting ယူထားတဲ႔ ဆီကေန smtp အတြက္ပါ ေတာင္းလို႔ရပါလိမ့္မယ္။ ျပီးရင္ email အေကာင့္တစ္ခုလည္း ရွိဖို႔လိုပါတယ္။ ဥပမာဗ်ာ ကြၽန္ေတာ့္မွာ www.sevenlamp.com ဆိုတဲ႔ domain ၀ယ္ထားျပီဆိုရင္။ smtp server က smtp.sevenlamp.com ေပါ့။ port no လည္း သိရမယ္ဗ်။ မ်ားေသာအားျဖင့္ေတာ့ port no က 25, 464,587 စသည္ျဖင့္ တစ္ခုခုျဖစ္ပါလိမ့္မယ္။ email account ကေတာ့ admin@sevenlamp.com ဆိုျပီး ရွိတယ္လို႔ သေဘာထားလိုက္ဗ်ာ။ (အဲ့ဒါေတြ မသိဘူးဆိုရင္ domain hosting ယူတဲ႔ company ကိုေမးလိုက္ေပါ့ေနာ္) ဒါဆိုရင္ေတာ့ ကြၽန္ေတာ္တို႔ program မွာ email ပို႔တာ ေရးလို႔ ရပါျပီ။

အရင္တုန္းကေတာ့ dotnetopenmail ဆိုတဲ႔ third party component ကို သံုးၾကတယ္ဗ်။ အခု ေနာက္ပိုင္းမွာေတာ့ System.Net.Mail ကိုပဲသံုးပါတယ္။ System.Web.Mail ဆိုတာလည္း ရွိေသးတယ္ဗ်။ အဲ့ဒီေကာင္က .net frameword 1.1 မွာ သံုးခဲ႔တာ။ System.Net.Mail ကေတာ့ v2.0 မွာမွ ပါတာ။ အခုကြၽန္ေတာ္တို႔ သံုးမွာက System.Net.Mail ပါ။ သူ႔ကိုသံုးဖို႔အတြက္ ကြၽန္ေတာ္တို႔program ရဲ႕ web.config file မွာ setting နည္းနည္းသြားထည့္ေပးရတယ္။

<system.net>

    <mailSettings>

        <smtp from="admin@sevenlamp.com">

            <network  host="smtp. sevenlamp.com"

                   password="password"

                   port="465"

                   userName=" admin@sevenlamp.com " />

        </smtp>

    </mailSettings>

</system.net>

ျပီးရင္ UI မွာ ဒီလို design ခ်လိုက္ပါမယ္။

pic_1

pic_1

အခုေနာက္ဆံုးေတာ့ btnSend ရဲ႕ click event မွာ အခုလို႔ ေရးလိုက္ပါမယ္။

protected void btnSend_Click(object sender, EventArgs e)
{
    System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
    msg.From = new System.Net.Mail.MailAddress(txtFrom.Text);
    msg.To.Add(txtTo.Text);
    msg.Subject = txtSubject.Text;
    msg.Body = txtMessage.Text;

    System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
    try
    {
        client.Send(msg);
    }
    catch (Exception ex)
    {
        Response.Write(ex.Message);
    }
}

Coding က အရမး္ရွင္းလြန္းေနတဲ႔ အတြက္ ကြၽန္ေတာ္ ထပ္ျပီး ရွင္းျပစရာ မလိုဘူးထင္ပါတယ္။ သိခ်င္တာရွိရင္ ေကာမန္႔မွာ ထပ္ျပီးေမးပါခင္ဗ်ာ။

Theme: Silver is the New Black. Blog at WordPress.com.

Follow

Get every new post delivered to your Inbox.