2012年2月1日 星期三

[VB.net]控制項的繼承

先建立一個新的表單,然後"專案"→"加入新項目"→選擇"類別",
建立一個Class1.vb

以下是範例原始碼:
Class1.vb
Public Class Class1
    Inherits TextBox '繼承TextBox
    Public Sub msg(ByVal x As String) '建立一個Class1的方法
        MsgBox(x) '顯示MsgBox
    End Sub
End Class
 
 
Form1.vb
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Class11 As New Class1
        Class11.Text = "Hello! VB2005." '在Class1顯示文字
        Dim x As String = Class11.Text
        Class11.msg(x) '會跑出MsgBox(新增的方法,並非TextBox原本有的方法)
    End Sub
End Class
 
正常情況下,先輸入完所有程式碼之後,
你會在工具箱的最上面找到Class1元件,把他拉到表單。還要拉個Button元件。
原本Textbox控制項並沒有自動跑出MsgBox的方法,
但是建立Class1物件後,繼承自TextBox,所以可以當成TextBox用,
又有了Class1的新增功能,所以當按下Button1之後,就會跑出MsgBox囉!
(不過到底要怎麼讓工具箱裡面會自動出現Class1元件阿...
有的時候他不會自動出現....)

轉載:

[教學] [VB.net]控制項的繼承


2012年1月31日 星期二

WINDOWS XP 的重新封裝



如果要以 Ghost 來製作備份影像檔是需要先執行一個在 Windows XP 上名為系統準備工具』( SYSPREP ) 的程式因為在每一部安裝 Windows XP 系統的電腦上均需要有一個獨一無二的安全性識別碼 ( SID )如用一般 Ghost 備份方式製作出來的備份影像檔是無法為每部被複製還原的電腦各自製作一個安全性識別碼所以在建立備份影像檔前應先執行 Windows XP 上的 SYSPREP 工具程式把 Windows XP 重新封裝
而在欲建立備份影像檔的 Windows XP 電腦上開啟進入 Windows XP 光碟片中的 \SUPPORT\TOOLS 資料夾,把當中的 DEPLOY.CAB 檔案解壓縮至新建的C:\sysprep 資料夾內





解壓縮後應該有十個檔案,執行當中的 sysprep.exe 檔案,啟動進入『系統準備工具』程式。
 接下來

 接著按上方的『重新封裝』結束程式。此時會出現警告視窗,按確定後電腦便會自動關機,關機後大家便可以使用一般 Ghost 備份方式來進行備份工作。

不過以上是一般網路流傳的方式,真正的作法應該先執行 setupmgr.exe,並按精靈一步一步即可完成。
  
選擇建立新的回應檔案
  
選擇sysprep安裝

 選擇您的xp版本

 選擇完全自動化安裝

 輸入名稱、顯示設定、時區


 輸入正確序號
 

 看自己是否加入密碼
 自已修改群組、選擇語言






 完成自動回應檔的設定


 最後您再執行sysprep.exe進行winxp的重新封裝即可


 

 重新開機,執行ghost進行xp的備份,再燒成光碟即可,如此您做出來的備份光碟在完成還原的時候便會自動完成MiniSetup PnP 的動作,透過封裝還原的好處,就不必提了,還原後只需安裝該台電腦的驅動程式即可,原本的軟體依然健在

PS.封裝前一定要用 類似keyfinder的軟體將產品金鑰記下,封裝後還需輸入金鑰及安裝驅動。



VB.NET多國語言程式 - 已開啟表單的語系切換範例

今天實做Form在開啟狀態下切換語系,如下面兩張圖。
我所使用的讀檔方式是採用ini的讀取方式,並建立兩個ini檔,分別為中文test.CHT與英文test.ENG
當我按中文時,從中文檔讀入
當我按英文時,從英文檔讀入
 

程式如下:
程式中透過按鈕設定路徑,並透過副程式的呼叫執行檔案的讀取,範例如下

