copy other

DELPHI基础开发技巧

◇[DELPHI]网络邻居复制文件 uses shellapi; copyfile(pchar('newfile.txt'),pchar('//computername/direction/targer.txt'),false);

◇[DELPHI]产生鼠标拖动效果 通过MouseMove事件、DragOver事件、EndDrag事件实现,例如在PANEL上的LABEL: var xpanel,ypanel,xlabel,ylabel:integer;

 PANEL的MouseMove事件:xpanel:=x;ypanel:=y; PANEL的DragOver事件:xpanel:=x;ypanel:=y; LABEL的MouseMove事件:xlabel:=x;ylabel:=y;

LABEL的EndDrag事件:label.left:=xpanel-xlabel;label.top:=ypanel-ylabel;  

◇[DELPHI]取得WINDOWS目录 uses shellapi; var windir:array[0..255] of char; getwindowsdirectory(windir,sizeof(windir));  或者从注册表中读取,位置: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion SystemRoot键,取得如:C:\WINDOWS

 ◇[DELPHI]在FORM或其他容器上画线 var x,y:array [0..50] of integer; canvas.pen.color:=clred; canvas.pen.style:=psDash;  form1.canvas.moveto(trunc(x[i]),trunc(y[i])); form1.canvas.lineto(trunc(x[j]),trunc(y[j]));

◇[DELPHI]字符串列表使用 var tips:tstringlist; tips:=tstringlist.create; tips.loadfromfile('filename.txt'); edit1.text:=tips[0]; tips.add('last line addition string'); tips.insert(1,'insert string at NO 2 line'); tips.savetofile('newfile.txt'); tips.free;

◇[DELPHI]简单的剪贴板操作 richedit1.selectall; richedit1.copytoclipboard; richedit1.cuttoclipboard; edit1.pastefromclipboard;

 ◇[DELPHI]关于文件、目录操作 Chdir('c:\abcdir'); 转到目录 Mkdir('dirname'); 建立目录 Rmdir('dirname'); 删除目录 GetCurrentDir;

//取当前目录名,无'\' Getdir(0,s); //取工作目录名s:='c:\abcdir'; Deletfile('abc.txt'); //删除文件 Renamefile('old.txt','new.txt'); //文件更名 ExtractFilename(filelistbox1.filename); //取文件名 ExtractFileExt(filelistbox1.filename);//取文件后缀  

◇[DELPHI]处理文件属性 attr:=filegetattr(filelistbox1.filename); if (attr and faReadonly)=faReadonly then ... //只读 if (attr and faSysfile)=faSysfile then ... //系统 if (attr and faArchive)=faArchive then ... //存档  if (attr and faHidden)=faHidden then ... //隐藏

 ◇[DELPHI]执行程序外文件 WINEXEC//调用可执行文件 winexec('command.com /c copy *.* c:\',SW_Normal);  winexec('start abc.txt'); ShellExecute或ShellExecuteEx//启动文件关联程序 function executefile(const filename,params,defaultDir:string;showCmd:integer):THandle;  ExecuteFile('C:\abc\a.txt','x.abc','c:\abc\',0); ExecuteFile('http://tingweb.yeah.net','','',0); ExecuteFile('mailto:tingweb@wx88.net','','',0);

◇[DELPHI]取得系统运行的进程名 var hCurrentWindow:HWnd; szText:array[0..254] of char;  begin  hCurrentWindow:=Getwindow(handle,GW_HWndFrist);  while hCurrentWindow <> 0 do begin if Getwindowtext(hcurrnetwindow,@sztext,255)>0 then listbox1.items.add(strpas(@sztext));  hCurrentWindow:=Getwindow(hCurrentwindow,GW_HWndNext);  end;  end;  ◇[DELPHI]关于汇编的嵌入 Asm End; 可以任意修改EAX、ECX、EDX;不能修改ESI、EDI、ESP、EBP、EBX。

 ◇[DELPHI]关于类型转换函数  FloatToStr//浮点转字符串 FloatToStrF//带格式的浮点转字符串  IntToHex//整数转16进制  TimeToStr DateToStr DateTimeToStr FmtStr//按指定格式输出字符串 FormatDateTime('YYYY-MM-DD,hh-mm-ss',DATE);

 ◇[DELPHI]字符串的过程和函数 Insert(obj,target,pos); //字符串target插入在pos的位置。如插入结果大于target最大长度,多出字符将被截掉。如Pos在255以外,会产生运行错。 例如,st:='Brian',则Insert('OK',st,2)会使st变为'BrOKian'。

Delete(st,pos,Num);

//从st串中的pos(整型)位置开始删去个数为Num(整型)个字符的子字串。 例如,st:='Brian',则Delete(st,3,2)将变为Brn。 Str(value,st);

//将数值value(整型或实型)转换成字符串放在st中。

例如,a=2.5E4时,则str(a:10,st)将使st的值为' 25000'。

Val(st,var,code);

//把字符串表达式st转换为对应整型或实型数值,存放在var中。St必须是一个表示数值的字符串,并符合数值常数的规则。 在转换过程中,如果没有检测出错误,变量code置为0,否则置为第一个出错字符的位置。 例如,st:=25.4E3,x是一个实型变量,则val(st,x,code)将使X值为25400,code值为0。

Copy(st.pos.num);

//返回st串中一个位置pos(整型)处开始的,含有num(整型)个字符的子串。 如果pos大于st字符串的长度,那就会返回一个空串,如果pos在255以外,会引起运行错误。 例如,st:='Brian',则Copy(st,2,2)返回'ri'。

Concat(st1,st2,st3……,stn);

//把所有自变量表示出的字符串按所给出的顺序连接起来,并返回连接后的值。如果结果的长度255,将产生运行错误。

例如,st1:='Brian',st2:=' ',st3:='Wilfred',则Concat(st1,st2,st3)返回'Brian Wilfred'。

Length(st); //返回字符串表达式st的长度。例如,st:='Brian',则Length(st)返回值为5。

Pos(obj,target); //返回字符串obj在目标字符串target的第一次出现的位置,如果target没有匹配的串,Pos函数的返回值为0。 例如,target:='Brian Wilfred',则Pos('Wil',target)的返回值是7,Pos('hurbet',target)的返回值是0。

 ◇[DELPHI]关于处理注册表 uses Registry; var reg:Tregistry; reg:=Tregistry.create; reg.rootkey:='HKey_Current_User'; reg.openkey('Control Panel\Desktop',false); reg.WriteString('Title Wallpaper','0');  reg.writeString('Wallpaper',filelistbox1.filename); reg.closereg; reg.free; ◇[DELPHI]关于键盘常量名 VK_BACK/VK_TAB/VK_RETURN/VK_SHIFT/VK_CONTROL/VK_MENU/VK_PAUSE/VK_ESCAPE /VK_SPACE/VK_LEFT/VK_RIGHT/VK_UP/VK_DOWN F1--F12:$70(112)--$7B(123)  A-Z:$41(65)--$5A(90) 0-9:$30(48)--$39(57)  ◇[DELPHI]初步判断程序母语 DELPHI软件的DOS提示:This Program Must Be Run Under Win32. VC++软件的DOS提示:This Program Cannot Be Run In DOS Mode.

 ◇[DELPHI]操作Cookie response.cookies("name").domain:='http://www.086net.com'; with response.cookies.add do begin name:='username'; value:='username'; end

◇[DELPHI]增加到文档菜单连接 uses shellapi,shlOBJ; shAddToRecentDocs(shArd_path,pchar(filepath));//增加连接 shAddToRecentDocs(shArd_path,nil);//清空

◇[杂类]备份智能ABC输入法词库 windows\system\user.rem windows\system\tmmr.rem

◇[DELPHI]判断鼠标按键 if GetAsyncKeyState(VK_LButton) <>0 then ... //左键 if GetAsyncKeyState(VK_MButton)<>0 then ... //中键 if GetAsyncKeyState(VK_RButton) <>0 then ... //右键

 ◇[DELPHI]设置窗体的最大显示 onFormCreate事件 self.width:=screen.width; self.height:=screen.height;

◇[DELPHI]按键接受消息 OnCreate事件中处理:Application.OnMessage:=MyOnMessage; procedure TForm1.MyOnMessage(var MSG:TMSG;var Handle:Boolean);  begin if msg.message=256 then ... //ANY键 if msg.message=112 then ... //F1 if msg.message=113 then ... //F2 end;

 ◇[杂类]隐藏共享文件夹 共享效果:可访问,但不可见(在资源管理、网络邻居中) 取共享名为:direction$ 访问://computer/dirction/

