都有快两年没去了吧,当时在中软资源的时候,才呆了没几个月,就外派到紫竹去了,一呆就是一年,一年前又换到浦东的公司了,就更没有往那边去。
今天去了一下,金沙江路依然是那么堵,以前软件园边上没有盖好的楼也盖好了,咖啡厅也多了几个,KTV也有了,还有个什么娱乐城,总之没有以前那么荒凉了……
以前在学校的时候,从一个做数据库的同学那里知道下边的这个方法,结果后来忘掉那个扩展名是’udl’了,今天看到完美Excel的这篇文章,赶快转帖过来,以防止以后忘掉:)
最近,又复习了《Excel 2003 VBA Programmer’s Reference》关于数据库编程的章节,上面介绍了一种快速找到连接数据源的字符串的方法,介绍如下,供参考。
通常,在Excel VBA中要与外部数据库连接前,必须先建立与该数据源的连接,即要设置连接字符串,如下面的代码:
Dim strConnectString As String
strConnectString=” Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\FW\桌面\Northwind.mdb;Persist Security Info=False”
如果直接输入,将很麻烦且易出错。我们可以使用下面的方法:
步骤1 在桌面建立一个文本文件,并将其扩展名改为“udl”,如下图。
步骤2 双击该文件,出现“数据链接属性”对话框,如下图。
在“提供程序”选项卡的列表中选择希望连接的数据源,本例为“Microsoft Jet 4.0 OLE DB Provider”。
步骤3 然后,单击“下一步”按钮,如图所示,转到“连接”选项卡(不同的数据源此选项卡中的内容会有所不同)。
步骤4 单击“选择或输入数据库名称”文本框右侧的选择按钮,选择相应的数据库文件。单击“确定”按钮。
步骤5 在记事本中打开该文件,如下图。
其中,以Provider开头的两行即为连接字符串。我们可以将其直接复制到程序代码中。
转一本很好的书:http://www.yangyc.com/55fun/
转载自:http://soft.72pines.com/triivi/
拼音输入你用什么?智能ABC还是微软拼音?我还是坚持之前的选择:搜狗拼音输入法。随着它3.0正式版的推出,一些新的特性又陆续加入,不论从稳定性和功能上都大有进步,值得升级。但今天的“主角”不是搜狗,而是一个名叫Triivi的输入法,一个号称能让英文输入变得无比惬意的输入法。
软件安装程序有7.85M,要是完整安装的话要占用28M左右的空间,其实主要是词库文件比较大,不过可以按需所选:
启动后默认界面是英文,双击托盘处图标调出设置界面,把它变成中文吧:
是不是这样看起来亲切许多?再好好设置一下使其更符合我们的使用习惯,比如显示字体、大小、热键、单词库等等:
一切准备就绪,赶紧输入几句英文试试,首先是自动完成:

按动上下键,稍等片刻就能得到单词的中文翻译:

要是输错了还有相应提示:

