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);
p
.
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系统中需要修改程序中注册表中的相
应键值。
(作者:华云)
发布评论