返回列表 发布新帖
楼主: 张硕御月

电脑基础知识大全

 楼主| 发表于 2011-10-31 14:57:20 | 查看全部
76,Q:怎样在 VC++ 中产生闪烁的光标
A:先调用函数 CreateCaret(),然后再调用函数 ShowCaret()。例如:
  if(CreateCaret(hWnd,NULL,2,20))
{
  SetCaretPos(0,0);
 ShowCaret(hWnd);
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-10-31 14:57:28 | 查看全部
77,Q:VFP 程序编译成 .EXE 文件后运行,为在什么屏幕上一闪而过就结束了?
A:这是初学 VFP 的人易犯的一个错误,只要在主文件中加入 read events 语句,在退出程序中加入 clear events 即可。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-10-31 14:57:36 | 查看全部
78,Q:VB 中如何在保存并覆盖文件时让其出现对话框,询问是否替换
A:用 CommonDailog 控件,在 CommonDialog 控件 Flags 属性设定中添加
cdlOFNOverwritePrompt,如:
CommonDialog1.Flags=CommonDialog1.Flags Or cdlOFNOverwritePrompt
  CommonDialog1.ShowSave
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-10-31 14:57:43 | 查看全部
79,Q:VB6 中的字体出现乱码怎么办?
A:这是 VB 的 Bug。引起的原因是系统中安装了 Word2000 或 IE5.x 以及繁体支持,将繁体支持删除,或者安装 VB6 的 SP3 或
SP4 就可以解决问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-10-31 14:58:00 | 查看全部
80,Q:怎样用 VB 编写多线程程序
A:尽管 VB5.0 是单线程的,但用 addressof 加上一些 API 函数,就可以非常容易的做多线程程序。每一个线程约占用 20
毫秒的时间片。
VB5 有一个主线程,我们可以另外加一个工作线程。对于不清楚什么是单/多线程的程序员,我们用一个简单的列子来说明一下:
在 Form 里加上两个 timer 控件,把 interval 属性设成 5000(5秒),然后在两个 timer1_timer 事件中放一个大 Loop,如
for 10000 next, 运行。你会看到第二个 timer 控件不会在五秒后执行,除非 timer1 的for-next
结束。同样,如果你的程序中有大量的数据库读写,你的用户界面可能被“冻”。这时,我们就需要用多线程来改进程序了。(当然你可以用 DoEvents 来避免被冻,但用
DoEvents 有很多副作用-这里不提。)
我们用的第一个 API 是 CreateThread,VB 的格式是:
private declare function CreateThread Lib "kernel32" (byval
pThreadAttributes as any, byval dwStackSize as long, byval lpStartAddress as
long, lpParameter as any, byval dwCreationFlags as long, lpThreadID as long) as
long
CreateThread 的参数指出你将要创立的线程是什么样子的,CreateThread 的返回值是一个线程的 handle。以下是
VB 的多线程初始化程序:
  Public Sub Initialize(lpfnBasFunc as long)
  dim dwStackSize as long
  dim dwCreationFlags as long
  dim lpThreadId as long
  dim lpParameter as long
  dim myNull as long
  myNull = 0& 'create a null pointer
  dwStackSize = 0 '0 表示用 exe stack size
  dwCreationFlags = 4 '用 4 表示初始化后先不激活,让别人来激活
  Me.Thread = CreateThread(myNull, dwStackSize, lpfnBasFunc, myNull,
dwCreationFlags,lpThreadId)
  If Me.Thread = myNull then
  Msgbox "create thread failed"
  End if
  End Sub
下面是两个 API 用来激活/暂停该线程:
  private declare function ResumeThread lib "kernel32"(byval hThread as
long)as long
  private declare function SuspendThread lib "kernel32"(byval hThread as
long)as long
让我们来用一个变量表示当前线程的状态:
  public ThreadStatus as boolean
在 VB 里,可用 property 来实现 ThreadStatus 的管理。
  Public property Let Enabled(byval vNewValue as boolean)
  if vNewValue = true and Me.ThreadStatus = false then
  ResumeThread Me.Thread
  Me.ThreadStatus = True
  elseif Me.ThreadStatus = true then
  SuspendThread Me.Thread
  Me.ThreadStatus = False
  end if
  End Property
这个简单的类可以用 New Object 来引用:
  'make new thread object
  dim myThread as New clsThreads '创建县城 Foo
  myThread.Initialize AddressOf Foo '激活县城
  myThread.Enabled = True
执行后,你可以用 PVIEW95.EXE 看到你的线程。你还可以提高你的线程的优先级:
  SetThreadPriority '设优先级
  GetThreadPriority '查优先级
你把以上的程序加入 timer 例子,就会看到两个 timer 同时运行。
这里要提醒一下,VB5 的开发环境是单线程的,如果你的程序写错,或中断后试图恢复,往往会出错,有时是严重出错。总之,用 VB 的多线程可以写出和
VC++ 一样快的程序,而且开发容易的多,开发效率也快得多。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-10-31 14:58:09 | 查看全部
81,Q:加快 Delphi5.0 启动速度
Aelphi5.0 的启动确实有点慢,既要显示快闪窗口,又要读注册表设置,对于配置低的机器简直是一种折磨,实际上我们可以通过启动参数来控制它:
建立一个快捷方式,目标为:C:\\DELPHI5\\Delphi5\\Bin\\delphi32.exe /ns /np (假设 delphi 装在C:\\delphi5
目录下),ns 表示 no splash,即不显示快闪屏幕,np 表示 no project,即不加载工程。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-10-31 14:58:21 | 查看全部
82,Q:观察 Delphi5.0 内存堆分配情况:
A:建立一快捷方式,目标为:C:\\DELPHI5\\Delphi5\\Bin\\delphi32.exe /hm /hv
此后每启动此快捷方式就可看到 Delphi5.0 的标题栏上不停变化的堆分配字节数。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-10-31 14:58:30 | 查看全部
83,Qelphi 中如何在打印或打印预览前获取报表页数
A:有时需要在打印前获取报表的打印页数,比如我们需要在页眉或页脚中打印“共 xx 页 第 xx 页”,如何实现呢?QuickReport 生成
Report 之前,我们是无法得知报表页数的,而 QuickReport
是在打印或打印预览时才生成报表,换言之我们只有在打印或打印预览前先将报表生成一次才能获取打印页数。生成报表的方法是 Prepare,请参考以下的例子:
...
var nPageCount:integer;
begin
  {...}
  QuickRep1.Prepare;
  nPageCount:=QuickRep1.QRPrinter.PageCount;
  QuickRep1.QRPrinter.Free;
  QuickRep1.QRPrinter:=nil;
  {在此修改QuickRep1,实现在页眉或页脚中打印“共 xx 页 第 xx 页” ... }
  QuickRep1.PreView;
  {...}
End;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-10-31 14:58:43 | 查看全部
84,Q:如何在 Delphi 中实现普通文件的拷贝?
A:示例代码如下:
procedure TForm1.btnCopyClick(Sender: TObject);
var
sfile,dfile : String;
begin
sfile :='a.txt'; //被copy的文件
dfile :='b.txt'; //copy后的文件名
CopyFile(pchar(sfile),pchar(dfile),false);
第三个参数为 false,如果 b.txt 已经存在,则覆盖;如果为 true,则不进行操作。
85,Q:用 Delphi 编写支持多国语言的程序
A:使用 Delphi5.0 的 Integrated Translation Environment(ITE) 可以轻易完成这个工作。
创建一个示意性的工程 MultiLanguage,在 Form 上放一个 Label 和一个 Button,分别把 Caption
赋值为“English Label”和“English Button”。
选择菜单 Project|anguages|Add ...,Delphi 显示 Add Languages 对话框, 选择 Next。
从语言列表中选中“英语(美国)”和“中文(中国)”,选择 Next。
ITE 会根据所选的语言创建子目录,目录名称是语言的缩写,选择 Next。
第一次增加语言时,Update Mode 为 Create new, 选择 Next。选择 Finish。
Delphi 会自动创建支持不同语言的资源动态库。Delphi 还会自动创建一个工程组,其中包括原有的
MultiLanguages.EXE,还包括新建的两个资源动态库(MultiLanguages.enu,MultiLanguages.chs)。保存工程组。
Delphi 启动 Translation
Manager,左边是需要翻译的语言,右边是完成百分比。选择“中文(中国)”|Forms|Unit1,在右边第 15 行和 20
行填写翻译后的中文。保存并关闭。
打开 Project Manager,编译 MultiLanguages.enu 和 MultiLanguages.chs,Delphi
会在相应的子目录生成资源动态库,但后缀不是 DLL 而是 ENU 和 CHS。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-10-31 14:58:53 | 查看全部
86,Q:在 SQL Server 中怎么样恢复数据的存储?
A:在 SQL Server 中提供了这种恢复方式的存储过程。
一个数据库包括两个文件,mdf 数据库文件和 ldf 日志文件
1.sp_attach_db [@dbname =] 'dbname',[@filename1 =] 'filename_n'
给系统添加一个数据库,在 dbname 指定数据库名称,filename_n 指定数据库的文件和日志文件。比如我有一个 ji 的库,停止SQL
Server 服务备份 ji_data.mdf,ji_log.ldf,启动SQL server,删除掉这个库,然后再把这两个文件拷到 sql
server DATA 目录中,在 Query Analyzer 中执行如下语句:
EXEC sp_attach_db @dbname = N'ji',
@filename1 = N'd:\\mssql7\\data\\ji_data.mdf',
@filename2 = N'd:\\mssql7\\data\\ji_log.ldf'
就会把这个库加入到 SQL Server Group 中。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关注公众号
QQ会员群

Copyright © 2021-2025 中企互动平台 版权所有 All Rights Reserved.

相关侵权、举报、投诉及建议等,请发 E-mail:bztdxxl@vip.sina.com

Powered by Discuz! X3.5|京ICP备10020731号-1|京公网安备 11010102001080号

关灯 在本版发帖
扫一扫添加管理员微信
返回顶部
快速回复 返回顶部 返回列表