2008/03/14

使用OWC11 畫出統計圖表

出處

先在設計畫面的工具列新增三個項目(三個都在COM元件內).

Microsoft Office Chart 11.0
Microsoft Office PivotTable 11.0
Microsoft Office Spreadsheet 11.0

之後拉一個Microsoft Office Chart 11.0到Form上.
一個Timer
3個RadioButton.
rdb_chChartTypeLine
rdb_chChartTypeLine3D
rdb_chChartTypeLineMarkers

以下即為程式碼原始碼.

using Microsoft.Office.Interop.Owc11;
ChartChartTypeEnum _Type;
private void Form1_Load(object sender, EventArgs e)
{
    showChart(ChartChartTypeEnum.chChartTypeLine);
}

private void showChart(ChartChartTypeEnum Type)
{
    try
    {
        axChartSpace1.Clear();
        ChChart objChart = axChartSpace1.Charts.Add(0);

        objChart.Type = Type;
        objChart.HasLegend = true;
        objChart.HasTitle = true;
        objChart.Title.Caption = "數量統計";
        objChart.Axes[0].HasTitle = true;
        objChart.Axes[0].Title.Caption = "月份";
        objChart.Axes[1].HasTitle = true;
        objChart.Axes[1].Title.Caption = "個";

        objChart.SeriesCollection.Add(0);
        objChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimSeriesNames,
        +(int)ChartSpecialDataSourcesEnum.chDataLiteral, "3C");

        objChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimCategories,
        +(int)ChartSpecialDataSourcesEnum.chDataLiteral,
        "Jan" + '\t' + "Feb" + '\t' + "Mar" + '\t' + "Apr" + '\t' + "May" + '\t' + "Jun" + '\t');
        Random r = new Random(DateTime.Now.Second);
        string w1 = r.Next(300).ToString();
        string w2 = r.Next(300).ToString();
        string w3 = r.Next(300).ToString();
        string w4 = r.Next(300).ToString();
        string w5 = r.Next(300).ToString();
        string w6 = r.Next(300).ToString();
        objChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimValues,
        (int)ChartSpecialDataSourcesEnum.chDataLiteral,
        w1 + '\t' + w2 + '\t' + w3 + '\t' + w4 + '\t' + w5 + '\t' + w6 + '\t');

        objChart.SeriesCollection.Add(1);
        objChart.SeriesCollection[1].SetData(ChartDimensionsEnum.chDimSeriesNames,
        +(int)ChartSpecialDataSourcesEnum.chDataLiteral, "Daily Needs");

        objChart.SeriesCollection[1].SetData(ChartDimensionsEnum.chDimCategories,
        +(int)ChartSpecialDataSourcesEnum.chDataLiteral,
        "Jan" + '\t' + "Feb" + '\t' + "Mar" + '\t' + "Apr" + '\t' + "May" + '\t' + "Jun" + '\t');
        string b1 = r.Next(300).ToString();
        string b2 = r.Next(300).ToString();
        string b3 = r.Next(300).ToString();
        string b4 = r.Next(300).ToString();
        string b5 = r.Next(300).ToString();
        string b6 = r.Next(300).ToString();

        objChart.SeriesCollection[1].SetData(ChartDimensionsEnum.chDimValues,
        (int)ChartSpecialDataSourcesEnum.chDataLiteral,
        b1 + '\t' + b2 + '\t' + b3 + '\t' + b4 + '\t' + b5 + '\t' + b6 + '\t');
    }
    catch (Exception ex)
    {
        timer1.Enabled = false;
        MessageBox.Show(ex.Message);
    }
    finally
    {
        _Type = Type;
    }
}

private void rdb_chChartTypeLine_CheckedChanged(object sender, EventArgs e)
{
    if (rdb_chChartTypeLine.Checked)
    {
        showChart(ChartChartTypeEnum.chChartTypeLine);
        return;
    }
    if (rdb_chChartTypeLine3D.Checked)
    {
        showChart(ChartChartTypeEnum.chChartTypeLine3D);
        return;
    }
    if (rdb_chChartTypeLineMarkers.Checked)
    {
        showChart(ChartChartTypeEnum.chChartTypeLineMarkers);
        return;
    }
}

private void timer1_Tick(object sender, EventArgs e)
{
    showChart(_Type);
}