Imports System.Text
Imports System.Runtime.InteropServices
Public Class Form1

    Dim pathA As String = ""


    Public Declare Function GetPrivateProfileString Lib "kernel32" _
     Alias "GetPrivateProfileStringA" ( _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpApplicationName As String, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpKeyName As String, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpDefault As String, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpReturnedString As StringBuilder, _
     ByVal nSize As UInt32, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpFileName As String) As UInt32
    Public Declare Function WritePrivateProfileString Lib "kernel32" _
     Alias "WritePrivateProfileStringA" ( _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpApplicationName As String, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpKeyName As String, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpReturnedString As StringBuilder, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpFileName As String) As UInt32
    Dim sKeyValue As New StringBuilder(1024)
    Dim nSize As UInt32 = Convert.ToUInt32(1024)
    Dim sinifilename As String = Application.StartupPath & pathA    '讀檔檔名位置

    Public Sub renew()

        GetPrivateProfileString("City", "City_1", "", sKeyValue, nSize, Application.StartupPath & pathA)
        Label1.Text = sKeyValue.ToString
        GetPrivateProfileString("City", "City_2", "", sKeyValue, nSize, Application.StartupPath & pathA)
        Label2.Text = sKeyValue.ToString
        GetPrivateProfileString("City", "City_3", "", sKeyValue, nSize, Application.StartupPath & pathA)
        Label3.Text = sKeyValue.ToString
        GetPrivateProfileString("City", "City_4", "", sKeyValue, nSize, Application.StartupPath & pathA)
        Label4.Text = sKeyValue.ToString
        GetPrivateProfileString("City", "City_5", "", sKeyValue, nSize, Application.StartupPath & pathA)
        Label5.Text = sKeyValue.ToString

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        pathA = "\\test.CHT"
        Call renew()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        pathA = "\\test.ENG"
        Call renew()
    End Sub
End Class


 



2012年1月12日 星期四

VB.Net-如何以程式設計方式隱藏及取消隱藏 Windows 工作列(分享)

網路上找到的可以消除工作列的一種方式


Dim handleW1 As Long

Private Declare Function FindWindowA Lib "user32" _
   (ByVal lpClassName As String, _
   ByVal lpWindowName As String) As Long

Private Declare Function SetWindowPos Lib "user32" _
   (ByVal handleW1 As Long, _
   ByVal handleW1InsertWhere As Long, ByVal w As Long, _
   ByVal x As Long, ByVal y As Long, ByVal z As Long, _
   ByVal wFlags As Long) As Long

Const TOGGLE_HIDEWINDOW = &H80
Const TOGGLE_UNHIDEWINDOW = &H40

Function HideTaskbar()
   handleW1 = FindWindowA("Shell_traywnd", "")
   Call SetWindowPos(handleW1, 0, 0, 0, 0, 0, TOGGLE_HIDEWINDOW)
End Function

Function UnhideTaskbar()
   Call SetWindowPos(handleW1, 0, 0, 0, 0, 0, TOGGLE_UNHIDEWINDOW)
End Function


VB.Net-Picturebox執行時直接顯示文字

要在Picturebox上顯示文字
使用方式很簡單
先把Picturebox背景指定給圖像
如此就依照Picturebox的背景進行寫字
之後把這圖像產生畫布
在上面寫字即可
最後用DrawString函式
在畫布寫完字後在指定給PictureBox


Dim bmp1 = New Bitmap(PictureBox1.Width, PictureBox1.Height)   '產生圖像
bmp1 = PictureBox1.BackgroundImage
Dim g1 = Graphics.FromImage(bmp1) '產生畫布
Dim mycolor1 As New SolidBrush(Color.FromArgb(20, 20, 20))   '定義字體顏色
g1.DrawString("機械座標", New Font("Microsoft JhengHei", 16, FontStyle.Regular), mycolor1, 5, 7) '畫布寫上字串
PictureBox1.BackgroundImage = bmp1    'PictureBox1.Image指定該圖像

BCB中Indy元件問題

Borland C++Builder (BCB) 6.0 是一套非常優秀的 RAD形式的視窗程式設計語言。BCB6.0中有內建Indy元件,他可以讓你更快速撰寫網路程式元件。假設你要用HTTP去Get一個頁面或是IP Cam影像,以及去Post一個網頁動作,可以透過IdHTTP來進行動作。如果是想要發一個TCP封包,都可以用IdTCPClient去發。這些元件都幫我們把底層的事情做掉了,讓我們可以很容易的設計出想要的網路程式功能。而網路上很多文章提及使用BCB6.0的Indy工具時,會發現BUG非常多!而最常見的就是程式卡死,因此必須更新Indy元件的版本。


目前被認為較穩定的版本為9.011,下面為下載網址:http://www.indyproject.org/Sockets/Download/Files/Indy9.EN.aspx

接著按照步驟執行
(1)移除 BCB6 中原本的 Indy
(1.1)放入原本安裝 BCB6 的光碟片,選擇「C++ Builder 6」
(1.2)在 Borland C++ Builder 6 Enterprise Edition - Installation Wizard 中,按「Next」
(1.3)在「Program Maintenance」Dialog 中,選擇「Modify」然後按「Next」
(1.4)在「Custom Setup」Dialog 中,點選「Program Files/Indy」節點,並選擇「Do not Install」然後按「Next」
(1.5)剩下的步驟都按「Next」就可以將 BCB6 中原本的 Indy 給移除了

