编程俱乐部(2)

软件世界

VB

一、如何将图片存入数据库,如何用Picture控件显示出来?

我编过一个文件库,用的是Access2000,实现过程:先将图片读入字节数组,然后将数组的内容写入数据库。需要注意的是:存放图片的字段必须为OLE类型。关键代码如下:
读入数组:
Dim bit() as byte 'bit()为字节数组
Open dlg1.filename for binary as #1
Redim bit(Lof(1)) as byte
Get 1,1,bit
Close 1
存入数据库:
rs.addnew
rs("字段名").appendChunk bit rs.update
读图的方法有两种,一是用二进制将图片写入文件,再用LoadPicture函数读出,二是用Picture控件绑定在一个Data控件上,这样直接就能读出。

二、如何判断文本框字符是数字还是字母?

利用IsNumeric函数制作一个小程序,如下:
Dim I As Long, ShortString As String
For I = 1 To Len(Text1.Text)
ShortString = Mid(Text1.Text, I, 1)
Debug.Print "[" & ShortString & "]" & _
IIf(IsNumeric(ShortString), "是", "不是") & _
"数字"
Next

三、如何取得并显示系统的所有字体和系统中所安装的打印机?

使用Screen对象可获得系统所有字体。
For I = 0 To Screen.FontCount - 1
Combo1.AddItem Screen.Fonts(I)
Next
使用Printers集合则可以获得当前安装的打印机集合。
For I=0 to Printers.count -1
Combo1.Additem Printers(i).DeviceName
Next
Combo1.Text=Printer.DeviceName '当前打印机

四、如何将文件丢到“回收站”?

将文件丢到回收站,须调用SHFileOperation API函数。这一函数除了可以用来删除文件(包括完全删除或丢到回收站)外,还可用来复制、移动或更名文件。如下例将“c:\myfile.txt”丢到回收站。
Dim SHFileOp as SHFILEOPSTRUCT
SHFileOp.wFunc=FO_DELETE
SHFILE.pFrom="c:\myfile.txt"+chr(0)
SHFileOp.fFlags=FOF_ALLOWUNDO+FOF_NOCONFIRMATION
SHFileOperation SHFileOp
其中参数Wfuncs可取以下值:FO_MOVE(=&H1移动),FO_COPY(=&H2复制),FO_DELETE(=&H3删除),FO_RENAME(=&H4更名)。

五、如何关闭Windows98/95系统?

可以调用ExitWindowsEx API函数。其定义语句及参数为:
Private Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
UFlags 取以下值:EWX_LOGOFF=0 注销,EWX_SHUTDOWN=1 关机,EWX_REBOOT =2重启,EWX_FORCE=4 强制关机。
DwReserved 为系统保留参数,填入0即可。所以,重启计算机可以用下列代码完成:
ExitWindowsEx EWX_REBOOT,0

六、如何启动Windows预设的执行程序打开某一文件?

利用Shell虽然可以打开某一文件,如“Shell Notepad c:\myfile.txt”,但必然要指明执行文件。如果像资源管理器一样,直接双击便可以用预设程序打开,这需要调用ShellExecute API函数。定义为:Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
其中参数lpOperation为以何种方式打开文件,预设则为vbNullString, lpFile为欲操作文件完整路径。如用记事本打开c:\myfile.txt
ShellExecute 0,vbNullString,"c:\myfile.txt","","",vbNormalFocus

Delphi

一、Delphi怎样调用外部EXE文件?

我想在Delphi程序中调用外部的EXE文件,比如Windows中的邮件发送程序,如何实现?
Delphi中可以通过WinExec()和ShellExecute()这两个API函数。这两个函数在Delphi中可以找到它们的帮助信息,比如:
ShellExecute(handle,nil,pchar('mailto:kingstone@21cn.com.cn'),nil,nil,sw_shownormal);
可以调用Outlook Express给kingstone@21cn.com.cn地址发送邮件。

二、用提示音提醒用户。

我想在应用程序关键操作处用声音提醒用户,如何实现?
Delphi提供messagebeep()这个API函数,可以通过调用这个API函数提醒用户,如:
messagebeep(MB_OK); →发出“咚”声提醒用户;
messagebeep(MB_ICONQUESTION); →发出“当”声提醒用户等。

三、格化数值输出。

像123456789这种很长的数字不太容易读,能不能像Excel的“千位分隔”那样把数字隔开成:123,456,789?
Delphi提供了FormatFloat()函数,可以格式化输出数值,如:
label1.Caption:=FormatFloat('#,##',123456789);

四、Clientheight和Height、Clientwidth和Width区别。

很多控件都有Clientheight、Height、Clientwidth和Width属性,用于表示控件的高度和宽度,它们之间有什么区别吗?
对于一般的控件而言,Height就是Clientheight,Width就是Clientwidth;而对于表单(Form)而言,Height是包括标题栏在内的高度,而Clientheight是指表单客户区的高度。同理,Clientwidth是指定表单客户区的宽度。

五、如何自动Login数据库?

我的程序用到了数据库,不想把数据库完全公开给客户,于是设置了密码。那么如何实现自动Login呢?
Delphi中,有Database控件和对象,Database对象有属性【Params】和【LoginPrompt】,通过使用这两个属性就会自动Login数据库。如:
Database1.Connected:=False;
Database1.Params.Values['USERNAME']:='SYSDBA';
Database1.Params.Values['PASSWORD']:='masterkey';
Database1.LoginPrompt:=False;
Database1.DatabaseName:='MYDB';
Table1.DatabaseName:='MYDB';
Table1.TableName:='Salary';
Table1.Open;