Feeds:
文章
留言

Archive for 2005 年 08 月

回傳指標資料範例

#include <iostream.h>
int* add(int a, int b){
 int* x = new int(0);
 *x = a+b;
 return x;
}
void main(){
 int* result = add(3, 4);
 cout << *result << endl;
 delete result;
}

Read Full Post »

Google 的 Blog

今天在查找資料的時候發現,原來Google有提供 Blog 功能,ㄏㄏ…申請一各來玩玩

Read Full Post »

繼承機制測試

Read Full Post »

如何動態變更表格(table)

由於工作上發現專案上會用到許多的表格,所以,想將表格寫成一個元件來使用,我的構想是這個元件具有

1. 基本的欄位讀寫功能

    2. 排序功能
    3. 任意調換兩列或兩欄的資料
    4. 動態新增或刪除資料列或資料欄位


    相關的指令
    var tbl = document.getElementById(‘tbl’);
    alert( tbl.rows.length ); // 列數
    alert( tbl.rows[0].cell[0] ); // 第一行第一個欄位資料
    var row = tbl.insertRow();   // 插入一列
    var cell = row.insertCell();   // 新增一個欄位
    cell.innerText = ‘a’;

    Read Full Post »

    為什麼.和-有順序之分

    – 無效
    ereg("^/school/[0-9]{5}/[0-9]{5}/hw/[0-9]+/[0-9a-zA-Z_-.]+/$", $fpath))
     
    – 有效
    ereg("^/school/[0-9]{5}/[0-9]{5}/hw/[0-9]+/[0-9a-zA-Z_.-]+/$", $fpath))
     

    Read Full Post »

    Total Commander 常見問題

    1. 如何快速變更檔名?
    選取檔案,並按下Shift+F6

    設定→選項→其他,重新定義 F2 對應 cm_RenameOnly,使 Total Commander 模擬 Explorer 的 F2 變更檔名功能

    2. 我要如何複製軟碟片資料
    1) 開始→變更開始選單→新增項目
    2) 指令行填入 rundll32.exe diskcopy.dll,DiskCopyRunDll
    3) 確定


    3. 複製檔案清單
    新增 cm_copynamestoclip 命令

    Read Full Post »

    這是個很常用的功能,特此留下紀錄,免得每次都要看一次指令說明
    以下是 Windows 2000 下的操作
    在命令模式下使用 dir /b > filelist.txt

    Read Full Post »

    最近想要讓網頁的介面設計的更加人性化,一直想要將 HTML
    的元件包成一個個類別來使用,這篇文章主要是將事件委託(delegate)給個別物件的事件處理函式處理的設計方式,這個只是一個雛形,未來可能有更好
    的設計方法。下面就是以 Onclick 事件作為示範的程式碼

    <form id = ‘StatusBar‘ style = ‘position: absolute; left:0; top: 400’>
        <input type = ‘text’ id = ‘txtMessage’ style = ‘border: 1 double; width: 100%’ value = ‘StatusBar’/>
    </form>
    // ——————————————————————————-
    // 將 HTML 元素事件委託給個別物件的處理函式
    //
    //
        // 移除指定的元素
        Array.prototype.remove = function(obj){
            for ( var i=0 ; i < this.length ; ++i )    {
                if ( this[i] == obj ){
                    if ( i > this.length/2 ){
               
            for ( var j=i ; j <
    this.length-1 ; ++j ){
               
                this[j] =
    this[j+1];
                        }
                        this.pop();
                    }else{
                        for ( var j=i ; j > 0 ; –j ){
               
                this[j] =
    this[j-1];
                        }
                        this.shift();
                    }   
                    break;
                }
            }
        };

        CA = function (ui){
            var _ui = document.getElementById(ui);
           
            this.getUI = function () {
                return _ui;
            };

            // 攔截事件
            _ui.onclick = function(){
               
    try{           
       
                    if ( this.EventHandler != null ){
                        // 將事件重導到個別物件的事件處理函式
               
            for(var i=0;
    i<this.EventHandler.length; ++i){
               
                var func =
    this.EventHandler[i];
                            func(i); // Delegate
                        }
                    }
                }catch(e){
                    alert(e);
                }
            };

            // 儲存物件的事件處理函式
            _ui.addEventHandler = function(callback){
                try{
                    if (callback !== null){
                        if (this.EventHandler == null){
               
                //alert(‘ya,
    its null’);
               
               
    this.EventHandler = new Array();
                        }

                        // 找尋是否有相同的事件
               
            //for(var i = 0; i<
    this.EventHandler.length; ++i){
               
            //    if (callback
    == this.EventHandler[i]){
               
               
        //alert(‘equal:’ + callback);
               
            //   
        return;
                        //    }
                        //}
                       
                        this.EventHandler.push(callback);
               
            //alert(this.EventHandler.length);
                    }
                }catch(e){
                    alert(e);
                }
            };

            // 儲存物件的事件處理函式
            _ui.removeEventHandler = function(callback){
                //try{
                    if (callback !== null){
                        if (this.EventHandler == null){
               
                //alert(‘ya,
    its null’);
                            return;
                        }

                        // 找尋是否有相同的事件
               
           
    this.EventHandler.remove(callback);
                    }
                //}catch(e){
                //    alert(e);
                //}
            };

        // Event Handler:
            this.addOnClick = function (callback){
                this.getUI().addEventHandler(callback);
            };
            this.removeOnClick = function (callback){
                this.getUI().removeEventHandler(callback);
            };

        };

    function func1(v){
        alert(‘func1: ‘+v);
    }

    function func2(v){
        alert(‘func2: ‘+v);
    }

    function func3(v){
        alert(‘func3: ‘+v);
    }
    var o1 = new CA(‘StatusBar’);
    o1.addOnClick(func1);

    var o2 = new CA(‘StatusBar’);
    o2.addOnClick(func1);
    o2.addOnClick(func2);
    o2.addOnClick(func2);
    o2.addOnClick(func3);
    o1.removeOnClick(func1);


    以上的設計概念參考 .Net 的事件處理,也就是說,可以新增多個事件處理函式,只是因為 Javascript 不支援運算子重載,我以 method 來模擬 .Net 裡面用 +/- 來新增事件/刪除事件。

    這個程式的關鍵點在於
    addEventHandler(…)
    removeEventHandler(…)
    如果沒有透過在 HTML 元件上新增這兩個函式,就沒有辦法把事件委託給其他函式處理,因為元件上的事件沒有辦法取得"物件(就是範例的CA)"的認合成員資料,所以,必須透過這兩個函式來新增移除事件。

    當委託的事件存放在 HTML 元件的上之後,還必須攔截事件(範例中的 onclick):
    _ui.onclick = function(){ … }

    並在其中將相關的參數委託給註冊的事件處理函式去處理。這就是整個的設計概念。

    至於其他的 method ,只是 set/get 資料用,沒有太大的用途。

    Read Full Post »

    軟體工程是啥~

    我不是資工科班畢業,對於軟體工程不甚了解,但是基於個人興趣的理由,自修相關的專業,目前也在從事這方面的工作。進入公司已經將近半年了,也負責公司的一些專案,一直有一些感想。看到專案中的有些程式都有一些不錯的設計,可惜其他的人沒有發現而未沿用,真的是頗可惜。

    我是不懂軟工,不過對於程式寫作也有好長一陣子了,我的經驗告訴我,沒有結構化的程式,維護和修改是備感艱辛,另外,由於專案的程式都混和多種語言,所
    以,使得維護和修改更加困難,由於沒有像 Microsoft Visual Studio
    一類的IDE,所以,每一次的修改都是一種痛苦的煎熬。使得我不太想修改舊有的程式,而想自己重寫一份… 啊~
    這是大部分人的想法吧。不過,重新設計也是有風險,如非必要我不會如此做 -_-b

    回到主題吧,我想公司裡面應該有許多科班畢業的專業人士,為什麼都沒有人把這些寫的很棒的程式碼進行整理呢?或是設計的好一點或是設計的好一點,怎麼程式
    都像義大利麵一樣糾纏再一起呢?恩~
    可能時間不夠,或是…不過,目前既然是我接手,為了讓未來的日子輕鬆些,目前我持續的再將相關的程式碼收集成類似 C/C++
    的函數庫,以達到程式碼重複利用和減少錯誤發生的機率,並進而達到工作效率的提昇。我想這是很基本的工程概念吧。可是,為什麼產品會設計成這樣ㄋ~

    算了… 留給主管去煩惱吧…. 我只是個微不足道的工程師…. ^^

    Read Full Post »

    支援 with 指令

    今天在搜尋其他文件的時候發現,原來 Javascript 也支援類似 VB 的 with 指令,他的使用方法如下:
    var arr = new Array();
    with (arr){
      push(1); // 前面不需要加 .
      push(2);
      push(3);
     alert( pop() );
    }

    Read Full Post »

    Older Posts »