2008/03/07

PIC TEST

2000823249239778958_rs

2008/03/06

[C#]動態陣列 使用 ArrayList

來源


using System;
using System.Collections; //記得要宣告的
public class SamplesArrayList
{
    public static void Main()
    {
        // Creates and initializes a new ArrayList.
        ArrayList myAL = new ArrayList();
        myAL.Add("Hello");
        myAL.Add("World");
        myAL.Add("!");
        // Displays the properties and values of the ArrayList.
        Console.WriteLine( "myAL" );
        Console.WriteLine( " Count: {0}", myAL.Count );
        Console.WriteLine( " Capacity: {0}", myAL.Capacity );
        Console.Write( " Values:" );
        PrintValues( myAL );
    }
    public static void PrintValues( IEnumerable myList )
    {
        foreach ( Object obj in myList )
        Console.Write( " {0}", obj );
        Console.WriteLine();
    }
}

//This code produces output similar to the following:
//myAL
//Count: 3
//Capacity: f
//Values: Hello World !

[C#]從陣列中移除一行值

原始連結


static void Main(string[])
{
//array 是固定的,不能動態去變更大小
//只能重新宣告一個新的陣例才能達到你 Remove 的需求
//一般如果是動態的,會用 ArrayList 或是 List<> 來做
string[] aryStr = { "A", "B", "C", "D" };
int removeIndex = 2;//把 C 移掉
// ======= sample 1 ==> 改用 List<string> ====
List<string> list = new List<string>();
foreach (string str in aryStr)
{
list।Add(str);
}
list।RemoveAt(removeIndex);
string[] aryStrRemoveByList = list।ToArray();
foreach (string str in aryStrRemoveByList)
{
Console।WriteLine(str);
}
Console।WriteLine(new String('=', 20));
// ======== sample 2 自已寫Method去轉,不過還是要new新的
string[] aryStrRemoveByArray = new string[aryStr।Length - 1];
int count = 0;
for (int i = 0; i < aryStr।Length; i++)
{
if (i != removeIndex)
{
aryStrRemoveByArray[count] = aryStr[i];
count++;
}
}
foreach (string str in aryStrRemoveByArray)
{
Console।WriteLine(str);
}
}

2008/02/25

C# DateTime 日期格式轉換

C#有個DateTime的物件用來處理日期的其中DateTime.ParseExact 方法(System)方法可以將日期和時間的指定字串表示轉換為其對等的DateTime
字串表示的格式必須完全符合指定的格式。
再搭配DateTime.ToString (IFormatProvider)
方法使用格式資訊,將這個執行個體的值轉換為它的對等字串表示。


// 將字串日期轉整數
// 日期字串
// 整數日期格式
private static int ParseDate(string _date)
{
    //這裡定義所有日期格式
    string[] dateFormats = { "yyyy/MM/dd", "yyy/MM/dd", "yy/MM/dd", "y/MM/dd",
    "yyyy-MM-dd", "yyy-MM-dd", "yy-MM-dd", "y-MM-dd",
    "yyyy/M/dd","yyy/M/dd","yy/M/dd","y/M/dd",
    "yyyy-M-dd","yyy-M-dd","yy-M-dd","y-M-dd",
    "yyyy/MM/d","yyy/MM/d","yy/MM/d","y/MM/d",
    "yyyy-MM-d","yyy-MM-d","yy-MM-d","y-MM-d",
    "yyyy/M/d","yyy/M/d","yy/M/d","y/M/d",
    "yyyy-M-d","yyy-M-d","yy-M-d","y-M-d"};
    try
    {
        //這裡來處理傳入的格式是否為日期格式,只需要簡單一行
        DateTime datetime = DateTime.ParseExact(_date, dateFormats, null, DateTimeStyles.AllowWhiteSpaces);
        int iToken = _date.IndexOf("-", 0);
        if (iToken == -1)
        iToken = _date.IndexOf("/",0);
        string iYear = _date.Substring(0, iToken);
        switch (iYear.Length)
        {
            //這裡是利用datetime.ToString(IFormatProvider)
            //的方法傳出自己想要的統一格式
            case 1:
            return Int32.Parse(datetime.ToString("yMMdd"));
            case 2:
            return Int32.Parse(datetime.ToString("yyMMdd"));
            case 3:
            return Int32.Parse(datetime.ToString("yyyMMdd"));
            case 4:
            return Int32.Parse(datetime.ToString("yyyyMMdd"));
        }
        return 0;
    }
    catch (Exception)
    {
        return 0;
    }
}

甚至時間也可以這樣來做

// 將字串時間轉換為整數時間
// 時間字串(HH:mm:ss
// HHmmss整數格式
private static int ParseTime(string _time)
{
    string[] timeFormats = { "HH:mm:ss", "HH:mm:s","HH:m:ss", "HH:m:s",
    "H:mm:ss","H:mm:s","H:m:ss","H:m:s"};
    try
    {
        DateTime datetime = DateTime.ParseExact(_time, timeFormats, null,DateTimeStyles.AllowWhiteSpaces);
        return Int32.Parse(datetime.ToString("HHmmss"));
    }
    catch(Exception)
    {
        return 0;
    }
}

2008/02/21

C# 日期 轉 農曆

System.Globalization 這個命名空間很有趣,竟然有 TaiwanCalendar 與 TaiwanLunisolarCalendar 類別!

TaiwanCalendar 是指台灣使用的曆法,也就是「民國年」的計算法。


DateTime now = DateTime.Now;
TaiwanCalendar tc = new TaiwanCalendar();

int year = tc.GetYear(now);
MessageBox.Show(year.ToString());
// Output : 96

int month = tc.GetMonth(now);
// Output : 12

int daysOfMonth = tc.GetDaysInMonth(year, month);
MessageBox.Show(daysOfMonth.ToString());
// Output : 4

TaiwanLunisolarCalendar 是指台灣使用的陰陽曆(農曆)。和 TaiwanCalendar 相同,但可以使用西元年份計算,而日期和月份則使用陰陽曆計算,真的很省事!

TaiwanLunisolarCalendar tlc = new TaiwanLunisolarCalendar();

// 取得目前支援的農曆日曆到幾年幾月幾日( 2051-02-10 )
tlc.MaxSupportedDateTime.ToShortDateString();

// 取得今天的農曆年月日
txtContent.Text =
tlc.GetYear(DateTime.Now).ToString() + "-" +
tlc.GetMonth(DateTime.Now).ToString() + "-" +
tlc.GetDayOfMonth(DateTime.Now).ToString();

C# 計算日期 是 星期幾

基姆拉爾森計算公式
W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
在公式中d表示日期中的日數,m表示月份數,y表示年數。
注意:在公式中有個與其他公式不同的地方:
把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10則換算成:2003-13-10來代入公式計算。
代碼如下:


//y-年,m-月,d-日期
string CaculateWeekDay(int y,int m, int d)
{
if(m==1) m=13;
if(m==2) m=14;
int week=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
string weekstr="";
switch(week)
{
case 1: weekstr="星期一"; break;
case 2: weekstr="星期二"; break;
case 3: weekstr="星期三"; break;
case 4: weekstr="星期四"; break;
case 5: weekstr="星期五"; break;
case 6: weekstr="星期六"; break;
case 7: weekstr="星期日"; break;
}
return weekstr;
}
調用方法:
Label2।Text=CaculateWeekDay(2004,12,9);

取得一年中某一個月天數,EX 2008/01
label4।Text = DateTime.DaysInMonth(2008,1).ToString();

先取得2月在減1天,就是1月的最後一天了.
//今天
DateTime.Now.Date.ToString();
//昨天
DateTime.Now.AddDays(-1).ToString();
//明天
DateTime.Now.AddDays(1).ToString();

//本週第1天及最後1天 (要注意的是這裡的每一週是從週日始至週六止)
DateTime.Today.AddDays (-(int)DateTime.Today.DayOfWeek).ToString();
DateTime.Today.AddDays (6 -(int)DateTime.Today.DayOfWeek).ToString();

//上週, 一個周是7天,上週就是本週再減去7天
DateTime.Today.AddDays (-(int)DateTime.Today.DayOfWeek - 7).ToString();
DateTime.Today.AddDays (6 -(int)DateTime.Today.DayOfWeek - 7).ToString();

//下周
DateTime.Today.AddDays (-(int)DateTime.Today.DayOfWeek + 7).ToString();
DateTime.Today.AddDays (6 -(int)DateTime.Today.DayOfWeek + 7).ToString();


//巧用C#裡ToString的字符格式化
//本用第1天及最後1天
DateTime.Now.ToString("yyyy-MM-01");
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(1).AddDays(-1).ToString();

//上個月第1天及最後1天
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(-1).ToString();
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddDays(-1).ToString();
//下個月第1天及最後1天
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(1).ToString();
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(2).AddDays(-1).ToString();

//今年第1天
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).ToString();
//今年最後1天
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(1).AddDays(-1).ToString();

//去年第1天及最後1天
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(-1).ToString();
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddDays(-1).ToString();

//明年第1天及最後1天
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(1).ToString();
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(2).AddDays(-1).ToString();

//本季,一年四個季度,一個季度三個月
//先把日期推到本季度第一個月,然後這個月的第一天就是本季度的第一天了
DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01");
//本季度的最後一天就是下季度的第一天減一
DateTime.Parse(DateTime.Now.AddMonths(3 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01")).AddDays(-1).ToString();
//下季
DateTime.Now.AddMonths(3 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01");
DateTime.Parse(DateTime.Now.AddMonths(6 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01")).AddDays(-1).ToString();
//上季
DateTime.Now.AddMonths(-3 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01");
DateTime.Parse(DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01")).AddDays(-1).ToString();

2007/10/31

隱藏資料夾 & 隱藏自己的電腦

隱藏資料夾

要想讓其他用戶無法通過網路芳鄰直接來訪問某個資料夾(例如「我的共享」資料夾),我們可以將其「隱藏」起來,具體方法如下:

右擊資料夾圖示,選項彈出快捷功能表中的「共用和安全」,在開啟的視窗中選項「共享」標籤,選項「共享該檔案夾」,在「共享名」後面的文本項中輸入共用資料夾名並在資料夾名後增加一個半形的「$」字元,最後按下「確定」儲存設定。

如果沒有在上面的視窗中給共享檔案名增加「$」符,也可以右擊該共用資料夾,選項「重新命名」將這個共享的檔案名稱後增加一個半形的「$」字元(例如「我的共享$」)。

經過這樣的操作之後,其他用戶開啟網路芳鄰時,在網路芳鄰列表中將不會看到該共用資料夾了。

如果你希望某個用戶去訪問你的這個共用資料夾,只要告訴他這個共用資料夾的絕對路徑即可,此路徑為「\\你的電腦名稱\我的共享$」,只要將其輸入到檔案總管的位址欄中並Enter鍵即可訪問了,注意:後面的「$」是必不可少的,如果少了該字元將訪問不成功。

隱藏自己的電腦

上面的方法是在區域網路內隱藏一個特定的資料夾,如果你想將自己的電腦也隱藏起來,請看:

按下「開始→執行」,在開啟的「執行」對話視窗中輸入「cmd」開啟指令行視窗,輸入「net config server /hidden:yes」,再Enter鍵就可以了,這樣,別人就無法從網路芳鄰中直接看到你的電腦,只有通過在檔案總管位址欄中輸入「\\電腦名稱」 才來訪問你的電腦。

不過,通過上面的方法只能對當前有效,以後每次重新啟動系統後要重新執行該指令才行,如果希望將自己的電腦從網路芳鄰中永久隱藏,可以通過修改註冊表來達到目的:

開啟註冊表編輯器,在左側視窗中展開「HKEY_LOCAL_MACHINE\

SYSTEM\CurrentControlSet\Services\lanmanserver\Parameters」,在右側視窗中找到DWORD檔案檔案類型值改為「1」,按「F5」重新整理註冊表即可。

回首頁

2007/10/30

別讓 MsgBox 中斷了一些 Background 的處理作業


在 VB 中,一旦您呼叫了 MsgBox,您正在執行的一些 Background 的處理作業,例如計數器或時鐘...等,都會停下來,直到您回應了 MsgBox 之后,一切才會恢复正常!或許您并不希望如此,這也有可能造成一些不必要的錯誤!

要解決這個問題,您必須使用 Windows API 去呼叫 MessageBox Function,它的使用方法、外觀和 MsgBox 的結果完全相同,但是它卻不會中斷一些 Background 的處理作業!

在以下的范例中,您要在 Form 中加入一個 Label、二個 CommandButton 及一個 Timer,不更改任何屬性。

'在聲明區中加入以下聲明:

Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long

'加入以下程序碼:

Private Sub Command1_Click()
MsgBox "計時器停掉了!", 64, "VB 的訊息框"
End Sub

Private Sub Command2_Click()
MessageBox Me.hwnd, "注意!計時器還在跑!", "API 的訊息框", 64
End Sub

Private Sub Form_Load()
Timer1.Interval = 1000
Label1.Caption = "目前的時間是:" & Time
End Sub

Private Sub Timer1_Timer()
Label1.Caption = "目前的時間是:" & Time
End Sub

2007/10/25

VB程式中跳下一個駐點的方法

Private Sub Text3_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
        '檢查是否為數值 and 檢查是否按下"Enter" 
        If IsNumeric(Text3(Index).Text) = False And KeyCode = 13 Then
                a = MsgBox("Input Error", , "Error")
        Else
                If KeyCode = 13 Then
                        SendKeys "{TAB}" '傳送"Tab"鍵值
                End If
        End If
End Sub
 

VB程式中使用滑鼠滾倫


 說明

由於VB自訂的事件中,並沒有這項訊息,於是只好自己攔截WM_MOUSEWHEEL這個訊息了

程式

'以下在.Bas
Option Explicit

'用以告訴系統當這個視窗的msg事件發生時 執行lpPrevWndFunc
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'lpPrevWndFunc執行函數的位址
'hwnd 就是視窗的hwnd屬性
'Msg就是訊息 例如按下滑鼠右鍵 最大化....
'wParam,lParam會因Msg不同而有不同的用途

'用以設定視窗的程序
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" ( _
ByVal hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
'hwnd 就是所要設定視窗的hwnd屬性
'nIndex 是要設定的程序
'dwNewLong  所指定的程序(nIndex)所要執行的動作

Public Const GWL_WNDPROC = (-4)
Public Const WM_MOUSEWHEEL = &H20A
Public PrevWndProc As Long

Function WndProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim t(0 To 1) As Integer
If uMsg = WM_MOUSEWHEEL Then '如果是滾輪
    If wParam < 0 Then 'backward
        Form1.Top = Form1.Top + 10
    Else 'forforward
        Form1.Top = Form1.Top - 10
    End If
Else
    WndProc = CallWindowProc(PrevWndProc, hwnd, uMsg, wParam, lParam)
    '其他訊息用原來的回呼函數處理
End If
End Function

'以下在Form1中
Option Explicit
Private Sub Form_Load()
PrevWndProc = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WndProc)
'設定新的回呼函式 以攔截訊息
'note: 傳回值PrevWndProc是原來視窗的回呼函數
'WndProc函數放在模組 因為AddressOf只能取得模組下函數的位址
End Sub

Private Sub Form_Unload(Cancel As Integer)
Dim lResult As Long
lResult = SetWindowLong(Me.hwnd, GWL_WNDPROC, PrevWndProc)
'結束時歸還原來的回呼函數 不然會當機
End Sub

相關資訊

  WM_MOUSEWHEEL

  SetWindowLong

  CallWindowProc

文件出處

  Honey  

2007/04/24

使用EXCEL計算貸款金額

使用PMT公式計算貸款的每月繳款金額,=PMT(月利率 rate , 總期數 nper, 貸款金額 pv),
月利率rate、總期數nper、貸款金額pv都是正數,正數表示領到金額,PMT算出的數字會是負數,
而負數表示要付出金錢。

如果希望知道繳了一年12期之後,還剩下多少貸款金額尚未償還,
可以利用PMT加上FV兩個公式來合併計算,首先,計算出每期的繳款金額,
然後利用FV,=FV(月利率 rate , 繳費幾期之後 nper, 每期繳款 pmt, 貸款金額 pv),
FV會算出負數,而負數表示還剩下多少貸款金額尚未償還。

想知道每期繳款中,有多少是繳付本金,有多少是繳付利息,
可以分別使用PPMT與IPMT這兩個公式,=PPMT(月利率 rate,
哪一期 per , 總期數 nper, 貸款金額 pv),PPMT會算出負數,
而負數表示那期繳款中,償還本金的金額。同格式,IPMT表示那期繳款中,
償還利息的金額。

2007/03/13

VB中各種進制的轉換

'-------------------------------------------

' 用途:將十進制轉化為二進制
' 輸入:Dec(十進制數)
' 輸入數據類型:Long
' 輸出:DEC_to_BIN(二進制數)
' 輸出數據類型:String
' 輸入的最大數為2147483647,輸出最大數為1111111111111111111111111111111(31個1)
'-------------------------------------------
Public Function DEC_to_BIN(Dec As Long) As String
DEC_to_BIN = ""
Do While Dec > 0
DEC_to_BIN = Dec Mod 2 & DEC_to_BIN
Dec = Dec \ 2
Loop
End Function
'-------------------------------------------
' 用途:將二進制轉化為十進制
' 輸入:Bin(二進制數)
' 輸入數據類型:String
' 輸出:BIN_to_DEC(十進制數)
' 輸出數據類型:Long
' 輸入的最大數為1111111111111111111111111111111(31個1),輸出最大數為2147483647
'-------------------------------------------
Public Function BIN_to_DEC(ByVal Bin As String) As Long
Dim i As Long
For i = 1 To Len(Bin)
BIN_to_DEC = BIN_to_DEC * 2 + Val(Mid(Bin, i, 1))
Next i
End Function
'-------------------------------------------
' 用途:將十六進制轉化為二進制
' 輸入:Hex(十六進制數)
' 輸入數據類型:String
' 輸出:HEX_to_BIN(二進制數)
' 輸出數據類型:String
' 輸入的最大數為2147483647個字符
'-------------------------------------------
Public Function HEX_to_BIN(ByVal Hex As String) As String
Dim i As Long
Dim B As String

Hex = UCase(Hex)
For i = 1 To Len(Hex)
Select Case Mid(Hex, i, 1)
Case "0": B = B & "0000"
Case "1": B = B & "0001"
Case "2": B = B & "0010"
Case "3": B = B & "0011"
Case "4": B = B & "0100"
Case "5": B = B & "0101"
Case "6": B = B & "0110"
Case "7": B = B & "0111"
Case "8": B = B & "1000"
Case "9": B = B & "1001"
Case "A": B = B & "1010"
Case "B": B = B & "1011"
Case "C": B = B & "1100"
Case "D": B = B & "1101"
Case "E": B = B & "1110"
Case "F": B = B & "1111"
End Select
Next i
While Left(B, 1) = "0"
B = Right(B, Len(B) - 1)
Wend
HEX_to_BIN = B
End Function
'-------------------------------------------
' 用途:將二進制轉化為十六進制
' 輸入:Bin(二進制數)
' 輸入數據類型:String
' 輸出:BIN_to_HEX(十六進制數)
' 輸出數據類型:String
' 輸入的最大數為2147483647個字符
'-------------------------------------------
Public Function BIN_to_HEX(ByVal Bin As String) As String
Dim i As Long
Dim H As String
If Len(Bin) Mod 4 <> 0 Then
Bin = String(4 - Len(Bin) Mod 4, "0") & Bin
End If

For i = 1 To Len(Bin) Step 4
Select Case Mid(Bin, i, 4)
Case "0000": H = H & "0"
Case "0001": H = H & "1"
Case "0010": H = H & "2"
Case "0011": H = H & "3"
Case "0100": H = H & "4"
Case "0101": H = H & "5"
Case "0110": H = H & "6"
Case "0111": H = H & "7"
Case "1000": H = H & "8"
Case "1001": H = H & "9"
Case "1010": H = H & "A"
Case "1011": H = H & "B"
Case "1100": H = H & "C"
Case "1101": H = H & "D"
Case "1110": H = H & "E"
Case "1111": H = H & "F"
End Select
Next i
While Left(H, 1) = "0"
H = Right(H, Len(H) - 1)
Wend
BIN_to_HEX = H
End Function
'-------------------------------------------
' 用途:將十六進制轉化為十進制
' 輸入:Hex(十六進制數)
' 輸入數據類型:String
' 輸出:HEX_to_DEC(十進制數)
' 輸出數據類型:Long
' 輸入的最大數為7FFFFFFF,輸出的最大數為2147483647
'-------------------------------------------
Public Function HEX_to_DEC(ByVal Hex As String) As Long
Dim i As Long
Dim B As Long

Hex = UCase(Hex)
For i = 1 To Len(Hex)
Select Case Mid(Hex, Len(Hex) - i + 1, 1)
Case "0": B = B + 16 ^ (i - 1) * 0
Case "1": B = B + 16 ^ (i - 1) * 1
Case "2": B = B + 16 ^ (i - 1) * 2
Case "3": B = B + 16 ^ (i - 1) * 3
Case "4": B = B + 16 ^ (i - 1) * 4
Case "5": B = B + 16 ^ (i - 1) * 5
Case "6": B = B + 16 ^ (i - 1) * 6
Case "7": B = B + 16 ^ (i - 1) * 7
Case "8": B = B + 16 ^ (i - 1) * 8
Case "9": B = B + 16 ^ (i - 1) * 9
Case "A": B = B + 16 ^ (i - 1) * 10
Case "B": B = B + 16 ^ (i - 1) * 11
Case "C": B = B + 16 ^ (i - 1) * 12
Case "D": B = B + 16 ^ (i - 1) * 13
Case "E": B = B + 16 ^ (i - 1) * 14
Case "F": B = B + 16 ^ (i - 1) * 15
End Select
Next i
HEX_to_DEC = B
End Function
'-------------------------------------------
' 用途:將十進制轉化為十六進制
' 輸入:Dec(十進制數)
' 輸入數據類型:Long
' 輸出:DEC_to_HEX(十六進制數)
' 輸出數據類型:String
' 輸入的最大數為2147483647,輸出最大數為7FFFFFFF
'-------------------------------------------
Public Function DEC_to_HEX(Dec As Long) As String
Dim a As String
DEC_to_HEX = ""
Do While Dec > 0
a = CStr(Dec Mod 16)
Select Case a
Case "10": a = "A"
Case "11": a = "B"
Case "12": a = "C"
Case "13": a = "D"
Case "14": a = "E"
Case "15": a = "F"
End Select
DEC_to_HEX = a & DEC_to_HEX
Dec = Dec \ 16
Loop
End Function
'-------------------------------------------
' 用途:將十進制轉化為八進制
' 輸入:Dec(十進制數)
' 輸入數據類型:Long
' 輸出:DEC_to_OCT(八進制數)
' 輸出數據類型:String
' 輸入的最大數為2147483647,輸出最大數為17777777777
'-------------------------------------------
Public Function DEC_to_OCT(Dec As Long) As String
DEC_to_OCT = ""
Do While Dec > 0
DEC_to_OCT = Dec Mod 8 & DEC_to_OCT
Dec = Dec \ 8
Loop
End Function
'-------------------------------------------
' 用途:將八進制轉化為十進制
' 輸入:Oct(八進制數)
' 輸入數據類型:String
' 輸出:OCT_to_DEC(十進制數)
' 輸出數據類型:Long
' 輸入的最大數為17777777777,輸出的最大數為2147483647
'-------------------------------------------
Public Function OCT_to_DEC(ByVal Oct As String) As Long
Dim i As Long
Dim B As Long

For i = 1 To Len(Oct)
Select Case Mid(Oct, Len(Oct) - i + 1, 1)
Case "0": B = B + 8 ^ (i - 1) * 0
Case "1": B = B + 8 ^ (i - 1) * 1
Case "2": B = B + 8 ^ (i - 1) * 2
Case "3": B = B + 8 ^ (i - 1) * 3
Case "4": B = B + 8 ^ (i - 1) * 4
Case "5": B = B + 8 ^ (i - 1) * 5
Case "6": B = B + 8 ^ (i - 1) * 6
Case "7": B = B + 8 ^ (i - 1) * 7
End Select
Next i
OCT_to_DEC = B
End Function
'-------------------------------------------
' 用途:將二進制轉化為八進制
' 輸入:Bin(二進制數)
' 輸入數據類型:String
' 輸出:BIN_to_OCT(八進制數)
' 輸出數據類型:String
' 輸入的最大數為2147483647個字符
'-------------------------------------------
Public Function BIN_to_OCT(ByVal Bin As String) As String
Dim i As Long
Dim H As String
If Len(Bin) Mod 3 <> 0 Then
Bin = String(3 - Len(Bin) Mod 3, "0") & Bin
End If

For i = 1 To Len(Bin) Step 3
Select Case Mid(Bin, i, 3)
Case "000": H = H & "0"
Case "001": H = H & "1"
Case "010": H = H & "2"
Case "011": H = H & "3"
Case "100": H = H & "4"
Case "101": H = H & "5"
Case "110": H = H & "6"
Case "111": H = H & "7"
End Select
Next i
While Left(H, 1) = "0"
H = Right(H, Len(H) - 1)
Wend
BIN_to_OCT = H
End Function
'-------------------------------------------
' 用途:將八進制轉化為二進制
' 輸入:Oct(八進制數)
' 輸入數據類型:String
' 輸出:OCT_to_BIN(二進制數)
' 輸出數據類型:String
' 輸入的最大數為2147483647個字符
'-------------------------------------------
Public Function OCT_to_BIN(ByVal Oct As String) As String
Dim i As Long
Dim B As String

For i = 1 To Len(Oct)
Select Case Mid(Oct, i, 1)
Case "0": B = B & "000"
Case "1": B = B & "001"
Case "2": B = B & "010"
Case "3": B = B & "011"
Case "4": B = B & "100"
Case "5": B = B & "101"
Case "6": B = B & "110"
Case "7": B = B & "111"
End Select
Next i
While Left(B, 1) = "0"
B = Right(B, Len(B) - 1)
Wend
OCT_to_BIN = B
End Function
'-------------------------------------------
' 用途:將八進制轉化為十六進制
' 輸入:Oct(八進制數)
' 輸入數據類型:String
' 輸出:OCT_to_HEX(十六進制數)
' 輸出數據類型:String
' 輸入的最大數為2147483647個字符
'-------------------------------------------
Public Function OCT_to_HEX(ByVal Oct As String) As String
Dim Bin As String
Bin = OCT_to_BIN(Oct)
OCT_to_HEX = BIN_to_HEX(Bin)
End Function
'-------------------------------------------
' 用途:將十六進制轉化為八進制
' 輸入:Hex(十六進制數)
' 輸入數據類型:String
' 輸出:HEX_to_OCT(八進制數)
' 輸出數據類型:String
' 輸入的最大數為2147483647個字符
'-------------------------------------------
Public Function HEX_to_OCT(ByVal Hex As String) As String
Dim Bin As String
Hex = UCase(Hex)
Bin = HEX_to_BIN(Hex)
HEX_to_OCT = BIN_to_OCT(Bin)
End Function


VB自帶函數:
十進制轉八進制:Oct(num)
十六進制轉八進制:oct("&H" &amp; num)
十進制轉十六進制:hex(num)
八進制轉十六進制:hex("&O" & num)

十六進制轉換為十進制
Dim str As String
str = Text2.Text
Text10.Text = CLng("&H" & str)

2007/03/06

新版Blogger試用!!

HI~體驗一下 "部落格" 試試新版Blog功能
雖然有一陣子沒用了,還是試用一下^^

2006/12/07

[防毒防駭]AOL(美國線上推出Active Virus Shield卡巴斯基核心的免費掃毒軟體

AOL(美國線上推出)Active Virus Shield(卡巴斯基核心的免費掃毒軟體)
AOL(美國線上)於八月份在自家網站上推出Active Virus Shield這套有著
卡巴斯基核心的免費掃毒軟體,跟以往卡巴斯基令使用者詬病的極佔資源
及拖慢開機速度這兩個大問題,在這套軟體並不復見,而且佔用資源極小
使用者只需用自己的Email信箱去AOL申請,就可以獲得一年的KEY
八月份新出爐的掃毒排行榜裡獲得第二名.....第一名當然還是卡巴
不過就以免費,免破解和吃資源的角度來看算是相當不錯?
有興趣的可以試用看看?
下載點(輸入信箱會自動寄給你一組啟動碼!):
http://www.activevirusshield.com/antivirus/freeav/index.adp?
中文化(要進入安全模式才可中文化!!)
http://feelingwishes.myweb.hinet.net/Active Virus Shield(cht).exe

2006/02/15

2006/02/15 後~

情人節的後一天,天氣變的更好了,雖然沒有在情人節當天過節,但是...

2005/03/12


Image hosted by Photobucket.com

Image hosted by Photobucket.com

Image hosted by Photobucket.com

Image hosted by Photobucket.com

Image hosted by Photobucket.com

Image hosted by Photobucket.com