2024年6月9日发(作者:)

…… 

TR0UBIESH00TI_B0FPR0GR^啊………一一……………… ………………………………………………… 

属性设置为对应的字段名,如图6所示。 

图6设置控件的DataSource和DataField属性 

经过这样安排,以OLE类型存放的图片fbmp文件)作为 

表的字段随记录的定位而显示,如图7所示。 

图7显示字段内容 

(3)形成bmp文件 

如果要考虑将数据库表中的图片取出,在其他场合使用 

(例如嵌入报表),而不仅仅是显示在应用界面上,则需要将该 

OLE字段的数据取出,并存人bmp文件。 

(1)定义一个不定长Byte型数组。 

(2)将OLE型字段内容送该数组。例如: 

MyData=ftd.GetChunk(0,ColSize) 

上述语句中,MyData 0是一Byte型数组:fld是定义为 

Field的参数,是数据库表的指定字段:而GetChunk则是Field 

的方法,用于送出该字段的数据f可分段送),其第一个参数表 

示偏移量,从头开始送时偏移量为0;第二个参数表示本次送 

出的字节数。 

可先用语句ColSize=fld.FieldSize 0得到字段的总长度 

ColSize,再一次将字段数据读到Byte数组中。 

更简便的方法是直接将字段赋值: 

MyData=fld.Value 

同样将OLE字段送到Byte数组。 

(3)将Byte数组写人文件。 

DestFileNum=FreeFile 

Open DiskFlle For Binary As DestFileNum 

Put DestFileNum.,MyData 

Close DestFileNum 

上述程序中.DestFileNum为文件号. 

为输出文件名.带“.bmp”后缀。 

以上流程许多文章都有介绍,细节大同小异。 

但对于bmp文件.该流程虽然能正常生成文件,且文件 

长度也看不出什么异常,但双击生成的文件后,图片和传真查 

看器始终显示“不能预览”.没有任何图形出现。 

将图形文件以记事本方式打开,并比较原始f能正常显示 

的)文件和生成的文件,发现,Access在接收了bmp文件后, 

在文件头上增加了若干字节f图8下,黑线划出部分1。这可能 

是用于对不同类型的0IJE对象进行区分.或用于其他目的, 

这个现象其实也有其他人在网上提到过。 

图8上:原始bmp文件:下:经“插入对象”操作后的文件 

显然,如果将文件头前多余的字节去掉,就可能恢复正 

常。经试验,在Byte数组写文件前,增加以下程序: 

ReDim MyData l(ColSize) 

将拷贝出的数据切除头上多余的一段 

For =74 To UBound(MyData) 

MyData1《I一74)=MyData(i) 

Next i 

然后将写文件的语句改为: 

Put DestFileNum,,MyData 1 

生成的bmp文件与原始文件完全一致,因而能正常显示 

了。 

(作者:冯诗齐) 

怎样采用DeIDhi编程轻松实现控制IE地址栏中的网址 

o IE是目前使用最广的浏览器。用户浏览网页时,IE会 

将已访问过的网站地址保存在IE的地址栏中,为用户下次访 

问同一网站时免去输入一长串网址之麻烦。这样做果然很好, 

但由于其地址栏中的网址为只读属性,用户不能自由更改。随 

着时间的推移,地址栏中的记录也越来越多,而且是无序排 

列,显得杂乱无章,查找网址非常不便。虽然IE提供的删除 

浏览的历史记录的功能可以一次性清除IE地址栏中的网址. 

…~………………………………………………… … 

实用第一 智慧密集 

但无法保留想要的网址。有些软件,如360安全卫士就提供了 

有选择的清除IE地址栏中网址的功能。下面介绍用Delphi编 

程控制IE地址栏中网址的方法。 

I1)原理 

IE地址栏中的网址存储在注册表中.点击“开始” 选择 

“运行”,在“运行”中键入“regedit”,运行注册表编辑器, 

逐级展开到“HKEY CURRENT USER\Software\Microsoft ̄Inter— 

net Explorer\TypedURLs”,下面保存着本台机器IE浏览器地址 

栏下保存的网址.以笔者的电脑为例,如图1所示。 

;冀降∞黼 蠢l∞ 镰走 鳓棼 

l 0 sw㈣ …

r 

… 

H潮鳅“) 

; 

赫 

i 

撼《杀锄[) 

