Monday, July 06, 2015

[VFP] Microsoft Common Dialog

VFP 的 GetFile() 函數只能一次選擇一個檔案,因此改用 Microsoft Commom Dialog ActiveX 來達到可以多選檔案,在測試環境都 OK,直到放上正式環境才發現出線下面錯誤訊息:Class is not licensed for use

[VFP] Microsoft Common Dialog - 1

一看見這個錯誤訊息,直覺是想說這個 ActiveX 竟然還要有 License 驗證才可以用,有這麼神嗎,後來參考這篇文章 License error with ActiveX control added at run-time 把 Commom Dialog 包進自訂控件來使用,才避開這個問題

[VFP] Microsoft Common Dialog - 2

Commom Dialog ActiceX 使用方式
loCD = Createobject("IC_OCX.Comdlg32")
loCD.OleControl.Flags = 0x00080204 && 設定檔案多選
loCD.OleControl.Filter = "JPG|*.JPG"
loCD.OleControl.maxFileSize = 10000 && 該參數一定要存在,要不然會出現 Error
loCD.OleControl.InitDir = "C:\" 
loCD.OleControl.ShowOpen()
loCD.OleControl.FileName
特別要注意的是 Common Dialog 多選檔案後,FileName 內的值是用 CHR(0) 來分開每個檔案名稱,EX:在路徑 C:\ 內選擇 1.JPG 2.JPG 檔案,FileName 值會是 C:\ CHR(0) 1.JPG CHR(0) 2.JPG,利用下面語法把 FileName 值 show 出來觀察
MESSAGEBOX(CHRTRAN(loCD.OleControl.FileName, CHR(0), CHR(13)))
[VFP] Microsoft Common Dialog - 3

Saturday, June 27, 2015

2015 避暑旅行 - 行程

記錄實際行程
  • 0619 五 - 高雄 => 多良車站 => 鐵花村 => 台東蘋果商旅
  • 0620 六 - 台東 => 鹿野高台 => 金色豐收館 => 伯朗大道 => 玉里豆豆的家
  • 0621 日 - 玉里 => 北迴歸線地標 => 瑞穗生態農場 => 花蓮糖廠 => 蜂之鄉 => 東華大學 => 自強夜市 => 花蓮星月森林
  • 0622 一 - 花蓮 => 遠雄海洋公園 => 蘇花公路 => 宜蘭桔梗花
  • 0623 二 - 宜蘭 => 傳藝中心 => 太平山莊
  • 0624 三 - 太平山莊 => 翠峰湖 => 鳩之澤 => 南湖大山登山口 => 武陵農場
  • 0625 四 - 武陵農場 => 桃山登山口 => 遊園導覽 => 武陵農場
  • 0626 五 - 武陵農場 => 生態解說 => 松雪樓 => 清境青青草原 => 清境雲的故鄉
  • 0627 六 - 清境 => 東山休息站 => 高雄
總共開了 1112 公里

2015 避暑旅行

Tuesday, June 09, 2015

[SQL] SSMS 視窗捲軸

論壇問題,為甚麼 SSMS 水平捲軸消失,如下圖

[SQL] SSMS 視窗捲軸-2

SSMS => 工具 => 選項 => 文字編輯器 => 顯示 => 勾選 "水平捲軸" 就行啦

[SQL] SSMS 視窗捲軸-3

如下圖

[SQL] SSMS 視窗捲軸-1

Friday, June 05, 2015

[C#] 繪圖 - 九宮格

看到有人詢問畫二維矩陣問題,想說畫個九宮格來練習繪圖相關的基礎語法
namespace WindowsFormsApplication1
{
    public partial class frmGraphics : Form
    {
        public frmGraphics()
        {
            InitializeComponent();
        }

        private void frmGraphics_Paint(object sender, PaintEventArgs e)
        {
            DataTable dt = new DataTable("Demo");
            dt.Columns.Add("Col1", typeof(int));
            dt.Columns.Add("Col2", typeof(int));
            dt.Columns.Add("Col3", typeof(int));
            dt.Rows.Add(1, 2, 3);
            dt.Rows.Add(4, 5, 6);
            dt.Rows.Add(7, 8, 9);

            int 
                MarginX = 10 ,
                MarginY = 10 ,
                RecX = 0 , 
                RecY = 0 , 
                RecWidth = 100 , 
                RecHeigh = 100 ;

            // 字在 Rec 中心
            int
                StrMarginX = RecWidth / 2,
                StrMarginY = RecHeigh / 2,
                StrX = RecWidth / 2 ,
                StrY = RecHeigh / 2;

            string data = string.Empty;

            for (int i = 0; i < dt.Columns.Count; i++)
            {
                RecX = MarginX + (RecWidth * i);
                StrX = StrMarginX + (RecWidth * i);

                for (int j = 0; j < dt.Rows.Count; j++)
                {
                    RecY = MarginY + (RecHeigh * j);
                    StrY = StrMarginY + (RecHeigh * j);
                    data = dt.Rows[j][i].ToString();

                    // 畫方格
                    Rectangle Rec = new Rectangle(RecX, RecY, RecWidth, RecHeigh);
                    Pen p = new Pen(Color.Black, 2);
                    e.Graphics.DrawRectangle(p, Rec);
     
                    // 填字
                    Font F = new Font("新細明體", 20, FontStyle.Bold);
                    e.Graphics.DrawString(data, F, Brushes.Blue, new PointF(StrX, StrY));
                }
            }
        }
    }
}

[C#] 繪圖 - 九宮格-1

繪圖要畫的好,還真的有難度,發現很多問題,Orz

Thursday, June 04, 2015

[C#] 在 Paint 事件內繪圖

最近閱讀一些繪圖相關的論壇討論,大神都建議要在 Paint 事件內進行繪圖動作,測試了解為甚麼
namespace WindowsFormsApplication1
{
    public partial class frmWhyPaint : Form
    {
        public frmWhyPaint()
        {
            InitializeComponent();
        }

        private void btnCreatePie_Click(object sender, EventArgs e)
        {
            Graphics g = this.CreateGraphics();
            g.FillPie(Brushes.Blue, 300, 100, 100, 100, 0, 360); 
        }

        private void frmWhyPaint_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.FillPie(Brushes.Red, 100, 100, 100, 100, 0, 360);
        }
    }
}

開始程式後利用 Button 產生右邊的藍圓

[C#] 在 Paint 事件內繪圖-1

把視窗最小化後,再放大,利用 Button 建立的藍圓,消失了

[C#] 在 Paint 事件內繪圖-2

拉視窗下緣,把兩個圓切一半

[C#] 在 Paint 事件內繪圖-3

再把視窗還原,發現到 Button 產生的藍圓,只剩下一半囉

[C#] 在 Paint 事件內繪圖-4