var
ico: TIcon;
begin
opendialog1.Execute;
ico := TIcon.Create;
ico.Handle:=ExtractIcon(HInstance, PChar(opendialog1.FileName), 0);
ico.SaveToFile('c:\123.ico');
ico.Free;
end;
上面是保存下来,如果你显示在image组件上:
var
ico: TIcon;
begin
if opendialog1.Execute then
begin
Image1.picture.Assign(nil);
ico := TIcon.Create;
ico.Handle:=ExtractIcon(HInstance, PChar(opendialog1.FileName), 0);
DrawIcon(self.Image1.Canvas.Handle,33,33,ico.Handle);
ico.Free;
end;
end;
posted @
2009-01-14 00:22 小叶子 阅读(464) |
评论 (0) |
编辑 收藏
得到系统路径
var
s:pchar;
begin
getmem(s,100);
GetSystemDirectory(s,100) ;
showmessage(s);
end;
posted @
2009-01-13 19:42 小叶子 阅读(1463) |
评论 (0) |
编辑 收藏
判断一个可执行文件或DLL中是否有图标存在,并将其提取出来
function ExtractIcon; external shell32 name 'ExtractIconA';
返回integer;
posted @
2009-01-13 18:48 小叶子 阅读(417) |
评论 (0) |
编辑 收藏
function FileExists(const FileName: string): Boolean;
用于判断 文件 是否存在(使用时请带有文件后辍名)
function DirectoryExists(const Directory: string): Boolean;
用于判断 文件夹 是否存在
posted @
2009-01-13 18:42 小叶子 阅读(2740) |
评论 (0) |
编辑 收藏
forcedirectories和CreateDirectory都能创建文件
ForceDirectories可以创建多层目录.
如果你创建一个目录为c:\mymusic\music
如果你的C盘不存在一个叫mymusic的文件夹
的话程序会自动创建,函数执行的结果是,
创建了两个文件夹,mymusic和music,music为
mymusic的子文件夹.
CreateDirectory只能创建一个文件夹,如果
mymusic不存在,则反回创建music文件夹失败!
posted @
2009-01-13 18:37 小叶子 阅读(4427) |
评论 (1) |
编辑 收藏
返回指定文件的文件名及扩展名
var
s:string;
begin
s:=ExtractFileName('D:\Program Files\Borland\Delphi7\Projects\Unit1.dcu');
showmessage(s);\\显示:Unit1.dcu
end;
var
s:string;
begin
s:=ExtractFilepath('D:\Program Files\Borland\Delphi7\Projects\Unit1.dcu');
showmessage(s);\\显示:'D:\Program Files\Borland\Delphi7\Projects
end;
posted @
2009-01-13 18:34 小叶子 阅读(2966) |
评论 (0) |
编辑 收藏
函数说明 更改指定文件的扩展名,函数原型如下:
delphi中源码
function ChangeFileExt(const FileName, Extension: string): string;
var
I: Integer;
begin
I := LastDelimiter('.' + PathDelim + DriveDelim,Filename);
if (I = 0) or (FileName[I] <> '.') then I := MaxInt;
Result := Copy(FileName, 1, I - 1) + Extension;
end;
比如:
s:=changefileext('f:\123.txt','.ini');
showmessage(s);//f:\123.ini
posted @
2009-01-13 18:07 小叶子 阅读(3125) |
评论 (0) |
编辑 收藏
上节说了strings,而他去用tstringlist.creat去创建
TStringList是由TStrings派生,TStrings不能实例化,但TStringList却可以
一般Tstrings用作定义,TStringList用来实例化
var
tsList:TStrings;
begin
tsList:=TStringList.Create();
....
tsList.Free;//有时我们不去释放,但最好去释放
方法:add()
var
ps:strings;
ps:=tstringlist.creat;
ps.add('aaa bbb');
这里加的是'aaa bbb',还不是'aaa ' 和'bbb'
也就是ps.count=1,不是2
posted @
2009-01-08 18:56 小叶子 阅读(1516) |
评论 (0) |
编辑 收藏
TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的。
常规的用法大家都知道,现在来讨论它的一些高级的用法。
先把要讨论的几个属性列出来:
1、CommaText
2、Delimiter & DelimitedText
3、Names & Values & ValueFromIndex
先看第一个:CommaText。怎么用呢?用代码说话:
const
constr :String = 'aaa,bbb,ccc,ddd';
var
strs :TStrings;
i :Integer;
begin
strs := TStringList.Create;
strs.CommaText := constr;
for i := 0 to Strs.Count-1 do
ShowMessage(Strs[i]);
end;
执行了这段代码后,可以看到ShowMessage显示出来的分别是:aaa bbb ccc ddd。
也就是说,strs.CommaText := constr这一句的作用,就是把一个字符串以','为分割符,分段添加到TStrings中。
那么如果不是以','来分割,又该怎么做呢?现在看第二个例子。使用Delimiter和DelimitedText。
const
constr :String = 'aaa\bbb\ccc\ddd';
var
strs :TStrings;
i :Integer;
begin
strs := TStringList.Create;
strs.Delimiter := '\';
strs.DelimitedText := constr;
for i := 0 to Strs.Count-1 do
ShowMessage(Strs[i]);
end;
可以看到, 显示的效果和第一个例子是一模一样的。解释一下:
Delimiter为分隔符,默认为:','。DelimitedText就是按Delimiter为分隔符的一个串,得到赋值后回把这个字符串按Delimiter的字符添加到TStrings中。
说到这里,有想起一个属性,QuoteChar。其默认值为:'"'(不包括单引号)
有何用呢?看例子:
const
constr :String = '"aaa"\"bbb"\"ccc"\"ddd"';
var
strs :TStrings;
i :Integer;
begin
strs := TStringList.Create;
strs.Delimiter := '\';
strs.DelimitedText := constr;
for i := 0 to Strs.Count-1 do
ShowMessage(Strs[i]);
end;
显示出来的仍然是aaa bbb ccc ddd。为什么不是:"aaa" "bbb" "ccc" "ddd"呢?
再来看一个例子:
const
constr :String = '|aaa|\|bbb|\|ccc|\|ddd|';
var
strs :TStrings;
i :Integer;
begin
strs := TStringList.Create;
strs.Delimiter := '\';
strs.QuoteChar := '|';
strs.DelimitedText := constr;
for i := 0 to Strs.Count-1 do
ShowMessage(Strs[i]);
end;
显示出来的又是aaa bbb ccc ddd。对比一下,应该不难明白吧?这个就不多说了,用得也不多。
但是还要多说一句,当Delimiter为:','而QuoteChar为:'"'时,DelimitedText和CommaText是同等的。
最后要说的三个是:Names & Values & ValueFromIndex。
看看下面的代码:
const
constr :String = '0=aaa,1=bbb,2=ccc,3=ddd';
var
strs :TStrings;
i :Integer;
begin
strs := TStringList.Create;
strs.CommaText := constr;
for i := 0 to strs.Count-1 do
begin
ShowMessage(strs.Names[i]);
ShowMessage(strs.Values[strs.Names[i]]);
ShowMessage(strs.ValueFromIndex[i]);
end;
end;
通过这个例子不难看出:
这个时候strs中的内容是:
0=aaa
1=bbb
2=ccc
3=ddd
而Names中则是:
0
1
2
3
在Values中则是:
aaa
bbb
ccc
ddd
posted @
2009-01-08 18:49 小叶子 阅读(2593) |
评论 (0) |
编辑 收藏
引数:
1. Text:要显示的讯息
2. Caption:讯息视窗的标题列文字
3. Flags:讯息旗标
3.1. 可指定讯息视窗上的图示
3.2. 可指定讯息视窗出现的按钮
3.3. 可指定预设Focus在哪一个按钮
3.4. 可指定是否 Modal
3.5. 其他
引数说明:
Text、Caption 引数为 PCahr 型态,字串型态的变数可用 PChar()
转换,若直接传入一个字串的话,就不用转型。
例如:
var s: string;
....
s := '存档失败';
Application.MessageBox(PChar(s), '错误', MB_ICONERROR);
Flag 引数为 Longint 型态,可用的传入值有:
1. 指定讯息视窗上的图示
1.1 MB_ICONEXCLAMATION 或 MB_ICONWARNING
出现「黄三角形内有一个惊叹号」图示
1.2 MB_ICONINFORMATION 或 MB_ICONASTERISK
出现「白色椭圆内有一个蓝色小写 i」图示
1.3 MB_ICONQUESTION
出现「问号」图示
1.4 MB_ICONSTOP 或 MB_ICONERROR 或 MB_ICONHAND
出现「红色X」图示
2. 指定讯息视窗出现的按钮
2.1 MB_ABORTRETRYIGNORE
出现「Abort」「Retry」「Ignore」三个按钮
2.2 MB_OK
出现「Ok」按钮,为预设值。
2.3 MB_OKCANCEL
出现「Ok」「Cancel」两个按钮
2.4 MB_RETRYCANCEL
出现「Retry」「Cancel」两个按钮
2.5 MB_YESNO
出现「Yes」「No」两个按钮
2.6 MB_YESNOCANCEL
出现「Yes」「No」「Cancel」三个按钮
3. 可指定预设Focus在哪一个按钮
3.1 MB_DEFBUTTON1
指定focus在左边第一个按钮,这是预设值。
3.2 MB_DEFBUTTON2、MB_DEFBUTTON3、MB_DEFBUTTON4
以此类推,指定focus在左边第二、三、四个按钮
4. 可指定是否 Modal
4.1 MB_APPLMODAL
对于应用程式而言,是 modal form
4.2 MB_SYSTEMMODAL
对于作业系统而言,是 modal form
4.3 MB_TASKMODAL
对于 task 而言,是 modal form
一般来说,这跟 MB_APPLMODAL 是等效的,但是当应用程式中的所有
form 都隐藏的时候,就必须使用这个,才能达到 modal 的目的
5. 其他
5.1 MB_TOPMOST
将讯息视窗提至最前面
5.2 MB_RIGHT
将讯息文字向右对齐
在一个 Flag 要指定这么多的东西,要如何使用呢?
只要把要用的引数组合 or 起来就可以了。例如:
Application.MessageBox(PCahr(sMsg), PChar(sCap), MB_YESNO or MB_ICONQUESTION or MB_DEFBUTTON2)
这样会出现「问号」图示,「Yes」「No」两个按钮,而且 focus 在 No 按钮上
回传值:
1. IDABORT:使用者按了「Abort」按钮
2. IDCANCEL:使用者按了「Cancel」按钮
3. IDIGNORE:使用者按了「Ignore」按钮
4. IDNO:使用者按了「No」按钮
5. IDOK:使用者按了「Ok」按钮
6. IDRETRY:使用者按了「Retry」按钮
7. IDYES:使用者按了「Yes」按钮
顺带一提,按钮上的文字是会随着作业系统的语系而改变的,用中文版的 Windows,按钮上的文字就出现中文。
posted @
2009-01-08 18:23 小叶子 阅读(3961) |
评论 (0) |
编辑 收藏