◇[Java Script]Java Script网页常用效果 网页60秒定时关闭 <script language="java script"><!-- settimeout('window.close();',60000) --></script> 关闭窗口 <a href="/" οnclick="javascript:window.close();return false;">关闭</a> 定时转URL <meta http-equiv="refresh" content="40;url=http://www.086net.com">  设为首页 <a οnclick="this.style.behavior='url(#default#homepage)';this.sethomepage('http://086net.com');"href="#">设为首页</a> 收藏本站 <a href="javascript:window.external.addfavorite('http://086net.com','[未名码头]')">收藏本站</a> 加入频道 <a href="javascript:window.external.addchannel('http://086net.com')">加入频道</a>

◇[DELPHI]文本编辑相关 checkbox1.checked:=not checkbox1.checked;  if checkbox1.checked then richedit1.font.style:=richedit1.font.style+[fsBold] else richedit1.font.style:=richedit1.font.style-[fsBold]//粗体 if checkbox1.checked then richedit1.font.style:=richedit1.font.style+[fsItalic] else richedit1.font.style:=richedit1.font.style-[fsItalic]//斜体  if checkbox1.checked then richedit1.font.style:=richedit1.font.style+[fsUnderline] else richedit1.font.style:=richedit1.font.style-[fsUnderline]//下划线 memo1.alignment:=taLeftJustify;//居左 memo1.alignment:=taRightJustify;//居右 memo1.alignment:=taCenter;//居中

◇[DELPHI]随机产生文本色 randomize;//随机种子 memo1.font.color:=rgb(random(255),random(255),random(255));  

◇[DELPHI]DELPHI5 UPDATE升级补丁序列号 1000003185 90X25fx0

◇[DELPHI]文件名的非法字符过滤 for i:=1 to length(s) do if s[i] in ['\','/',':','*','?','<','>','|'] then

 ◇[DELPHI]转换函数的定义及说明 datetimetofiledate (datetime:Tdatetime):longint;

 将Tdatetime格式的日期时间值转换成DOS格式的日期时间值 datetimetostr (datetime:Tdatetime):string;

将Tdatatime格式变量转换成字符串,如果datetime参数不包含日期值,返回字符串日期显示成为00/00/00, 如果datetime参数中没有时间值,返回字符串中的时间部分显示成为00:00:00 AM

datetimetostring (var result string; const format:string; datetime:Tdatetime); 根据给定的格式字符串转换时间和日期值, result为结果字符串, format为转换格式字符串, datetime为日期时间值 datetostr (date:Tdatetime)  使用shortdateformat全局变量定义的格式字符串将date参数转换成对应的字符串

floattodecimal (var result:Tfloatrec;value: extended;precision,decimals: integer);

将浮点数转换成十进制表示 floattostr (value:extended):string 将浮点数value转换成字符串格式,该转换使用普通数字格式,转换的有效位数为15位。

floattotext (buffer:pchar;value:extended; format:Tfloatformat;precision, digits:integer):integer; 用给定的格式、精度和小数将浮点值value转换成十进制表示形式,转换结果存放于buffer参数中,函数返回值为存储到buffer中的字符位数,buffer是非0结果的字符串缓冲区。  

floattotextfmt (buffer:pchar;value:extended; format:pchar):integer 用给定的格式将浮点值value转换成十进制表示形式,转换结果存放于buffer参数中,函数返回值为存储到buffer中的字符位数。

 inttohex (value:longint;digits:integer): string; 将给定的数值value转换成十六进制的字符串。 参数digits给出转换结果字符串包含的数字位数。

inttostr (value:longint):string 将整数转换成十进制形式字符串

 strtodate (const S:string):Tdatetime 将字符串转换成日期值,S必须包含一个合法的格式日期的字符串。

 strtodatetime (const S:string):Tdatetime 将字符串S转换成日期时间格式,S必须具有MM/DD/YY HH:MM:SS[AM|PM]格式,其中日期和时间分隔符与系统时期时间常量设置相关。 如果没有指定AM或PM信息,表示使用24小时制。

 strtofloat (const S:string):extended; 将给定的字符串转换成浮点数, 字符串具有如下格式: [+|-]nnn…[.]nnn…[<+|-><E|e><+|->nnnn]  strtoint (const S:string):longint 将数字字符串转换成整数,字符串可以是十进制或十六进制格式, 如果字符串不是一个合法的数字字符串,系统发生ECONVERTERROR异常

strtointdef (const S:string;default: longint):longint;  将字符串S转换成数字,如果不能将S转换成数字,strtointdef函数返回参数default的值。

 strtotime (const S:string):Tdatetime 将字符串S转换成TDATETIME值,S具有HH:MM:SS[AM|PM]格式,实际的格式与系统的时间相关的全局变量有关。

 timetostr (time:Tdatetime):string; 将参数TIME转换成字符串。转换结果字符串的格式与系统的时间相关常量的设置有关。

◇[DELPHI]程序不出现在ALT+CTRL+DEL 在implementation后添加声明:  function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL'; RegisterServiceProcess(GetCurrentProcessID, 1); //隐藏 RegisterServiceProcess(GetCurrentProcessID, 0);//显示 用ALT+DEL+CTRL看不见

◇[DELPHI]程序不出现在任务栏 uses windows var ExtendedStyle : Integer; begin Application.Initialize; //============================================================== ExtendedStyle := GetWindowLong (Application.Handle, GWL_EXSTYLE);  SetWindowLong(Application.Handle, GWL_EXSTYLE, ExtendedStyle OR WS_EX_TOOLWINDOW AND NOT WS_EX_APPWINDOW); //=============================================================== Application.CreateForm(TForm1, Form1); Application.Run; end. ◇[DELPHI]如何判断拨号网络是开还是关 if GetSystemMetrics(SM_NETWORK) AND $01 = $01 then showmessage('在线!') else showmessage('不在线!');

◇[DELPHI]实现IP到域名的转换 function GetDomainName(Ip:string):string; var pH:PHostent;  data:twsadata; ii:dword; begin WSAStartup($101, Data);  ii:=inet_addr(pchar(ip));  pH:=gethostbyaddr(@ii,sizeof(ii),PF_INET);  if (ph<>nil) then result:=pH.h_name else result:='';  WSACleanup; end;

 ◇[DELPHI]处理“右键菜单”方法 var reg: TRegistry; begin reg := TRegistry.Create; reg.RootKey:=HKEY_CLASSES_ROOT; reg.OpenKey('*\shell\check\command', true);  reg.WriteString('', '"' + application.ExeName + '" "%1"'); reg.CloseKey; reg.OpenKey('*\shell\diary', false); reg.WriteString('', '操作(&C)');  reg.CloseKey; reg.Free; showmessage('DONE!'); end;

◇[DELPHI]发送虚拟键值ctrl V procedure sendpaste; begin keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0);  keybd_event(ord('V'), MapVirtualKey(ord('V'), 0), 0, 0); keybd_event(ord('V'), MapVirtualKey(ord('V'), 0), KEYEVENTF_KEYUP, 0);  keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0); end;

◇[DELPHI]当前的光驱的盘符 procedure getcdrom(var cd:char);  var str:string; drivers:integer; driver:char; i,temp:integer; begin drivers:=getlogicaldrives; temp:=(1 and drivers);  for i:=0 to 26 do begin if temp=1 then begin driver:=char(i+integer('a')); str:=driver+':';  if getdrivetype(pchar(str))=drive_cdrom then begin cd:=driver; exit; end;  end; drivers:=(drivers shr 1); temp:=(1 and drivers); end; end;

◇[DELPHI]字符的加密与解密 function cryptstr(const s:string; stype: dword):string; var i: integer; fkey: integer; begin result:=''; case stype of 0: setpass; begin randomize; fkey := random($ff);  for i:=1 to length(s) do result := result+chr( ord(s[i]) xor i xor fkey);  result := result + char(fkey); end; 1: getpass begin fkey := ord(s[length(s)]); for i:=1 to length(s) - 1 do result := result+chr( ord(s[i]) xor i xor fkey); end; end; □