l} … …nt 鸯 鞠 l1 :辫 嚣 { ,如t k…mt Ⅲ 

{ 矗圈嘲 

{l m 。抽 

图1 注册表中保存的IE地址栏信息 

其中的urli—url3即为注册表中保存的IE地址栏信息.只 

要删除相应的键即可清除相应的网址。在Delphi中提供了 

TRegistry类,可以对Windows中的注册表进行读写等相关操 

作。冈此通过Delphi编程操作注册表,即可轻松控制IE地址 

栏中的网址。 

(2)界面设计 

进入Delphi.选择“标准EXE”新建一工程,在窗体上加入 

七个命令按钮bitbtnl-bitbtn7,其caption属性分别设置为“全 

选”, “反选”, “删除所选”, “转到…”, “上移”、“下移”、 

“重新排序”,再加入一个ehecklistbox,两个标签控件,其中 

labell的caption属性设置为“当前IE地址栏中共有:”,label2 

用来显示列表框中的条数。设计完成后运行的界面如图2所示。 

图2程序运行界面 

(3)实现代码 

以下给出本程序的源代码 

unit Unit1 

nterface 

USeS 

毫蕾稿翟技巧与 

2O10.21 

簟 

Windows,Messages,SysUtils,Variants Classes,Graphics 

Controls Forms 

Dialogs Registry StdCtrls shellapi,Buttons,CheckLst; 

type 

TFOrm =class(TForm) 

CheckListBoxl:TCheckListBox; 

BitBtnl TBitBtn; 

BitBtn2:TBitBtn: 

BitBtn3:TBitBtn 

BitBtn4:TBitBtn: 

BitBtn5:TBitBt ̄; 

LabeI1:TLabel; 

Label2:TLabel: 

BitBtn6:TBitBtn; 

BIitBtn7:TBitBtn; 

pIrocedUre FormCreate(Sender:TObject); 

lprocedure BitBtnt Click(S ender:TObject); 

procedure BitBtn5Click(Sender:TObject); 

procedure B.tBt 2Cllck(Sende r=TObject); 

rocedure BitBtn3Click(Sender:TObject); 

procedure B-tBln4CIick(Sender:TObject); 

procedUre BitBtn6Click(Sender:TObject); 

procedure Blt8ln7CIick(Sender:TObject); 

pri vate 。 

{Private declarations) 

public 

{Public declarations) 

end; 

var 

FOm11:TForml: 

reg:Tregistyr;∥声明注册表类 

implementation 

{SR .dfm) 

procedure TForm1.FormCreate(Sender:TObject);//窗体初始 

ll恍 

var 

i:integer; 

tls:TStringlLi_st; 

begin 

reg:=Tregistry.Create; 

tls:=TStringList.Create; 

reg.RootKey:=HKEY

_

CURRENT

_

USER; 

checklistbox1.CleaI_: 

lfreg.OpenKey('SoftwareWlicrosofNntemet ExpIorer\Type- 

dURLs ,false)then 

begin 

Reg.GetValueNames(tls) 

for i:=0 to tls.Count一1 dO 

begin 

CheckListBOX1.Items.Add(reg。ReadString(tls,Strings[i])) 

end; 

label2.Caption:=inttostr(checklistbox1.Count)4- 条 : 

…… 

TROUBLESHOOTING叶PROGRAM…………………………………………………………… ………………一 

end; 

reg.CloseKey; 

reg.Free; 

end; 

procedure TForm1.BitBtnl Click(Sender:TObject);,/全选 

var 

I:integer:

begin 

for i:=O to checklistboxl。Count一1 do 

begin 

checklistbox1.checkedⅢ:=true: 

end 

end; 

procedure TForm1.BitBtn5Click{Sender:TObject);//1 ̄到所选 

网址 

b:egin 

begin 

if (checklistbox1.SelCount<>O)and(checklistbox1.Sel一 

Count<2)then 

SheflExecute(O, open , iexplore.exe,,pchar(checklistbox1. 

Items[checklistbox1.Itemlndex]), SW_SHOWNORMAL) 

else 

end; 

end; 

procedure TForm1.BitBtn2Click(Sender:TObject);// ̄选 

var 

integer: 

begin 

for j:=O to checklistbox1.Count一1 do 

begin 

checklistboxl。CheckedfI】:=not checkIistboxl。Checked【ll: 

end 

end; 

procedure TForm1.BitBtn3Click(Sender:TObject); 

//删除所选条目 

var 

Val:TStringList; 

i:integer; 

begin 

feg:=Treg stry.Create; 

Val:=TStringList.Create; 

reg.RootKey:=HKEY

CURRENT=USER 

if reg.OpenKey( SoftwarekMicrosoft\lnternet Explorer\Type- 

dU RLs",faIse)then 

begin 

Reg.GetValueNames(va1); 

for l:=checkI}stbOx1.items.Count一1 downto 0 do 

begin 

if checklistboxI.Checked[iJ then 

begin 

checklistbox1.Items.Delete(i); 

reg。DeleteValue(va1.Strings[i]); 

end; 

end 

end; 

reg;CloseKey; 

reg,Free; 

end; 

procedure TForml。BitBtn4Click(Sender:TObject); 

∥向上移动所选项目 

var 

I:Integer; 

begin 

=CheckListBox Itemlndex; 

if{i=一1)or(I=0)then Exit; 

CheckListBox1.Items.Move(i,i一1): 

CheckListBox1.Selected 一1】: True; 

end: 

procedure TForm1.B_tBtn6CIicI((Sender:TObject); 

//向下移动所选项目 

var 

_.Integer; 

begin 

:=CheckListBox1.ItemIndex; 

.f =一”or(i=CheckListBox1.Count一1)then Exit; 

CheckLlst8Ox1.1tems.Move(i,l+1): 

CheckL}stBox1.Selected[i+1】:=True; 

end: 

procedure TForm1.Bit8tn7C{ick(Sender:TObject); 

,/对lE地址栏重新排序 

vat。 

Val:TStringUst; 

i:integer; 

begin 

reg: ̄Tregistry。Create; 

VaI:=TStringList.Create; 

reg.RootKey:=HKEY—CURRENT_USER; 

if reg.OpenKey( Software\Microsoftklnternet ExpIorerkType- 

dURLs',false)then 

begin 

for i:=0 to checklistbox1.items.Count-1 do 

begin 

reg.WriteString(*url +inttostr(i+1),checklistbox1.Items[i】): 

end 

end: 

reg:C!oseKey: 

reg:Free; 

end; 

end. 

本程序在Delphi7企业版,中文Windows XP中运行通过。 

注:在其他Windows系统中需要修改程序中注册表中的相 

应键值。 

(作者:华云)