自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 资源 (3)
  • 收藏
  • 关注

原创 Delphi XE10编写的《海康摄像机SDK测试DEMO》

type TShowStr = record X: Word; Y: Word; S: array [0 .. 43] of AnsiChar; end;type TCamera = record pHWND: HWND; strict private aCam: LongInt; g_nPort: LongInt; st...

2018-06-25 10:20:38 3349

原创 Delphi XE7 用indy开发微信公众平台(9)- 高级群发接口

1、上传多媒体文件(这里以上传图片为例)uses IdMultipartFormData;const  UpMediaUrl = 'http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=%s&type=%s';function UpMedia(HTTP: TIdHTTP; AccessToken, MediaT...

2018-06-25 10:59:21 958

原创 Delphi XE7 用indy开发微信公众平台(8)- 自定义菜单

constCreateMenuUrl = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token=%s';function CreateMenus(AccessToken: String): TJSONObject;var  Url: string;  J: TJSONObject;  m1: TJSONObject;  m2, m2...

2018-06-25 10:57:22 533

原创 Delphi XE7 用indy开发微信公众平台(7)- 用户管理

1、获取用户列表constFansListUrl = 'https://api.weixin.qq.com/cgi-bin/user/get?access_token=%s&next_openid=%s';function GetOpenIDList(AccessToken, NextOpenID: String): TStringList;var Url: string; ...

2018-06-25 10:56:22 510

原创 Delphi XE7 用indy开发微信公众平台(6)- 被动回复用户消息

function ReplyText(Msg: TMessage; MsgText: String): RawByteString;var X: IXMLDocument;begin X := NewXMLDocument; try X.Xml.text := TextMsg; X.Active := true; with X.DocumentElement...

2018-06-25 10:48:09 453

原创 Delphi XE7 用indy开发微信公众平台(5)- 接收事件推送

type TEventType = (subscribe, unsubscribe, SCAN, LOCATION, CLICK, VIEW);function ResponseEvent(M: TMessage; X: IXMLDocument): RawByteString;var event: TEventType; temp, menu: String;begin ...

2018-06-25 10:46:35 358

原创 Delphi XE7 用indy开发微信公众平台(4)- 接收普通消息

type  TMsgType = (event, text, image, voice, video, location, link);  TMessage = Record    ToUserName: String;    FromUserName: String;    CreateTime: Integer;    MsgType: String;  end;uses System.Sys...

2018-06-25 10:45:08 578

原创 Delphi XE7 用indy开发微信公众平台(3)- 验证消息真实性

uses IdHashSHA, IdGlobal;function SHA1(Input: String): String;begin  with TIdHashSHA1.Create do    try      Result := LowerCase(HashBytesAsHex(TidBytes(Bytesof(Input))));    finally      Free;    end;...

2018-06-25 10:43:30 496

原创 Delphi XE7 用indy开发微信公众平台(2)- 获取微信服务器IP地址

constServerIpUrl = 'https://api.weixin.qq.com/cgi-bin/getcallbackip?&access_token=%s';procedure GetServerList(out List: TStringList; AccessToken: String);var Url: string; J: TJSONObject;...

2018-06-25 10:42:11 694

原创 Delphi XE7 用indy开发微信公众平台(1)- 获取access_token、expires_in

微信公众平台官方的资料都是PHP的,这几天闲来无事,用Delphi实现了部分功能,希望能抛砖引玉,大家共同完善开发平台:Delphi XE7主要涉及JSON、XML的解析,SHA1加密,indy的IdHTTP、IdSSLIOHandlerSocketOpenSSL、IdHTTPServer控件完全使用Delphi自带控件获取access_token、expires_infunction GetMe...

2018-06-25 10:40:42 875

原创 Delphi XE10编写的《开放式公路收费系统》

Delphi XE10编写的《开放式公路收费系统》

2017-04-07 13:15:26 644

Delphi10.2开发的控制网络继电器(深圳精锐达)程序

控制16-32路网络继电器(精锐达)

2021-08-14

Delphi XE10编写的《海康摄像机SDK测试DEMO》

type TShowStr = record X: Word; Y: Word; S: array [0 .. 43] of AnsiChar; end; type TCamera = record pHWND: HWND; strict private aCam: LongInt; g_nPort: LongInt; struDeviceInfo: NET_DVR_DEVICEINFO_V30; lRealHandle: LongInt; struPlayInfo: NET_DVR_CLIENTINFO; pUser: Pointer; dwRet: Integer; public property ErrCode: Integer read dwRet; procedure HCLogin(IP, User, Psd: String; Port: Word); procedure HCPlay(aHWND: HWND); procedure HCAddChar(str: TArray); procedure HCAddChar_V30(str: TArray); function HCGetJpeg(JpgName: String; JpgSize: Word = 0; JpgQua: Word = 19): Boolean; procedure HCStop; procedure HCLogout; end; {$ENDIF //} implementation procedure TCamera.HCLogin(IP, User, Psd: String; Port: Word); begin NET_DVR_Init(); lRealHandle := -1; dwRet := 0; aCam := NET_DVR_Login_V30(PAnsiChar(ansistring(IP)), Port, PAnsiChar(ansistring(User)), PAnsiChar(ansistring(Psd)), @struDeviceInfo); dwRet := NET_DVR_GetLastError; end; procedure TCamera.HCPlay(aHWND: HWND); begin struPlayInfo.lChannel := 1; struPlayInfo.lLinkMode := 0; struPlayInfo.sMultiCastIP := NIL; struPlayInfo.hPlayWnd := aHWND; lRealHandle := NET_DVR_RealPlay_V30(aCam, @struPlayInfo, nil, pUser, true); dwRet := NET_DVR_GetLastError; end; procedure TCamera.HCAddChar(str: TArray); var i: Integer; aStr: NET_DVR_SHOWSTRING; begin if length(str) > MAX_STRINGNUM then begin setlength(str, MAX_STRINGNUM); end; for i := 0 to length(str) - 1 do begin aStr.struStringInfo[i].wShowString := 1; aStr.struStringInfo[i].wStringSize := length(str[i].S); aStr.struStringInfo[i].wShowStringTopLeftX := str[i].X; aStr.struStringInfo[i].wShowStringTopLeftY := str[i].Y; move(str[i].S[0], aStr.struStringInfo[i].sString[0], length(str[i].S)); end; aStr.dwSize := sizeof(aStr); NET_DVR_SetDVRConfig(aCam, NET_DVR_SET_SHOWSTRING, 1, @aStr, sizeof(NET_DVR_SHOWSTRING)); dwRet := NET_DVR_GetLastError; end; procedure TCamera.HCAddChar_V30(str: TArray); var i: Integer; aStr: NET_DVR_SHOWSTRING_V30; begin if length(str) > MAX_STRINGNUM_V30 then begin setlength(str, MAX_STRINGNUM_V30); end; for i := 0 to length(str) - 1 do begin aStr.struStringInfo[i].wShowString := 1; aStr.struStringInfo[i].wStringSize := length(str[i].S); aStr.struStringInfo[i].wShowStringTopLeftX := str[i].X; aStr.struStringInfo[i].wShowStringTopLeftY := str[i].Y; move(str[i].S[0], aStr.struStringInfo[i].sString[0], length(str[i].S)); end; aStr.dwSize := sizeof(aStr); NET_DVR_SetDVRConfig(aCam, NET_DVR_SET_SHOWSTRING_V30, 1, @aStr, sizeof(NET_DVR_SET_SHOWSTRING_V30)); dwRet := NET_DVR_GetLastError; end; function TCamera.HCGetJpeg(JpgName: String; JpgSize: Word = 0; JpgQua: Word = 19): Boolean; var aJpg: NET_DVR_JPEGPARA; begin aJpg.wPicSize := JpgSize; aJpg.wPicQuality := JpgQua; if aCam >= 0 then begin result := NET_DVR_CaptureJPEGPicture(aCam, 1, aJpg, PAnsiChar(ansistring(JpgName))); dwRet := NET_DVR_GetLastError(); end else result := false; dwRet := NET_DVR_GetLastError; end; procedure TCamera.HCStop; begin if lRealHandle >= 0 then begin NET_DVR_StopRealPlay(lRealHandle); lRealHandle := -1; end; PlayM4_CloseStream(g_nPort); PlayM4_FreePort(g_nPort); end; procedure TCamera.HCLogout; begin if lRealHandle > -1 then begin HCStop; end; if aCam >= 0 then begin NET_DVR_Logout_V30(aCam); aCam := -1; end; NET_DVR_Cleanup(); end;

2018-06-25

用Delphi XE7 Indy写的微信公众平台示例

Delphi XE7 Indy的IdHTTP写的微信公众平台,只做了部分功能,希望大家能用上 temp := JSONObject.Values['subscribe'].ToString; Memo1.Lines.Add('subscribe:' + temp); temp := JSONObject.Values['openid'].ToString; Memo1.Lines.Add('openid:' + temp); temp := JSONObject.Values['nickname'].ToString; Memo1.Lines.Add('nickname:' + temp); temp := JSONObject.Values['sex'].ToString; Memo1.Lines.Add('sex:' + temp); temp := JSONObject.Values['city'].ToString; Memo1.Lines.Add('city:' + temp); temp := JSONObject.Values['country'].ToString; Memo1.Lines.Add('country:' + temp); temp := JSONObject.Values['province'].ToString; Memo1.Lines.Add('province:' + temp); temp := JSONObject.Values['language'].ToString; Memo1.Lines.Add('language:' + temp); temp := JSONObject.Values['headimgurl'].ToString; Memo1.Lines.Add('headimgurl:' + temp); temp := JSONObject.Values['subscribe_time'].ToString; Memo1.Lines.Add('subscribe_time:' + temp); temp := JSONObject.Values['remark'].ToString; Memo1.Lines.Add('remark:' + temp);

2015-01-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除