◇[DELPHI]向其他应用程序发送模拟键 var h: THandle; begin h := FindWindow(nil, '应用程序标题'); PostMessage(h, WM_KEYDOWN, VK_F9, 0); //发送F9键 end; □

◇[DELPHI]DELPHI 支持的DAO数据格式 td.Fields.Append(td.CreateField ('dbBoolean',dbBoolean,0));  td.Fields.Append(td.CreateField ('dbByte',dbByte,0)); td.Fields.Append(td.CreateField ('dbInteger',dbInteger,0));  td.Fields.Append(td.CreateField ('dbLong',dbLong,0)); td.Fields.Append(td.CreateField ('dbCurrency',dbCurrency,0)); td.Fields.Append(td.CreateField ('dbSingle',dbSingle,0)); td.Fields.Append(td.CreateField ('dbDouble',dbDouble,0)); td.Fields.Append(td.CreateField ('dbDate',dbDate,0)); td.Fields.Append(td.CreateField ('dbBinary',dbBinary,0));  td.Fields.Append(td.CreateField ('dbText',dbText,0)); td.Fields.Append(td.CreateField ('dbLongBinary',dbLongBinary,0)); td.Fields.Append(td.CreateField ('dbMemo',dbMemo,0)); td.Fields['ID'].Set_Attributes(dbAutoIncrField);//自增字段  □

◇[DELPHI]DELPHI配置MS SQL 7和BDE步骤 第一步,配置ODBC: 先在ODBC 中设数据源,安装过SQL Server7.0 后, ODBC中有一项"系统DSN"应该有两项 数据源,一个是MQIS,一个是LocalSever,任选一个选后点击配置按钮,不知你的SQL7.0 是不是安装在本地机器上, 如果是的话直接进行下一步,如果不是,在服务器一栏中填上 Server, 然后进行下一步,填写登录ID 和密码(登录ID,和密码是在SQL7.0中的用户选项 中设的)。  第二步,配置BDE: 打开Delphi的BDE,然后点击MQIS 或 LocalServer,就会提示用户名和密码,这和 ODBC的用户名和密码是一样的,填上就行了。  第三步,配置程序:  如果用的是TTable,就在TTable的DatabaseName中选择MQIS 或LocalServer,然后在 TableName中选择Sale就行了,然后将Active改为True,Delphi弹出提示对话,填入用户 名和密码。  如果用的是TQuery,在TQuery上点击右键,再击"SQL Builder",这是以界面方式配置 SQL语句,或者在TQuery的SQL中填入SQL语句。最后,别忘了将Active改为True。  在运行也可能配置TQuery,具体见Delphi帮助。  □

◇[DELPHI]得到图像上某一点的RGB值 procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);  var red,green,blue:byte ; i:integer; begin i:= image1.Canvas.Pixels[x,y]; Blue:= GetBValue(i); Green:= GetGValue(i): Red:= GetRValue(i);  Label1.Caption:=inttostr(Red); Label2.Caption:=inttostr(Green); Label3.Caption:=inttostr(Blue); end; □

◇[DELPHI]关于日期格式分解转换 var year,month,day:word;now2:Tdatatime; now2:=date(); decodedate(now2,year,month,day);  lable1.Text :=inttostr(year)+'年'+inttostr(month)+'月'+inttostr(day)+'日';  

◇[DELPHI]如何判断当前网络连接方式 判断结果是MODEM、局域网或是代理服务器方式。 uses wininet; Function ConnectionKind :boolean; var flags: dword; begin Result := InternetGetConnectedState(@flags, 0);  if Result then begin if (flags and INTERNET_CONNECTION_MODEM) = INTERNET_CONNECTION_MODEM then begin showmessage('Modem'); end;  if (flags and INTERNET_CONNECTION_LAN) = INTERNET_CONNECTION_LAN then begin showmessage('LAN'); end; if (flags and INTERNET_CONNECTION_PROXY) = INTERNET_CONNECTION_PROXY then begin showmessage('Proxy'); end; if (flags and INTERNET_CONNECTION_MODEM_BUSY)=INTERNET_CONNECTION_MODEM_BUSY then begin showmessage('Modem Busy'); end; end; end;

◇[DELPHI]如何判断字符串是否是有效EMAIL地址 function IsEMail(EMail: String): Boolean;  var s: String;ETpos: Integer; begin ETpos:= pos('@', EMail); if ETpos > 1 then begin s:= copy(EMail,ETpos+1,Length(EMail)); if (pos('.', s) > 1) and (pos('.', s) < length(s)) then Result:= true else Result:= false; end else Result:= false; end;

 ◇[DELPHI]判断系统是否连接INTERNET 需要引入URL.DLL中的InetIsOffline函数。  函数申明为: function InetIsOffline(Flag: Integer): Boolean; stdcall; external 'URL.DLL'; 然后就可以调用函数判断系统是否连接到INTERNET if InetIsOffline(0) then ShowMessage('not connected!') else ShowMessage('connected!'); 该函数返回TRUE如果本地系统没有连接到INTERNET。 附: 大多数装有IE或OFFICE97的系统都有此DLL可供调用。 InetIsOffline BOOL InetIsOffline( DWORD dwFlags, );

◇[DELPHI]简单地播放和暂停WAV文件 uses mmsystem; function PlayWav(const FileName: string): Boolean; begin Result := PlaySound(PChar(FileName), 0, SND_ASYNC); end;  procedure StopWav; var buffer: array[0..2] of char; begin buffer[0] := #0; PlaySound(Buffer, 0, SND_PURGE); end;  

◇[DELPHI]取机器BIOS信息 with Memo1.Lines do begin Add('MainBoardBiosName:'+^I+string(Pchar(Ptr($FE061))));  Add('MainBoardBiosCopyRight:'+^I+string(Pchar(Ptr($FE091))));  Add('MainBoardBiosDate:'+^I+string(Pchar(Ptr($FFFF5))));  Add('MainBoardBiosSerialNo:'+^I+string(Pchar(Ptr($FEC71)))); end;  

◇[DELPHI]网络下载文件 uses UrlMon; function DownloadFile(Source, Dest: string): Boolean;  begin try Result := UrlDownloadToFile(nil, PChar(source), PChar(Dest), 0, nil) = 0; except Result := False; end; end; if DownloadFile('http://www.borland.com/delphi6.zip, 'c:\kylix.zip') then  ShowMessage('Download succesful') else ShowMessage('Download unsuccesful')

 ◇[DELPHI]解析服务器IP地址 uses winsock function IPAddrToName(IPAddr : String): String;  var SockAddrIn: TSockAddrIn; HostEnt: PHostEnt; WSAData: TWSAData; begin WSAStartup($101, WSAData); SockAddrIn.sin_addr.s_addr:= inet_addr(PChar(IPAddr));  HostEnt:= gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET); if HostEnt<>nil then result:=StrPas(Hostent^.h_name) else result:=''; end;

◇[DELPHI]取得快捷方式中的连接 function ExeFromLink(const linkname: string): string; var FDir, FName, ExeName: PChar; z: integer;  begin ExeName:= StrAlloc(MAX_PATH); FName:= StrAlloc(MAX_PATH); FDir:= StrAlloc(MAX_PATH); StrPCopy(FName, ExtractFileName(linkname)); StrPCopy(FDir, ExtractFilePath(linkname)); z:= FindExecutable(FName, FDir, ExeName); if z > 32 then Result:= StrPas(ExeName) else Result:= '';  StrDispose(FDir); StrDispose(FName); StrDispose(ExeName); end;

 ◇[DELPHI]控制TCombobox的自动完成 {'Sorted' property of the TCombobox to true } var lastKey: Word;  //全局变量 //TCombobox的OnChange事件 procedure TForm1.AutoCompleteChange(Sender: TObject); var SearchStr: string;  retVal: integer; begin SearchStr := (Sender as TCombobox).Text; if lastKey <> VK_BACK then // backspace: VK_BACK or $08 begin retVal := (Sender as TCombobox).Perform(CB_FINDSTRING, -1, LongInt(PChar(SearchStr)));  if retVal > CB_Err then begin (Sender as TCombobox).ItemIndex := retVal; (Sender as TCombobox).SelStart := Length(SearchStr); (Sender as TCombobox).SelLength := (Length((Sender as TCombobox).Text) - Length(SearchStr)); end; // retVal > CB_Err end; // lastKey <> VK_BACK lastKey := 0; // reset lastKey end; //TCombobox的OnKeyDown事件 procedure TForm1.AutoCompleteKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin lastKey := Key; end;

 ◇[DELPHI]如何清空一个目录 function EmptyDirectory(TheDirectory :String ; Recursive : Boolean) : Boolean; var SearchRec : TSearchRec; Res : Integer;  begin Result := False; TheDirectory := NormalDir(TheDirectory); Res := FindFirst(TheDirectory + '*.*', faAnyFile, SearchRec);  try while Res = 0 do begin if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then begin if ((SearchRec.Attr and faDirectory) > 0) and Recursive then  begin EmptyDirectory(TheDirectory + SearchRec.Name, True); RemoveDirectory(PChar(TheDirectory + SearchRec.Name));  end else begin DeleteFile(PChar(TheDirectory + SearchRec.Name)) end; end; Res := FindNext(SearchRec); end; Result := True; finally FindClose(SearchRec.FindHandle); end; end;  

