我的delphi笔记(二)

delphi超级链接(ShellExecute函数用法)
请在interface处uses句中加入ShellAPI

ShellExecute(handle,nil,pchar(‘http://blog.csdn.net/cadenza7‘),nil,nil,SW_SHOWNORMAL);

参数说明

hWnd:Integer;
Operation:PChar;:PChar;
Parameters:PChar;
Directory:PChar;
ShowCmd:Integer
依次表示父窗口的句柄(handle)、操作类型(缺省时为open)、文件名、启动参数、缺省目录、窗口显示方式。在制作超级链接时,第2、4、5项参数可不填。窗口显示方式一般填SW_ SHOWNOACTIVATE或者SW_ SHOWNORMAL

HTTP

ShellExecute(handle,nil,pchar(‘http://blog.csdn.net/cadenza7‘),nil,nil,SW_SHOWNORMAL);

来源: http://blog.csdn.net/cadenza7/article/details/4349940

开机自启函数 (在网上找的)、
需要在接口部分使用 Registry;

procedure SetAutoRun(ok: boolean);
var
Reg:TRegistry; //首先定义一个TRegistry类型的变量Reg
begin
Reg:=TRegistry.Create;
try //创建一个新键
Reg.RootKey:=HKEY_LOCAL_MACHINE; //将根键设置为HKEY_LOCAL_MACHINE
Reg.OpenKey(‘Software\Microsoft\Windows\CurrentVersion\Run’,true);//打开一个键
if ok then
begin
Reg.WriteString(‘SMS服务’,ExpandFileName(ParamStr(0))); //在Reg这个键中写入数据名称和数据数值
ShowMessage(‘注册成功!’);
end
else
begin
reg.DeleteValue(‘SMS服务’);
ShowMessage(‘删除成功!’)
end;
Reg.CloseKey; //关闭键
finally
Reg.Free;
end;
end;

、、、、、、、、、、、、、、、、、、、、、、、

获取时间,系统格式问题
Delphi 的Tdatetime类型中,用的时候发现的一个问题。就是自己给该类型赋值的时候,赋值会因为电脑系统设置而产生变化,这点比较不解,找了一些资料,在使用的时候加上这一行代码应该是不会出现问题了。
Application.UpdateFormatSettings := False;
// 设定程序本身所使用的日期时间格式
LongDateFormat := ‘yyyy-MM-dd’;
ShortDateFormat := ‘yyyy-MM-dd’;
LongTimeFormat := ‘hh:nn:ss’;
ShortTimeFormat := ‘hh:nn:ss’;
DateSeparator := ‘-‘;
TimeSeparator := ‘:’;
来源: http://www.cnblogs.com/hnxxcxg/archive/2013/01/30/2882672.html

只是初次实验的一下,并没有过多的验证,已经测试成功是跟系统的设置没有关系了。这样一来就直接使用自己设置的格式就行了。yyyy-MM-dd

避免随机数相同,或者为0的情况:

​使用随机数之前调用一下randomize函数即可。

Delphi 常用快捷键
CTRL+SHIFT+C 编写申明或者补上函数
CTRL+SHIFT+↑(↓) 在过程、函数、事件内部, 可跳跃到相应的过程、函数、事件的定义(在INTERFACE和IMPLEMENTATION之间来回切换)
在属性窗口按TAB键将光标移动到属性名区,键入属性名的开头字母可快速定位到该属性
F4 运行到光标处
F5 设置断点
F9 运行
CTRL+F9 编译
CTRL+BACKSPACE 后退删除一个词,直到遇到一个分割符
CTRL+T 删除光标右边的一个单词
CTRL+Y 删除光标所在行
CTRL+HOME 将光标移至文件头
CTRL+END 将光标移至文件尾
CTRL+PAGEDOWN 将光标移至本屏的最后一行,屏幕不滚动
CTRL+PAGEUP 将光标移至本屏的第一行,屏幕不滚动
CTRL+↑(↓) 向上(下)滚动屏幕,光标跟随滚动不出本屏
CTRL+鼠标转轮 加速滚屏
CTRL+S 保存
SHIFT+CTRL+S 保存所有
CTRL+箭头 以1像素单位更改所选控件位置
SHIFT+箭头 以1像素单位更改所选控件大小


让delphi也有类似Python的切片操作。
今天想在校园网上的HTML代码中提取ip,想看看有没有像Python一样的切片操作,但是找了一下貌似是没有的,但是找了几个字符串函数。如下:
查找位置函数
[功能]:返回字符串s1在字符串s2中首次出现的位置,若s2中不存在s1,则返回0。
[例如]: x:=pos(‘bx’,’adcd’); //x的值为2

   截取子字符串函数

调用格式: Copy(str, m, n): String;
[功能]:在字符串str 中截取从第 m 个字符开始长度为n 的子字符串,并作为函数的返回值。
说明:若m大于s 的长度,则返回一个空串;若从第m 个字符到s 的结尾不足n 个字符,则返回其间的所有字符。
[例如]:
Source code ( By http://www.fishc.com )
s1:= Copy( ‘IloveFishc!’, 6, 5 ); // s1 的值为‘Fishc’
s2:= Copy( ‘小甲鱼爱美眉!’, 4, 5 ); // s2 的值?
s3:= Copy( ‘IloveFishc!’, 1, 1 );
s4:= Copy( ‘IloveFishc!’, 0, 1);
注意:s3 和 s4 其实是一样的!

来源: http://www.cnblogs.com/gameking/archive/2012/11/08/2760206.html

发现pos()中三个参数,第二个和第三个并不能像Python那样直接切片。于是就想到下面的代码。(定义 WlanUserIp,WlanAcIp:string;)

StrBegin:=Pos( ‘wlanuserip’,Html );
StrEnd:=Pos(‘wlanacip’,Html);
WlanUserIp:=Copy( Html,StrBegin+11,StrEnd-11-StrBegin ); //获得用户的ip

这样就获得了ip。


解决idHTTP 登陆时会有302提示框
1.拖入TIdHTTP控件,HandleRedirect设为True,否则可能会出现HTTP 307错误。

delphi使用IdHTTP模拟提交页面方法总结
分类: Delphi2009-03-13 11:07 4662人阅读 评论(1) 收藏 举报
delphicookies.netwindowsstring
1.拖入TIdHTTP控件,HandleRedirect设为True,否则可能会出现HTTP 307错误。

2.主要的设置在Request里。
2.1 userAgent应该改为Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; CIBA; MAXTHON 2.0)
2.2 如果Accept-Encoding设为了gzip, deflate,那么需要再解码,所以如果没有必要的话Accept-Encoding应该设为空。
2.3 Referer应该设为post之前那个页面.

3.若需要取得cookie。

3.1 拖入TidCookieManager控件,将IdHTTP的CookieManager指向它,设定AllowCookies为True

3.2 设置全局变量mycookie:string;

3.3 在TidCookieManager的OnNewCookie事件中
mycookie:=ACookie.ClientCookie;

3.4 然后在用TIdHTTP控件Get页面后即可获取cookie
idhtp1.Get(‘http://www.XXX.com/‘);
cookies:=’Cookie:’+mycookie;
idhtp1.Request.CustomHeaders.Text:=cookies;

4.设置HTTPOptions的hoForceEncodeParams为False,否则post的数据可能会以%20形式编码。

5.若要使用HTTP/1.1,可将HTTPOptions的hoKeepOrigProtocol设为True,然后将ProtocolVersion设为pv1_1。

来源: http://blog.csdn.net/lxdcyh/article/details/3986800

获取idHTTP.post返回的数据。
首先要看看函数原型:
dhttp的post方法:
function Post(AURL: string; const ASource: TStrings): string; overload; function Post(AURL: string; const ASource: TStream): string; overload;

function Post(AURL: string; const ASource: TIdMultiPartFormDataStream): string; overload;

procedure Post(AURL: string; const ASource: TStream; const AResponseContent: TStream); overload;

procedure Post(AURL: string; const ASource: TStrings; const AResponseContent: TStream); overload;

procedure Post(AURL: string; const ASource: TIdMultiPartFormDataStream; AResponseContent: TStream); overload;

其中有些是会返回一个字符串的,这是后设置一个字符串变量接受就行了,但是要记得转换编码。
Html := Utf8ToAnsi( Html );//转码

Delphi Idhttp的get和post方法
Post

var
Param:TStringList;
RStream:TStringStream;
begin
Param:=TStringList.Create;
RStream:=TStringStream.Create(”);

Param.Add(‘username=showlee000’);
Param.Add(‘normModPsp=**‘);
Param.Add(‘mem_pass=true’);
IdHTTP1.Post(‘Http://URL‘,
Param,RStream);

memo1.Text:=RStream.DataString;

Get

idHttp1.Request.CustomHeaders.Text :=
‘Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, /‘+
#13+#10+’Referer:http://url‘+
#13+#10+’Accept-Language: zh-CN’ +
#13+#10+’User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)’+
#13+#10+’Accept-Encoding: gzip, deflate’+
#13+#10+’Host: *‘+
#13+#10+’Connection: Keep-Alive’+
#13+#10+’Authorization: Basic *=’;
IdHTTP1.get(‘http://url‘);

来源: http://evangelionshinji.diandian.com/post/2011-08-28/4429929

Delphi IDHTTP用法详解:
http://blog.csdn.net/yanjiaye520/article/details/8199016

Delphi HTTP post 方法

关于在接口部分犯的一些错误
愿意是想用一个单元a进行主体设计,然后用另一个单元b来存储各种数据还有相关的过程,然后再用单元a引用单元b的数据及过程。
在对单元b的接口部分进行定义的时候出现了一些错误。(在interface的type),后来发现原来是声明的时候有顺序的,
其顺序是
type
记录类型声明
过程声明

还有其他顺序暂时未知(这条笔记仅供参考,还未找到有关资料)

Delphi编程使程序不在系统任务条上出现
[ 2010年5月20日 ] 【大 中 小】0
  程序的初始化过程,即在窗体的FormCreate()事件中添加代码。在程序设计阶段,用鼠标的左键双击窗体上的空白处,在屏幕上就会弹出一个代码窗口,把光标移动到FormCreate()过程的处理代码中,并且添加如下代码:

procedure TForm1.FormCreate(Sender: TObject);
begin
 SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
end;

  在程序运行的初期,首先激活窗体FormCreate()过程中的代码,通过SetWindowLong (Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW)这条语句就可以实现从系统任务条上隐藏本程序的功能。

来源: http://www.examw.com/DotNET/DelphiNet/103514/

ascii值 与 char 转换
Ord(ch) ch ->ascii
chr(n) ascii ->char

全局变量的定义 使用
delphi全局变量的定义与赋值主要有下面几种方法:

1.

全局变量的初始化

在最后结束的end.之前,增加initialization关键字,然后加入对全局变量的初始化,这样就可以初始化全局变量了.不论在interface还是在implementation部分的全部变量,都可以这么来初始化

//省略前面的interface, uses, type.

var
i: Integer;

implementation

var
j: Integer;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Inc(i);
Inc(j);
Form1.Caption := IntToStr(i) + ’ ’ + IntToStr(j);
end;

initialization
i := 100;
j := 200;
end.

  1. 新建一个公用单元,专门放置公用全局变量呗
    unit untCommon;

interface

var
v1:integer;
v2:string;

end.

unit unit1;

interface

uses
windows, ……………., untCommon ; //在每个需要使用v1、v2变量的单元中引用上面那个单元untCommon就可以了

3.跟 一般变量赋值差不多!

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
/
//在 implementation上定义的全局变量在所有单元可见
var teststr:string;

implementation

{$R *.dfm}

//
//在implementation下定义的只对本单元可见
var teststr1:string;

procedure TForm1.Button1Click(Sender: TObject);
begin
//
//对teststr赋值
teststr := ‘我是对所有单元都可见的’;
showmessage(teststr);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
/
//对teststr11赋值
teststr1 := ‘我只对本单元可见’;
showmessage(teststr1);
end;

end.

来源: http://blog.csdn.net/windhaunting/article/details/4752488

delphi工程文件

工程结构

获取当前文件路径
在Delphi SysUtils 单元中有 ExtractFileDir 与 ExtractFilePath两个类似的函数, 两个函数有以下的区别:
ExtractFilePath 传回值的最後一个字元是反斜杠“/”。
ShowMessage(ExtractFileDir(Application.Exename)); // 返回值为 c:/temp
ShowMessage(ExtractFilePath(Application.Exename)); // 返回值为 c:/temp/
相同点: 如果执行文件在根目录下(如:C:/SAMPLE.EXE)的话, 两者的传回值相同, 且最后一个字符都是“/”。

来源: http://blog.csdn.net/trassion/article/details/8485706

文本文件的时候,需要输出换行需加上 #13#10 (不需要加单引号)

如:
write(F1,‘测试1’+ #13#10 );
write(F1,‘测试2’);

输出结果:
测试1
测试2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值