(2)安裝新版本的 Indy (9.0.11)
(2.1)將下載的檔案 IndyWin32_9_00_11_Src.zip 解壓縮至目錄 C:\Indy (解壓縮後會多一個子目錄 C:\Indy\Source)
(2.2)執行檔案 C:\Indy\Source\Fullc6.bat (Command line)
(2.3)執行完成以後,會多一個子目錄 C:\Indy\C6

(3)在 BCB6 中設定新版本的 Indy (9.0.11)
(3.1)開啟 C++ Builder 6.0 (在開啟的過程中會出現連結不到 Indy Lib 的提示 Dialog,選擇 Yes 跳過)
(3.2)在 BCB6 中選擇「Tools/Environment Options」
(3.3)在「Environment Options」Dialog 中,選擇「Library」Tab
(3.4)在「Library Path」欄位中加入字串「;C:\Indy\C6」,然後按「OK」Button
(3.5)在 BCB6 中選擇「Project/Options」
(3.6)在「Project Options」Dialog 中,選擇「Packages」Tab
(3.7)按「Add」Button,並將檔案指向 C:\Indy\C6\dclIndy60.bpl
(3.8)在「Project Options」Dialog 中,選擇「Directories/Conditionals」Tab
(3.9)在「Include Path」及「Library Path」兩個欄位的最前面,分別加入字串「C:\Indy\C6;」(3.10)在「Project Options」Dialog 中,將左下角的「Default」打勾,然後按「OK」Button
(3.11)把 BCB6 關閉,然後重新開啟,如果不會出現(3.1)中的 Dialog 的話,就代表已經設定成功

按照上述的步驟在Win XP底下的確可以用,但在Win7 64bit底下則會卡在3.7步驟,且問出現下列訊息


網路上爬了很多文,但都沒有好的解決方式,而我想到較快解決的方法也是最笨的方法,直接裝VM,並且在VM底下再安裝一個XP應該就可以避免這個問題了。

而這問題若要直接在Win7 64bit底下安裝則要把indy60.bpl  拷備至 C:\Windows\SysWOW64 下。接著在執行3.7步驟 到 component->install package 裡,把indy再選上,並在左下角default 打勾,其餘步驟相同。

Ubuntu Linux-如何使用root登入

設置root密碼

$ sudo passwd root
登入root$ sudo -s
此時會讓你輸入root

密碼輸入完即登入root

Vb.Net 讀取ini檔

Vb.Net 讀取ini檔範例
首先建立ini檔案

[City]
City_1=台北
City_2=台中
City_3=高雄

[food]
food_1=米
food_2=水果
food_3=大麥

[goods]
goods_1=汽車
goods_2=貨輪
goods_3=飛機

範例程式如下:(VB2005)
Imports System.Text
Imports System.Runtime.InteropServices