◇[DELPHI]如何计算一个目录的大小 function GetDirectorySize(const ADirectory: string): Integer; var Dir: TSearchRec; Ret: integer; Path: string; begin Result := 0;  Path := ExtractFilePath(ADirectory); Ret := Sysutils.FindFirst(ADirectory, faAnyFile, Dir); if Ret <> NO_ERROR then exit; try while ret=NO_ERROR do begin inc(Result, Dir.Size);  if (Dir.Attr in [faDirectory]) and (Dir.Name[1] <> '.') then Inc(Result, GetDirectorySize(Path + Dir.Name + '\*.*'));  Ret := Sysutils.FindNext(Dir); end; finally Sysutils.FindClose(Dir); end; end;

 ◇[DELPHI]安装程序如何添加到Uninstall列表 操作注册表,如下: 1.在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall键下建立一个主键,名称任意。  例HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MyUninstall  2.在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MyUnistall下键两个串值, 这两个串值的名称是特定的:DisplayName和UninstallString。  3.给串DisplayName赋值为显示在“删除应用程序列表”中的名称,如'Aiming Uninstall one'; 给串UninstallString赋值为执行的删除命令,如 C:\WIN97\uninst.exe -f"C:\TestPro\aimTest.isu"

◇[DELPHI]截获WM_QUERYENDSESSION关机消息 type TForm1 = class(TForm) procedure WMQueryEndSession(var Message: TWMQueryEndSession);  message WM_QUERYENDSESSION; procedure CMEraseBkgnd(var Message:TWMEraseBkgnd);Message WM_ERASEBKGND; private { Private declarations } public { Public declarations } end; procedure TForm1.WMQueryEndSession(var Message: TWMQueryEndSession); begin Showmessage('computer is about to shut down'); end;  

◇[DELPHI]获取网上邻居 procedure getnethood();//NT做服务器,WIN98上调试通过。  var a,i:integer; errcode:integer; netres:array[0..1023] of netresource; enumhandle:thandle; enumentries:dword; buffersize:dword; s:string;  mylistitems:tlistitems; mylistitem:tlistitem; alldomain:tstrings; begin //listcomputer is a listview to list all computers;controlcenter is a form. alldomain:=tstringlist.Create ; with netres[0] do  begin dwscope :=RESOURCE_GLOBALNET; dwtype :=RESOURCETYPE_ANY; dwdisplaytype :=RESOURCEDISPLAYTYPE_DOMAIN; dwusage :=RESOURCEUSAGE_CONTAINER; lplocalname :=nil; lpremotename :=nil; lpcomment :=nil; lpprovider :=nil; end;  // 获取所有的域 errcode:=wnetopenenum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,@netres[0],enumhandle);  if errcode=NO_ERROR then begin enumentries:=1024; buffersize:=sizeof(netres); errcode:=wnetenumresource(enumhandle,enumentries,@netres[0],buffersize); end; a:=0; mylistitems :=controlcenter.lstcomputer.Items ; mylistitems.Clear ; while (string(netres[a].lpprovider)<>'') and (errcode=NO_ERROR) do  begin alldomain.Add (netres[a].lpremotename); a:=a+1; end; wnetcloseenum(enumhandle); // 获取所有的计算机 mylistitems :=controlcenter.lstcomputer.Items ;  mylistitems.Clear ; for i:=0 to alldomain.Count-1 do begin with netres[0] do begin dwscope :=RESOURCE_GLOBALNET; dwtype :=RESOURCETYPE_ANY;  dwdisplaytype :=RESOURCEDISPLAYTYPE_SERVER; dwusage :=RESOURCEUSAGE_CONTAINER; lplocalname :=nil;  lpremotename :=pchar(alldomain[i]); lpcomment :=nil; lpprovider :=nil; end;  ErrCode:=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,@netres[0],EnumHandle); if errcode=NO_ERROR then begin EnumEntries:=1024; BufferSize:=SizeOf(NetRes); ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize); end;  a:=0; while (string(netres[a].lpprovider)<>'') and (errcode=NO_ERROR) do  begin mylistitem :=mylistitems.Add ; mylistitem.ImageIndex :=0; mylistitem.Caption :=uppercase(stringreplace(string(NetRes[a].lpremotename),'\\','',[rfReplaceAll])); a:=a+1; end; wnetcloseenum(enumhandle); end; end;  

◇[DELPHI]获取某一计算机上的共享目录 procedure getsharefolder(const computername:string);  var errcode,a:integer; netres:array[0..1023] of netresource; enumhandle:thandle; enumentries,buffersize:dword; s:string; mylistitems:tlistitems; mylistitem:tlistitem; mystrings:tstringlist; begin with netres[0] do begin dwscope :=RESOURCE_GLOBALNET; dwtype :=RESOURCETYPE_DISK;  dwdisplaytype :=RESOURCEDISPLAYTYPE_SHARE; dwusage :=RESOURCEUSAGE_CONTAINER; lplocalname :=nil; lpremotename :=pchar(computername);  lpcomment :=nil; lpprovider :=nil; end;  // 获取根结点 errcode:=wnetopenenum(RESOURCE_GLOBALNET,RESOURCETYPE_DISK,RESOURCEUSAGE_CONTAINER,@netres[0],enumhandle);  if errcode=NO_ERROR then begin EnumEntries:=1024; BufferSize:=SizeOf(NetRes); ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize); end;  wnetcloseenum(enumhandle); a:=0; mylistitems:=controlcenter.lstfile.Items ; mylistitems.Clear ; while (string(netres[a].lpprovider)<>'') and (errcode=NO_ERROR) do  begin with mylistitems do begin mylistitem:=add; mylistitem.ImageIndex :=4; mylistitem.Caption :=extractfilename(netres[a].lpremotename); end; a:=a+1; end; end;  