Triivi是一款很智能的输入法,而且它还是开源免费的,与搜狗搭配使用,输遍中英不用愁。但它同样不完美:“获取更多专业词库”按钮点了没反应,只能自己到主页上找;在启用了搜狗或微软拼音状态下Triivi的英文输入无效。
如果你经常要跟英语打交道,那我建议装上这个软件试试,难道你不想体验惬意地输入英文是种什么感觉吗?^_^
我们有时候需要做一些很耗时间的操作,比如到网络上拿一些数据或者对很多数据进行运算处理,如果是在单线程的程序中,这些运算就会阻塞UI线程,现象就是UI不能响应用户的任何操作,不会刷新。这个时候用户很可能以为程序已经死掉,从而造成很差的用户体验。
解决方法:将很耗时间的运算和处理放在单独的一个线程中进行,UI操作不会受到影响,用户还可以进行其它操作(如果UI中有些操作依赖于当前的的处理,我们可以先将它灰掉,在处理线程结束后再使其可用。更好的是在UI的线程中放一个进度条,来告诉用户当前的处理进度)
在C#中做多线程的处理非常简单:
只需要用代理(Delegate)和跟代理相关的两个函数:
1. BeginInvoke 这个方法将代理指向的方法在一个单独的线程中调用
使用方法:
a. 声明一个代理的对象
b. 用这个代理对象调用BeginInvoke方法2. Control.Invoke 这个方法在当前UI的线程空间内调用代理所指向的方法
使用方法:
a. 声明一个代理对象
b. 调用控件的Invoke方法(一般在WinForm程序中,可以调用this.Invoke方法),将代理对象作为参数传递过去看代码:
1: private delegate void LoadPhotosDelegate(SearchParam param);2: private void LoadPhotosFromFlickr(SearchParam param)3: {4: UpdateUIDelegate updateUI = new UpdateUIDelegate(this.UpdataUI);5: this.Invoke(updateUI);6: }7:8: private delegate void UpdateUIDelegate();9: private void UpdataUI()10: {11: //进行UI的更新操作,比如更新进度条,显示图片等12: }13:14: private void SearchPhoto(SearchParam param)15: {16: LoadPhotosDelegate loadPhotos = new LoadPhotosDelegate(LoadPhotosFromFlickr);17: loadPhotos.BeginInvoke(param, null, null);18: }
看代码:
需要Reference下面的DLL:
System.Drawing
System.Windows.Forms
WindowBase
1: using System;
2: using System.Collections.Generic;
3: using System.Text;
4: using System.Windows;
5: using System.Windows.Forms;
6: using System.Drawing;
7: using System.Runtime.InteropServices;
8:
9: namespace ConsoleApplication1
10: {
11: class Program
12: {
13: [System.Runtime.InteropServices.DllImport("gdi32.dll")]
14: public static extern IntPtr CreateDC(string driver, string device, IntPtr res1, IntPtr res2);
15:
16: public enum TernaryRasterOperations
17: {
18: SRCCOPY = 0×00CC0020, /* dest = source*/
19: SRCPAINT = 0×00EE0086, /* dest = source OR dest*/
20: SRCAND = 0×008800C6, /* dest = source AND dest*/
21: SRCINVERT = 0×00660046, /* dest = source XOR dest*/
22: SRCERASE = 0×00440328, /* dest = source AND (NOT dest )*/
23: NOTSRCCOPY = 0×00330008, /* dest = (NOT source)*/
24: NOTSRCERASE = 0×001100A6, /* dest = (NOT src) AND (NOT dest) */
25: MERGECOPY = 0×00C000CA, /* dest = (source AND pattern)*/
26: MERGEPAINT = 0×00BB0226, /* dest = (NOT source) OR dest*/
27: PATCOPY = 0×00F00021, /* dest = pattern*/
28: PATPAINT = 0×00FB0A09, /* dest = DPSnoo*/
29: PATINVERT = 0×005A0049, /* dest = pattern XOR dest*/
30: DSTINVERT = 0×00550009, /* dest = (NOT dest)*/
31: BLACKNESS = 0×00000042, /* dest = BLACK*/
32: WHITENESS = 0×00FF0062, /* dest = WHITE*/
33: };
34:
35: [DllImport("gdi32.dll")]
36: public static extern bool BitBlt(IntPtr hObject, int nXDest, int nYDest, int nWidth,
37: int nHeight, IntPtr hObjSource, int nXSrc, int nYSrc, TernaryRasterOperations dwRop);
38:
39: public static void CaptureDesktop(string sPath)
40: {
41: Rect rect = new Rect();
42: rect.Width = Screen.PrimaryScreen.Bounds.Width;
43: rect.Height = Screen.PrimaryScreen.Bounds.Height;
44:
45: IntPtr dcTmp = CreateDC("DISPLAY", "DISPLAY", (IntPtr)null, (IntPtr)null);
46: Graphics gScreen = Graphics.FromHdc(dcTmp);
47: Bitmap image = new Bitmap((int)(rect.Width), (int)(rect.Height), System.Drawing.Imaging.PixelFormat.Format24bppRgb);
48: Graphics gImage = Graphics.FromImage(image);
49: IntPtr dcImage = gImage.GetHdc();
50: IntPtr dcScreen = gScreen.GetHdc();
51: BitBlt(dcImage, 0, 0, (int)(rect.Width), (int)(rect.Height), dcScreen, (int)(rect.Left), (int)(rect.Top), TernaryRasterOperations.SRCCOPY);
52: gScreen.ReleaseHdc(dcScreen);
53: gImage.ReleaseHdc(dcImage);
54:
55: image.Save(sPath);
56: }
57:
58: static void Main(string[] args)
59: {
60: CaptureDesktop("c:\\1.bmp");
61: }
62: }
63: }