Public Class Form1

    '2.宣告方法:
        '* lpAppName:指向包含Section 名稱的字符串地址
        '* lpKeyName:指向包含Key 名稱的字符串地址
        '* lpDefault:如果Key 值沒有找到,缺省返回缺省的字符串
        '* lpReturnedString:用於保存返回字符串的緩衝區
        '* nSize: 緩衝區的長度
        '* lpFileName :ini 文件的文件名
    Public Declare Function GetPrivateProfileString Lib "kernel32" _
     Alias "GetPrivateProfileStringA" ( _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpApplicationName As String, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpKeyName As String, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpDefault As String, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpReturnedString As StringBuilder, _
     ByVal nSize As UInt32, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpFileName As String) As UInt32
    Public Declare Function WritePrivateProfileString Lib "kernel32" _
     Alias "WritePrivateProfileStringA" ( _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpApplicationName As String, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpKeyName As String, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpReturnedString As StringBuilder, _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpFileName As String) As UInt32

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


        '3.使用方式:
        '讀出ini檔,區段裡的值:
        Dim sKeyValue As New StringBuilder(1024)
        Dim nSize As UInt32 = Convert.ToUInt32(1024)
        Dim sinifilename As String = Application.StartupPath & "\\test.ini"
        '參數一 Section Name
        '參數二 於.ini中的項目
        '參數三 項目的內容
        '參數四 .ini檔的名稱
        '參數五 大小
        '參數六 路徑
        GetPrivateProfileString("City", "City_1", "", sKeyValue, nSize, sinifilename)
        Label1.Text = sKeyValue.ToString

        GetPrivateProfileString("City", "City_2", "", sKeyValue, nSize, sinifilename)
        Label2.Text = sKeyValue.ToString

        GetPrivateProfileString("City", "City_3", "", sKeyValue, nSize, sinifilename)
        Label3.Text = sKeyValue.ToString

        GetPrivateProfileString("food", "food_1", "", sKeyValue, nSize, sinifilename)
        Label4.Text = sKeyValue.ToString

        GetPrivateProfileString("food", "food_2", "", sKeyValue, nSize, sinifilename)
        Label5.Text = sKeyValue.ToString

        GetPrivateProfileString("food", "food_3", "", sKeyValue, nSize, sinifilename)
        Label6.Text = sKeyValue.ToString



        GetPrivateProfileString("goods", "goods_2", "", sKeyValue, nSize, sinifilename)
        'Label8.Text = sKeyValue.ToString

        GetPrivateProfileString("goods", "goods_3", "", sKeyValue, nSize, sinifilename)
        'Label9.Text = sKeyValue.ToString
    End Sub


    Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        Dim sKeyValue As New StringBuilder(1024)
        Dim nSize As UInt32 = Convert.ToUInt32(1024)
        Dim sinifilename As String = Application.StartupPath & "\\test.ini"

        GetPrivateProfileString("goods", "goods_1", "", sKeyValue, nSize, sinifilename)
        'Label7.Text = sKeyValue.ToString

        Dim drawstring1 = "F1"
        Dim drawstring2 = sKeyValue.ToString
        Dim x1 = 0, y1 = 0, x2 = 8, y2 = 15    '定義字體左上角位置
        Dim drawfont1 As New Font("Helvetica", 11, FontStyle.Bold)    '定義字型
        Dim drawfont2 As New Font("Microsoft JhengHei", 13, FontStyle.Bold)    '定義字型

        PictureBox1.BackColor = Color.FromArgb(0, 136, 254)
        Dim mycolor1 As New SolidBrush(Color.FromArgb(255, 255, 255))    '定義字體顏色
        Dim mycolor2 As New SolidBrush(Color.FromArgb(255, 255, 255))    '定義字體顏色
        e.Graphics.DrawString(drawstring1, drawfont1, mycolor1, x1, y1)
        e.Graphics.DrawString(drawstring2, drawfont2, mycolor2, x2, y2)
    End Sub

    Private Sub PictureBox2_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox2.Paint
        Dim sKeyValue As New StringBuilder(1024)
        Dim nSize As UInt32 = Convert.ToUInt32(1024)
        Dim sinifilename As String = Application.StartupPath & "\\test.ini"

        GetPrivateProfileString("goods", "goods_2", "", sKeyValue, nSize, sinifilename)
        'Label7.Text = sKeyValue.ToString

        Dim drawstring1 = "F2"
        Dim drawstring2 = sKeyValue.ToString
        Dim x1 = 0, y1 = 0, x2 = 8, y2 = 15    '定義字體左上角位置
        Dim drawfont1 As New Font("Helvetica", 11, FontStyle.Bold)    '定義字型
        Dim drawfont2 As New Font("Microsoft JhengHei", 13, FontStyle.Bold)    '定義字型

        PictureBox2.BackColor = Color.FromArgb(0, 136, 254)
        Dim mycolor1 As New SolidBrush(Color.FromArgb(255, 255, 255))    '定義字體顏色
        Dim mycolor2 As New SolidBrush(Color.FromArgb(255, 255, 255))    '定義字體顏色
        e.Graphics.DrawString(drawstring1, drawfont1, mycolor1, x1, y1)
        e.Graphics.DrawString(drawstring2, drawfont2, mycolor2, x2, y2)
    End Sub

    Private Sub PictureBox3_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox3.Paint
        Dim sKeyValue As New StringBuilder(1024)
        Dim nSize As UInt32 = Convert.ToUInt32(1024)
        Dim sinifilename As String = Application.StartupPath & "\\test.ini"

        GetPrivateProfileString("goods", "goods_3", "", sKeyValue, nSize, sinifilename)
        'Label7.Text = sKeyValue.ToString

        Dim drawstring1 = "F3"
        Dim drawstring2 = sKeyValue.ToString
        Dim x1 = 0, y1 = 0, x2 = 8, y2 = 15    '定義字體左上角位置
        Dim drawfont1 As New Font("Helvetica", 11, FontStyle.Bold)    '定義字型
        Dim drawfont2 As New Font("Microsoft JhengHei", 13, FontStyle.Bold)    '定義字型

        PictureBox3.BackColor = Color.FromArgb(0, 136, 254)
        Dim mycolor1 As New SolidBrush(Color.FromArgb(255, 255, 255))    '定義字體顏色
        Dim mycolor2 As New SolidBrush(Color.FromArgb(255, 255, 255))    '定義字體顏色
        e.Graphics.DrawString(drawstring1, drawfont1, mycolor1, x1, y1)
        e.Graphics.DrawString(drawstring2, drawfont2, mycolor2, x2, y2)
    End Sub

End Class