◇[DELPHI]得到硬盘序列号 var SerialNum : pdword; a, b : dword; Buffer : array [0..255] of char; begin if GetVolumeInformation('c:\', Buffer, SizeOf(Buffer), SerialNum, a, b, nil, 0) then Label1.Caption := IntToStr(SerialNum^); end;  

◇[DELPHI]MEMO的自动翻页 Procedure ScrollMemo(Memo : TMemo; Direction : char);  begin  case direction of 'd': begin  SendMessage(Memo.Handle, { HWND of the Memo Control } WM_VSCROLL, { Windows Message } SB_PAGEDOWN, { Scroll Command } 0) { Not Used } end;  'u' : begin SendMessage(Memo.Handle, { HWND of the Memo Control } WM_VSCROLL, { Windows Message } SB_PAGEUP, { Scroll Command } 0);  { Not Used } end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin ScrollMemo(Memo1,'d');  //上翻页 end; procedure TForm1.Button1Click(Sender: TObject); begin ScrollMemo(Memo1,'u'); //下翻页 end; ◇[DELPHI]DBGrid中回车到下个位置(Tab键) procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);  begin if Key = #13 then if DBGrid1.Columns.Grid.SelectedIndex < DBGrid1.Columns.Count - 1 then DBGrid1.Columns[DBGrid1.Columns.grid.SelectedIndex + 1].Field.FocusControl  else begin Table1.next; DBGrid1.Columns[0].field.FocusControl; end; end;

 ◇[DELPHI]如何安装控件 安装方法:  1.对于单个控件,Component-->install component..-->PAS或DCU文件-->install 2.对于带*.dpk文件的控件包,File-->open(下拉列表框中选*.dpk)-->install即可. 3.对于带*.dpl文件的控件包,Install Packages-->Add-->dpl文件名即可。  4.如果以上Install按钮为失效的话,试试Compile按钮。  5.是run time lib则在option下的packages下的runtimepackes加之. 如果编译时提示文件找不到的话,一般是控件的安装目录不在delphi的Lib目录中,有两种方法可以解决: 1.把安装的原文件拷入到delphi的Lib目录下。 2.或者Tools-->Environment Options中把控件原代码路径加入到Delphi的Lib目录中即可。

 ◇[DELPHI]目录完全删除(deltree) procedure TForm1.DeleteDirectory(strDir:String); var sr: TSearchRec; FileAttrs: Integer; strfilename:string; strPth:string; begin strpth:=Getcurrentdir(); FileAttrs := faAnyFile; if FindFirst(strpth+'\'+strdir+'\*.*', FileAttrs, sr) = 0 then begin if (sr.Attr and FileAttrs) = sr.Attr then begin strfilename:=sr.Name;  if fileexists(strpth+'\'+strdir+'\'+strfilename) then deletefile(strpth+'\'+strdir+'\'+strfilename); end; while FindNext(sr) = 0 do begin if (sr.Attr and FileAttrs) = sr.Attr then begin strfilename:=sr.name; if fileexists(strpth+'\'+strdir+'\'+strfilename) then deletefile(strpth+'\'+strdir+'\'+strfilename); end; end;  FindClose(sr); removedir(strpth+'\'+strdir); end; end;

 ◇[DELPHI]取得TMemo 控件当前光标的行和列信息到Tpoint中 1.function ReadCursorPos(SourceMemo: TMemo): TPoint;  var Point: TPoint; begin  point.y := SendMessage(SourceMemo.Handle,EM_LINEFROMCHAR,SourceMemo.SelStart,0);   point.x := SourceMemo.SelStart-SendMessage(SourceMemo.Handle,EM_LINEINDEX,point.y,0);  Result := Point; end;  2.LineLength:=SendMessage(memol.handle,EM—LINELENGTH,Cpos,0);//行长

 ◇[DELPHI]读硬盘序列号 function GetDiskSerial(DiskChar: Char): string; var SerialNum : pdword; a, b : dword; Buffer : array [0..255] of char; begin result := ""; if GetVolumeInformation(PChar(diskchar+":\"), Buffer, SizeOf(Buffer), SerialNum, a, b, nil, 0) then  Result := IntToStr(SerialNum^); end;

◇[INTERNET]CSS常用综合技巧 1。P:first-letter { font-size: 300%; float: left }//首字会比普通字体加大三倍。  2。<LINK REL=StyleSheet HREF="basics.css" TITLE="Contemporary">//连接一个外部样式表 3。嵌入一个样式表 <STYLE TYPE="text/css" MEDIA=screen> <!-- @import url(http://www.htmlhelp.com/style.css);//外部导入一个样式表 @import url(/stylesheets/punk.css); //同上 BODY { background: url(foo.gif) red; color: black } .punk { color: lime; background: #ff80c0 }//引用见5。 #wdg97 { font-size: larger }//引用见6。 --> </STYLE> 4。<P STYLE="color: red; font-family: 'New Century Schoolbook', serif">  //内联样式 <SPAN STYLE="font-family: Arial">Arial</SPAN>//SPAN接受STYLE、CLASS和ID属性 <DIV class="note"><P>DIV可以包含段落、标题、表格甚至其它部分</P></DIV>  5。<H1 class="punk">CLASS属性</H1>//定义见3。  6。<P ID=wdg97>ID属性</P>//定义见3。  7。属性列表 字体风格:font-style: [normal | italic | oblique];  字体大小:font-size: [xx-small | x-small | small | medium | large | x-large | xx-large | larger | smaller | <长度> | <百分比>]  文本修饰:text-decoration:[ underline || overline || line-through || blink ] 文本转换:text-transform:[none | capitalize | uppercase | lowercase] 背景颜色:颜色> | transparent] 背景图象:background-image:[<URLs> | none] 行高:line-height: [normal | <数字> | <长度> | <百分比>] 边框样式:border-style: [ none | dotted | dashed | solid | double | groove | ridge | inset | outset ] 漂浮:float: [left | right | none] 8。长度单位 相对单位: em (em,元素的字体的高度) ex (x-height,字母 "x" 的高度) px (像素,相对于屏幕的分辨率) 绝对长度: in (英寸,1英寸=2.54厘米) cm (厘米,1厘米=10毫米) mm (米) pt (点,1点=1/72英寸) pc (帕,1帕=12点) ◇[DELPHI]VCL制作简要步骤 1.创建部件属性方法事件 (建立库单元,继承为新的类型,添加属性、方法、事件,注册部件,建立包文件)  2.消息处理  3.异常处理  4.部件可视

 ◇[DELPHI]动态连接库的装载 静态装载:procedure name;external 'lib.dll'; 动态装载:var handle:Thandle; handle:=loadlibrary('lib.dll'); if handle<>0 then begin {dosomething} freelibrary(handle); end;  

◇[DELPHI]指针变量和地址 var x,y:integer;p:^integer;//指向INTEGER变量的指针 x:=10;//变量赋值 p:=@x;//变量x的地址 y:=p^; //为Y赋值指针P @@procedure//返回过程变量的内存地址  

◇[DELPHI]判断字符是汉字的一个字符 ByteType('你好haha吗',1) = mbLeadByte//是第一个字符  ByteType('你好haha吗',2) = mbTrailByte//是第二个字符 ByteType('你好haha吗',5) = mbSingleByte//不是中文字符

◇[DELPHI]memo的定位操作 memo1.lines.delete(0)//删除第1行 memo1.selstart:=10//定位10字节处  

◇[DELPHI]获得双字节字符内码 function getit(s: string): integer; begin Result := byte(s[1]) * $100 + byte(s[2]); end;  使用:getit('计')//$bcc6 即十进制 48326

 ◇[DELPHI]调用ADD数据存储过程 存储过程如下: create procedure addrecord( record1 varchar(10) record2 varchar(20) ) as begin insert into tablename (field1,field2) values(:record1,:record2) end 执行存储过程: EXECUTE procedure addrecord("urrecord1","urrecord2")

◇[DELPHI]将文件存到blob字段中 function blobcontenttostring(const filename: string):string; begin with tfilestream.create(filename,fmopenread) do  try setlength(Result,size); read(Pointer(Result)^,size); finally free; end; end;  //保存字段 begin if (opendialog1.execute) then begin sFileName:=OpenDialog1.FileName; adotable1.edit; adotable1.fieldbyname('visio').asstring:=Blobcontenttostring(FileName); adotable1.post; end;

 ◇[DELPHI]把文件全部复制到剪贴板 uses shlobj,activex,clipbrd; procedure Tform1.copytoclipbrd(var FileName:string); var FE:TFormatEtc;  Medium: TStgMedium; dropfiles:PDropFiles; pFile:PChar; begin FE.cfFormat := CF_HDROP; FE.dwAspect := DVASPECT_CONTENT; FE.tymed := TYMED_HGLOBAL;  Medium.hGlobal := GlobalAlloc(GMEM_SHARE or GMEM_ZEROINIT, SizeOf(TDropFiles)+length(FileName)+1); if Medium.hGlobal<>0 then begin Medium.tymed := TYMED_HGLOBAL; dropfiles := GlobalLock(Medium.hGlobal); try dropfiles^.pfiles := SizeOf(TDropFiles); dropfiles^.fwide := False; longint(pFile) := longint(dropfiles)+SizeOf(TDropFiles); StrPCopy(pFile,FileName); Inc(pFile, Length(FileName)+1); pFile^ := #0; finally GlobalUnlock(Medium.hGlobal); end; Clipboard.SetAsHandle(CF_HDROP,Medium.hGlobal); end; end;

◇[DELPHI]列举当前系统运行进程 uses TLHelp32; procedure TForm1.Button1Click(Sender: TObject); var lppe: TProcessEntry32; found : boolean; Hand : THandle;  begin Hand := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0); found := Process32First(Hand,lppe); while found do begin ListBox1.Items.Add(StrPas(lppe.szExeFile)); found := Process32Next(Hand,lppe); end; end; ◇[DELPHI]根据BDETable1建立新表Table2 Table2:=TTable.Create(nil);  try Table2.DatabaseName:=Table1.DatabaseName; Table2.FieldDefs.Assign(Table1.FieldDefs);  Table2.IndexDefs.Assign(Table1.IndexDefs); Table2.TableName:='new_table'; Table2.CreateTable(); finally Table2.Free(); end;

 ◇[DELPHI]最菜理解DLL建立和引用 //先看DLL source(FILE-->NEW-->DLL) library project1; uses SysUtils, Classes; function addit(f:integer;s:integer):integer;export; begin makeasum:=f+s; end; exports addit; end. //调用(IN ur PROJECT) implementation function addit(f:integer;s:integer):integer;far;external 'project1'; //申明 {调用就是addit(2,4);结果显示6}

◇[DELPHI]动态读取程序自身大小 function GesSelfSize: integer; var f: file of byte; begin filemode := 0; assignfile(f, application.exename); reset(f); Result := filesize(f);//单位是字节 closefile(f); end;

 ◇[DELPHI]读取BIOS信息 with Memo1.Lines do begin Add('MainBoardBiosName:'+^I+string(Pchar(Ptr($FE061)))); Add('MainBoardBiosCopyRight:'+^I+string(Pchar(Ptr($FE091)))); Add('MainBoardBiosDate:'+^I+string(Pchar(Ptr($FFFF5)))); Add('MainBoardBiosSerialNo:'+^I+string(Pchar(Ptr($FEC71)))); end;  

◇[DELPHI]动态建立MSSQL别名 procedure TForm1.Button1Click(Sender: TObject);  var MyList: TStringList; begin MyList := TStringList.Create; try with MyList do begin Add('SERVER NAME=210.242.86.2');  Add('DATABASE NAME=db'); Add('USER NAME=sa'); end; Session1.AddAlias('TESTSQL', 'MSSQL', MyList); //ミMSSQL Session1.SaveConfigFile; finally MyList.Free; Session1.Active:=True; Database1.DatabaseName:='DB'; Database1.AliasName:='TESTSQL';  Database1.LoginPrompt:=False; Database1.Params.Add('USER NAME=sa'); Database1.Params.Add('PASSWORD='); Database1.Connected:=True; end; end; procedure TForm1.Button2Click(Sender: TObject); begin Database1.Connected:=False; Session1.DeleteAlias('TESTSQL');  end;

 ◇[DELPHI]播放背景音乐 uses mmsystem //播放音乐 MCISendString('OPEN e:\1.MID TYPE SEQUENCER ALIAS NN', '', 0, 0); MCISendString('PLAY NN FROM 0', '', 0, 0);  MCISendString('CLOSE ANIMATION', '', 0, 0); end; //停止播放 MCISendString('OPEN e:\1.MID TYPE SEQUENCER ALIAS NN', '', 0, 0); MCISendString('STOP NN', '', 0, 0);  MCISendString('CLOSE ANIMATION', '', 0, 0);

 ◇[DELPHI]接口和类的一个范例代码 Type{接口和类申明:区别在于不能在接口中申明数据成员、任何非公有的方法、公共方法不使用PUBLIC关键字}  Isample=interface//定义Isample接口 function getstring:string; end; Tsample=class(TInterfacedObject,Isample) public function getstring:string; end;

 //function定义 function Tsample.getstring:string; begin result:='what show is '; end; //调用类对象 var sample:Tsample; begin sample:=Tsample.create; showmessage(sample.getstring+'class object!'); sample.free; end;

//调用接口 var sampleinterface:Isample; sample:Tsample; begin sample:=Tsample.create; sampleInterface:=sample; //Interface的实现必须使用class {以上两行也可表达成sampleInterface:=Tsample.create;} showmessage(sampleInterface.getstring+'Interface!');

 //sample.free;{和局部类不同,Interface中的类自动释放} sampleInterface:=nil;{释放接口对象} end;

◇[DELPHI]任务条就看不当程序 var ExtendedStyle : Integer; begin Application.Initialize; ExtendedStyle := GetWindowLong (Application.Handle, GWL_EXSTYLE); SetWindowLong(Application.Handle, GWL_EXSTYLE, ExtendedStyle OR WS_EX_TOOLWINDOW AND NOT WS_EX_APPWINDOW); Application.CreateForm(TForm1, Form1); Application.Run; end.  

◇[DELPHI]ALT+CTRL+DEL看不到程序 在implementation后添加声明: function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL'; RegisterServiceProcess(GetCurrentProcessID, 1);//隐藏 RegisterServiceProcess(GetCurrentProcessID, 0);//显示

◇[DELPHI]检测光驱符号 var drive:char; cdromID:integer; begin for drive:='d' to 'z' do begin cdromID:=GetDriveType(pchar(drive+':\')); if cdromID=5 then showmessage('你的光驱为:'+drive+'盘!'); end; end;  

◇[DELPHI]检测声卡 if auxGetNumDevs()<=0 then showmessage('No soundcard found!') else showmessage('Any soundcard found!');

◇[DELPHI]在字符串网格中画图 StringGrid.OnDrawCell事件 with StringGrid1.Canvas do Draw(Rect.Left, Rect.Top, Image1.Picture.Graphic);

 ◇[SQL SERVER]SQL中代替Like语句的另一种写法 比如查找用户名包含有"c"的所有用户, 可以用 use mydatabase select * from table1 where username like'%c%" 下面是完成上面功能的另一种写法: use mydatabase select * from table1 where charindex('c',username)>0 这种方法理论上比上一种方法多了一个判断语句,即>0, 但这个判断过程是最快的, 我想信80%以上的运算都是花在查找字 符串及其它的运算上, 所以运用charindex函数也没什么大不了.  用这种方法也有好处, 那就是对%,|等在不能直接用like 查找到的字符中可以直接在这charindex中运用,  如下: use mydatabase select * from table1 where charindex('%',username)>0 也可以写成: use mydatabase select * from table1 where charindex(char(37),username)>0 ASCII的字符即为%  

◇[DELPHI]SQL显示多数据库/表 SELECT DISTINCT A.bianhao,a.xingming, b.gongzi FROM "jianjie.dbf" a, "gongzi.DBF" b WHERE A.bianhao=b.bianhao

◇[DELPHI]RFC(Request For Comment)相关 IETF(Internet Engineering Task Force)维护RFC文档http://www.ietf.cnri.reston.va.us RFC882:报文头标结构  RFC1521:MIME第一部分,传输报文方法 RFC1945:多媒体文档传输文档

◇[DELPHI]TNMUUProcessor的使用 var inStream,outStream:TFileStream; begin inStream:=TFileStream.create(infile.txt,fmOpenRead); outStream:=TFileStream(outfile.txt,fmCreate); NMUUE.Method:=uuCode;{UUEncode/Decode} //NMUUE.Method:=uuMIME;{MIME} NMUUE.InputStream:=InStream; NMUUE.OutputStream:=OutStream; NMUUE.Encode;{编码处理} //NMUUE.Decode; {解码处理} inStream.free; outStream.free; end; ◇[DELPHI]TFileStream的操作 //从文件流当前位置读count字节到缓冲区BUFFER function read(var buffer;count:longint):longint;override; //将缓冲区BUFFER读到文件流中 function write(const buffer;count:longint):longint;override; //设置文件流当前读写指针为OFFSET function seek(offset:longint;origin:word):longint;override; origin={soFromBeginning,soFromCurrent,soFromEnd}  //从另一文件流中当前位置复制COUNT到当前文件流当前位置 function copyfrom(source:TStream;count:longint):longint; //读指定文件到文件流 var myFStream:TFileStream; begin myFStream:=TFileStream.create(OpenDialog1.filename,fmOpenRead); end; [JavaScript]检测是否安装IE插件Shockwave&Quicktime <script LANGUAGE="JavaScript"> var myPlugin = navigator.plugins["Shockwave"]; if (myPlugin) document.writeln("你已经安装了 Shockwave!") else document.writeln("你尚未安装 Shockwave!") </script><br> <script LANGUAGE="JavaScript"> var myPlugin = navigator.plugins["Quicktime"]; if (myPlugin) document.writeln("你已经安装了Quicktime!") else document.writeln("你尚未安装 Quicktime!") </script> [INTERNET]表格中引用IFRAME效果 <table border="0" cellpadding="0" cellspacing="0" width="100%"> <tr> <td><ILAYER id="ad1" visibility="hidden" height="60"></ILAYER>  <NOLAYER> <IFRAME SRC="i:\jinhtml\zj\h21.htm" width="500" height="200" marginwidth="0" marginheight="110" hspace="10" vspace="20" frameborder="0" scrolling="1"> </IFRAME> </NOLAYER> </td> </tr> </table>

◇[DELPHI]WebBrowser控件技巧

 1。实现打印功能 var vaIn, vaOut: OleVariant; WebBrowser.ControlInterface.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, vaIn, vaOut);  

2。WebBrowser从流中读取页面 function TForm1.LoadFromStream(const AStream: TStream): HRESULT; begin AStream.seek(0, 0);  Result := (WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(AStream)); end;  

3。"about:" protocol will let you Navigate to an HTML string: procedure TForm1.LoadHTMLString(sHTML: String); var Flags, TargetFrameName, PostData, Headers: OleVariant; WebBrowser1.Navigate('about:' + sHTML, Flags, TargetFrameName, PostData, Headers)  

4。"res:" protocol will let you Navigate to an HTML file stored as a resource.  More informations is available from the Microsoft site: procedure TForm1.LoadHTMLResource; var Flags, TargetFrameName, PostData, Headers: OleVariant; WebBrowser1.Navigate('res://' + Application.ExeName + '/myhtml', Flags, TargetFrameName, PostData, Headers) 使用brcc32.exe建立资源文件 (*.rc) MYHTML 23 ".\html\myhtml.htm" MOREHTML 23 ".\html\morehtml.htm" {$R HTML.RES} //html.rc被编译成html.res

 5。保存完整的HTML文件 var HTMLDocument: IHTMLDocument2; PersistFile: IPersistFile; begin HTMLDocument := WebBrowser1.Document as IHTMLDocument2;  PersistFile := HTMLDocument as IPersistFile; PersistFile.Save(StringToOleStr('test.htm'), True); while HTMLDocument.readyState <> 'complete' do  Application.ProcessMessages; end;

◇[DELPHI]安装WebBrowser控件(内嵌IE控件) 你必须先确定系统已安装Internet Explorer4或以后版本,DELPHI菜单--Component- - Import ActiveX Contro, 列表中选择Microsoft Internet Controls"并ADD到一个已存在的包文件中,WebBrowser控件将显示在ActiveX控件面板。

 ◇[DELPHI]实现windows2000半透明窗体 function SetLayeredWindowAttributes(hwnd:HWND; crKey:Longint; bAlpha:byte; dwFlags:longint ):longint; stdcall; external user32;//函数声明 procedure TForm1.FormCreate(Sender: TObject); var l:longint; begin l:=getWindowLong(Handle, GWL_EXSTYLE); l := l Or $80000; SetWindowLong (handle, GWL_EXSTYLE, l); SetLayeredWindowAttributes(handle, 0, 180, 2); end;

◇[DELPHI]程序显示广告WebBrowser加载图片 var Flag, frame, pData, Header: OLEVariant; begin WebBrowser1.Navigate('http://www.chineseall.com/images/logo.jpg', flag, frame,pData, Header) end;

◇[DELPHI]计算一个目录的大小 function GetDirectorySize(const ADirectory: string): Integer; var Dir: TSearchRec; Ret: integer; Path: string; begin Result := 0; Path := ExtractFilePath(ADirectory); Ret := Sysutils.FindFirst(ADirectory, faAnyFile, Dir); if Ret <> NO_ERROR then exit;  try while ret=NO_ERROR do begin inc(Result, Dir.Size); //如果是目录,且不是'.'或'..'则进行递归调用 if (Dir.Attr in [faDirectory]) and (Dir.Name[1] <> '.') then Inc(Result, GetDirectorySize(Path + Dir.Name + '\*.*')); Ret := Sysutils.FindNext(Dir); end; finally Sysutils.FindClose(Dir); end; end; ◇[DELPHI]清空一个目录 function EmptyDirectory(TheDirectory :String ; Recursive : Boolean) : Boolean; var SearchRec : TSearchRec;  Res : Integer; begin Result := False; TheDirectory := NormalDir(TheDirectory); Res := FindFirst(TheDirectory + '*.*', faAnyFile, SearchRec);  try while Res = 0 do begin if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then begin if ((SearchRec.Attr and faDirectory) > 0) and Recursive then begin EmptyDirectory(TheDirectory + SearchRec.Name, True); RemoveDirectory(PChar(TheDirectory + SearchRec.Name)); end else begin DeleteFile(PChar(TheDirectory + SearchRec.Name)) end; end; Res := FindNext(SearchRec); end;  Result := True; finally FindClose(SearchRec.FindHandle); end; end;

 ◇[DELPHI]发布ADO程序之安装ADO 运行一次 MDac_typ.exe ,这个文件在微软的 Windows、IE、Office、Visual Studio 中都有。 安装程序所安装后的目录与程序中设置的目录路径一样,C:\Program Files\Common Files\System\ado文件夹中有没有ADO组件,装ACCESS2000就有ADO2.1,没有则安装MS OFfice2000, 编译要去掉project->Option->Packages对话框中的Build With RunTime Library的勾。

 ◇[DELPHI]拦截Windows系统消息:WM_CLOSE消息 procedure WMClose(var Msg: TMessage);message WM_CLOSE; procedure TMainForm.WMClose(var Msg: TMessage);  begin m_bCloseNoQuery := false; inherited; end;   来自:Adnil, 时间:2002-3-26 14:54:00, ID:1003492 强! 大致看了一下,提两个修改意见:

 ◇[DELPHI]设置窗体的最大显示 onFormCreate事件 self.width:=screen.width; self.height:=screen.height; 修改: self.windowstate := wsmaxmized;

 ◇[DELPHI]文件名的非法字符过滤 for i:=1 to length(s) do if s[i] in ['\','/',':','*','?','<','>','|'] then 修改: try slist := tstringlist.create; slist.savetofile(s); result := true;  deletefile(s); except result := false; end; 利用异常机制,这样可以兼容linux的文件命名。 追加部分

◇ [DELPHI]配置ODBC的代码 var reg: TRegistry; Driver: string; begin //建立和更新odbc数据源 //查找ODBCINST.INI键,如果sql server的驱动程序没有安装,则提示退出 // 如果存在,则进行配置 reg := TRegistry.Create; try with reg do begin RootKey := HKEY_LOCAL_MACHINE;  if OpenKey('Software\ODBC\ODBCINST.INI\SQL Server', False) then begin //如果存在sql server 驱动程序 Driver := ReadString('Driver'); CloseKey; if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources', True) then begin //注册一个DSN名称 WriteString(Edit_DataSource.Text, 'SQL Server'); end else begin //创建键值失败 Application.MessageBox(pchar('在创建DSN' + edit_datasource.text + '时发生错误'), '创建ODBC数据源失败', MB_ICONINFORMATION or MB_OK); exit; end; CloseKey; //end 建立dsn if OpenKey('Software\ODBC\ODBC.INI\' + Edit_DataSource.Text, True) then begin WriteString('Database', Edit_DataSource.Text);  WriteString('Driver', Driver); WriteString('LastUser', Edit_LoginUser.Text); WriteString('Server', Edit_Ip.Text); end else begin //创建键值失败 Application.MessageBox(pchar('在创建DSN' + edit_datasource.text + '时发生错误'), '创建ODBC数据源失败', MB_ICONINFORMATION or MB_OK); exit; end; CloseKey; end else Application.MessageBox('在当前机器上没有安装 SQL Server的ODBC 驱动程序!,请安装相应的驱动程序', '驱动程序出错', MB_ICONINFORMATION or MB_OK);  CloseKey; end; finally reg.Free; end; end;

◇[DELPHI]验证邮件地址有效函数 function IsValidEmail(const Value: string): boolean;  function CheckAllowed(const s: string): boolean; var i: integer;  begin Result:= false; for i:= 1 to Length(s) do begin // illegal char in s -> no valid address if not (s[i] in ['a'..'z','A'..'Z','0'..'9','_','-','.']) then Exit; end; Result:= true; end; var i: integer; namePart, serverPart: string;  begin // of IsValidEmail Result:= false; i:= Pos('@', Value); if (i = 0) or (pos('..', Value) > 0) then Exit; namePart:= Copy(Value, 1, i - 1); serverPart:= Copy(Value, i + 1, Length(Value)); if (Length(namePart) = 0) // @ or name missing or ((Length(serverPart) < 4)) // name or server missing or then Exit; // too short i:= Pos('.', serverPart);  // must have dot and at least 3 places from end if (i = 0) or (i >= (Length(serverPart) - 2)) then Exit;  Result:= CheckAllowed(namePart) and CheckAllowed(serverPart); end;

 ◇[DELPHI]设定IE的默认打开主页 procedure SetStartPage(StartPage:string); var Reg:TRegistry; begin Reg:=TRegistry.Create; Reg.RootKey:=HKEY_CURRENT_USER; Reg.OpenKey(StartPagePath,False); Reg.WriteString('Start Page',StartPage); Reg.Free; end;

 ◇[DELPHI]FORM边缘特效 procedure TForm1.FormCreate(Sender: TObject); var Region1 : array of tPoint; Region1hrgn : hRgn; Begin SetLength(Region1,59);  Region1[0].X:=12; Region1[0].Y:=6; Region1[1].X:=484; Region1[1].Y:=6; Region1[2].X:=484; Region1[2].Y:=7; Region1[3].X:=486; Region1[3].Y:=7; Region1[4].X:=486; Region1[4].Y:=8; Region1[5].X:=487; Region1[5].Y:=8; Region1[6].X:=487; Region1[6].Y:=9; Region1[7].X:=488;Region1[7].Y:=9;Region1.X:=488;  Region1.Y:=10; Region1[9].X:=489; Region1[9].Y:=10;Region1[10].X:=489;  Region1[10].Y:=12;Region1[11].X:=490; Region1[11].Y:=12; Region1[12].X:=490;  Region1[12].Y:=285; Region1[13].X:=489; Region1[13].Y:=285; Region1[14].X:=489;  Region1[14].Y:=287; Region1[15].X:=488; Region1[15].Y:=287; Region1[16].X:=488;  Region1[16].Y:=288; Region1[17].X:=487; Region1[17].Y:=288; Region1[18].X:=487; Region1[18].Y:=289; Region1[19].X:=486; Region1[19].Y:=289; Region1[20].X:=486;  Region1[20].Y:=290; Region1[21].X:=484; Region1[21].Y:=290; Region1[22].X:=484; Region1[22].Y:=291; Region1[23].X:=101; Region1[23].Y:=291; Region1[24].X:=100; Region1[24].Y:=290; Region1[25].X:=99; Region1[25].Y:=290; Region1[26].X:=98;  Region1[26].Y:=289; Region1[27].X:=97; Region1[27].Y:=288; Region1[28].X:=96; Region1[28].Y:=287; Region1[29].X:=95; Region1[29].Y:=286; Region1[30].X:=95;  Region1[30].Y:=284; Region1[31].X:=94; Region1[31].Y:=283; Region1[32].X:=94; Region1[32].Y:=200; Region1[33].X:=93; Region1[33].Y:=199; Region1[34].X:=93;  Region1[34].Y:=198; Region1[35].X:=92; Region1[35].Y:=197; Region1[36].X:=91; Region1[36].Y:=196; Region1[37].X:=90; Region1[37].Y:=195; Region1[38].X:=89; Region1[38].Y:=194; Region1[39].X:=88; Region1[39].Y:=194; Region1[40].X:=87; Region1[40].Y:=193; Region1[41].X:=14; Region1[41].Y:=193; Region1[42].X:=13; Region1[42].Y:=192; Region1[43].X:=12; Region1[43].Y:=192; Region1[44].X:=11;  Region1[44].Y:=191; Region1[45].X:=10; Region1[45].Y:=190; Region1[46].X:=9;  Region1[46].Y:=189; Region1[47].X:=8; Region1[47].Y:=188; Region1[48].X:=8; Region1[48].Y:=187; Region1[49].X:=7; Region1[49].Y:=186; Region1[50].X:=7; Region1[50].Y:=184; Region1[51].X:=6; Region1[51].Y:=183; Region1[52].X:=6; Region1[52].Y:=12; Region1[53].X:=7; Region1[53].Y:=11; Region1[54].X:=7; Region1[54].Y:=10; Region1[55].X:=8; Region1[55].Y:=9; Region1[56].X:=9; Region1[56].Y:=8; Region1[57].X:=10; Region1[57].Y:=7; Region1[58].X:=11;  Region1[58].Y:=7; Region1hrgn:=CreatePolygonRgn(Region1[0],59,2); SetWindowRgn(Handle, Region1hrgn, True); end;  

◇[DELPHI]LISTVIEW实现隔行背景颜色 procedure TForm1.ListView1AdvancedCustomDrawItem(Sender: TCustomListView;  Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean); begin if item.Index mod 2 = 1 then begin sender.Canvas.Brush.Color:=clYellow;  end else sender.Canvas.Brush.Color:=clwhite; end;  

◇[DELPHI]判断机器是否网络状态 uses WinInet; procedure TForm1.Button1Click(Sender: TObject); function GetOnlineStatus : Boolean; var ConTypes : Integer;  begin ConTypes := INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN + INTERNET_CONNECTION_PROXY; if (InternetGetConnectedState(@ConTypes, 0) = False) then Result := False else Result := True; end;  begin if not GetOnlineStatus then ShowMessage('Not Connected'); end;  

◇[DELPHI]窗体渐渐出现 AnimateWindow(Handle,1000,AW_CENTER);  //在窗体创建事件中 ◇[DELPHI]制作竖式菜单图片的关键代码 ONDrawItem事件 begin acanvas.Draw(0,2,image1.picture.bitmap); anvas.TextOut(arect.left+image1.picture.bitmap.width+2,arect.top,tmenuitem(sender).caption); end;

转载于:https://www.cnblogs.com/sharon0203/p/7300151.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
大学生在线租房平台管理系统按照操作主体分为管理员和用户。管理员的功能包括报修管理、报修评价管理、字典管理、房东管理、房屋管理、房屋收藏管理、房屋留言管理、房屋租赁管理、租房论坛管理、公告信息管理、留言板管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 大学生在线租房平台管理系统可以提高大学生在线租房平台信息管理问题的解决效率,优化大学生在线租房平台信息处理流程,保证大学生在线租房平台信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理大学生在线租房平台信息,包括房屋管理,培训管理,报修管理,薪资管理等,可以管理公告。 房屋管理界面,管理员在房屋管理界面可以对界面显示,可以对房屋信息的房屋状态进行查看,可以添加新的房屋信息等。报修管理界面,管理员在报修管理界面查看报修种类信息,报修描述信息,新增报修信息等。公告管理界面,管理员在公告管理界面新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
基于hal库的OLED显示屏驱动C语言实现源码.zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip
The `copy` module in Python provides functions for creating copies of objects. The `copy()` function creates a shallow copy of an object, while the `deepcopy()` function creates a deep copy. A shallow copy creates a new object with the same values as the original object, but any mutable objects within the original object are still references to the original object. In other words, changes to the mutable objects in the copy will also be reflected in the original object. A deep copy creates a new object with the same values as the original object, and any mutable objects within the original object are also copied recursively, so changes to the mutable objects in the copy will not be reflected in the original object. Here is an example to illustrate the difference between shallow copy and deep copy: ``` import copy # create a list with a nested list original_list = [1, 2, [3, 4]] shallow_copy = copy.copy(original_list) deep_copy = copy.deepcopy(original_list) # modify the nested list in the shallow copy shallow_copy[2][0] = 5 # print the original list and the shallow copy print(original_list) # [1, 2, [5, 4]] print(shallow_copy) # [1, 2, [5, 4]] # modify the nested list in the deep copy deep_copy[2][0] = 6 # print the original list and the deep copy print(original_list) # [1, 2, [5, 4]] print(deep_copy) # [1, 2, [6, 4]] ``` In this example, we create a list with a nested list `[3, 4]`. We then create a shallow copy of the original list using `copy.copy()`, and a deep copy using `copy.deepcopy()`. We modify the nested list in the shallow copy by changing the first element from 3 to 5, and we modify the nested list in the deep copy by changing the first element from 3 to 6. When we print the original list and the shallow copy, we see that the nested list has been modified in both, because the shallow copy only creates a new reference to the nested list. However, when we print the original list and the deep copy, we see that the nested list has only been modified in the deep copy, because the deep copy creates a new copy of the nested list.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值