Feeds:
文章
留言

Archive for 八月 24th, 2005

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 »