随笔 - 110  文章 - 28 评论 - 26 

留言簿(1)

随笔分类(103)

随笔档案(110)

文章分类(25)

文章档案(28)

新闻档案(3)

友情连接

  • 小蜜蜂
  • 马氏膏药网
  • 淋巴结肿大,淋巴结核,淋巴结炎 乳腺增生,小叶增生 颈椎病,腰椎病,腰间盘突出 马氏淋巴消炎贴,马氏增生散结贴,马氏关节肌肉贴
  • 黑客基地
  • 全球最大的黑客门户网站

最新随笔

积分与排名

  • 积分 - 151015
  • 排名 - 44

最新评论

阅读排行榜

评论排行榜

在上面两个中我们都是把一个文件做为整体进行复制

这一节我们要把文件分成块来一块块复制

procedure TForm1.Button1Click(Sender: TObject);
const
buffsize=4096;
var
instrm,outstrm:tfilestream;
i,biaoji:integer;
p:array [1..buffsize] of char;
begin
instrm:=tfilestream.Create('c:\my.exe',fmOpenRead);//流打开文件
outstrm:=tfilestream.Create('c:\ok.exe',fmCreate);//流保存的文件
i:=instrm.Size;
instrm.Position:=0;//把流指针放在开始位置,用时要从头读取
while instrm.Position <=i do
begin
  if  (i-instrm.Position)> buffsize then
  begin
     instrm.ReadBuffer(p,buffsize);
     outstrm.WriteBuffer(p,buffsize);
  end
  else
  begin
     biaoji:=i-instrm.Position;//如果没有这里中转,余下部分不能写入
     instrm.ReadBuffer(p,biaoji);
     outstrm.WriteBuffer(p,biaoji);
     break;
  end;
end;
FreeAndNil(instrm);
FreeAndNil(outstrm);
application.MessageBox('复制成功','good',mb_ok);
end;

说明:
while 以4096个char为一块读一程序  do
begin
   if  4096正数倍then
  一块块写入
else
不够4096的把余下的全部写入

结束


为什么是4096呢?
这里只能说方面机算机使用,也可是512 1024  2048 这样的数计算机使用快,内存全部同样
现样你也可以是1  2  3  ....更大的数
还能是
p:array [1..buffsize] of char;
改为:
p:char;
这样会一个字节一个字节的复制
对于大文件来说会慢些而已
posted @ 2009-01-23 22:44 小叶子 阅读(1060) | 评论 (0)编辑 收藏
TFileStream- 文件流 复制文件(1)
是直接用copyfrom(),方面易懂
在这里我们用一个变量来中转,然后再去保存
var
instrm,outstrm:tfilestream;
i:integer;
p:pchar;
begin
instrm:=tfilestream.Create('c:\my.exe',fmOpenRead);//流打开文件
outstrm:=tfilestream.Create('c:\ok.exe',fmCreate);//流保存的文件
i:=instrm.Size;
instrm.Position:=0;//把流指针放在开始位置,用时要从头读取
getmem(p,i);//分配内存
instrm.readbuffer(p^,i);//这里是P的指针,而不是P
outstrm.Write(p^,i);
freemem(p);
FreeAndNil(instrm);
FreeAndNil(outstrm);
application.MessageBox('复制成功','good',mb_ok);
end;
posted @ 2009-01-23 22:02 小叶子 阅读(1158) | 评论 (0)编辑 收藏
TFileStream可实现对文件的复制
下面做个例子(我感觉例子是最好的记忆方法)
先放入C下一个文件:my.exe
新建工程,放一button组件
button.caption:=复制

procedure TForm1.Button1Click(Sender: TObject);
var
instrm,outstrm:tfilestream;
begin
instrm:=tfilestream.Create('c:\my.exe',fmOpenRead);//流打开文件
outstrm:=tfilestream.Create('c:\ok.exe',fmCreate);//流保存的文件
outstrm.CopyFrom(instrm,instrm.Size);
FreeAndNil(instrm);
FreeAndNil(outstrm);
application.MessageBox('复制成功','good',mb_ok);
end;

一次很简单的复制成功了
posted @ 2009-01-23 21:17 小叶子 阅读(954) | 评论 (0)编辑 收藏

些书由陈国强编写
中文说明
下载点击
/Files/shuyezi122/API32.rar

posted @ 2009-01-21 17:39 小叶子 阅读(5129) | 评论 (5)编辑 收藏
TStream 是一个抽象的基类, 不能直接生成对象. 在具体的应用中, 主要使用它的子孙类:
TFileStream: 文件流
TStringStream: 字符串流
TMemoryStream: 内存流
TResourceStream: 资源文件流
THandleStream: 是 TFileStream 的父类、TStream 的子类
TCustomMemoryStream: 是 TMemoryStream 和 TResourceStream 的父类、TStream 的子类
posted @ 2009-01-21 17:32 小叶子 阅读(853) | 评论 (1)编辑 收藏

System.IsMemoryManagerSet;
System.Move;
System.New;
System.ReallocMem;
System.ReallocMemory;
System.SetMemoryManager;
System.SysAllocMem;
System.SysFreeMem;
System.SysGetMem;
System.SysReallocMem;

SysUtils.DisposeStr;
SysUtils.NewStr;

TlHelp32.Heap32First;
TlHelp32.Heap32ListFirst;
TlHelp32.Heap32ListNext;
TlHelp32.Heap32Next;

Windows.CopyMemory;
Windows.FillMemory;
Windows.GetProcessHeap;
Windows.GetProcessHeaps;
Windows.GlobalAlloc;
Windows.GlobalAllocPtr;
Windows.GlobalCompact;
Windows.GlobalDiscard;
Windows.GlobalFix;
Windows.GlobalFlags;
Windows.GlobalFree;
Windows.GlobalFreePtr;
Windows.GlobalHandle;
Windows.GlobalLock;
Windows.GlobalMemoryStatus;
Windows.GlobalReAlloc;
Windows.GlobalReAllocPtr;
Windows.GlobalSize;
Windows.GlobalUnfix;
Windows.GlobalUnlock;
Windows.GlobalUnWire;
Windows.GlobalWire;
Windows.HeapAlloc;
Windows.HeapCompact;
Windows.HeapCreate;
Windows.HeapDestroy;
Windows.HeapFree;
Windows.HeapLock;
Windows.HeapReAlloc;
Windows.HeapSize;
Windows.HeapUnlock;
Windows.HeapValidate;
Windows.HeapWalk;
Windows.IsBadCodePtr;
Windows.IsBadReadPtr;
Windows.IsBadStringPtr;
Windows.IsBadWritePtr;
Windows.MoveMemory;
Windows.VirtualAlloc;
Windows.VirtualAllocEx;
Windows.VirtualFree;
Windows.VirtualFreeEx;
Windows.VirtualLock;
Windows.VirtualProtect;
Windows.VirtualProtectEx;
Windows.VirtualQuery;
Windows.VirtualQueryEx;
Windows.ZeroMemory;

Windows.LocalAlloc;
Windows.LocalCompact;
Windows.LocalDiscard;
Windows.LocalFlags;
Windows.LocalFree;
Windows.LocalLock;
Windows.LocalReAlloc;
Windows.LocalShrink;
Windows.LocalSize;
Windows.LocalUnlock;

posted @ 2009-01-21 17:32 小叶子 阅读(1404) | 评论 (0)编辑 收藏

新建
new->other->dll wizard

library new;

uses
  SysUtils,
  Classes,
  Dialogs;

{$R *.res}

procedure dll;
begin
showmessage('delphi');
end;

exports
 dll;

begin
end.

posted @ 2009-01-21 16:34 小叶子 阅读(750) | 评论 (0)编辑 收藏

var
  Form1: TForm1;
type
TMB = function(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall;
implementation

{$R *.dfm}
var
 MB: TMB;
 inst: LongWord;

procedure TForm1.Button1Click(Sender: TObject);
var
  t,b: PChar;
begin
inst := LoadLibrary('user32.dll');
 MB := GetProcAddress(inst, 'MessageBoxA'){注意MessageBoxA这里区分大小写,他NND的让我试了半天才知道这里错了,你们也要注意了}
  t := '标题';
  b := '内容';
  MB(0, b, t, 0);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 FreeLibrary(inst);
end;

posted @ 2009-01-21 16:26 小叶子 阅读(521) | 评论 (0)编辑 收藏

MessageBox()是API,对应的在user32.dll中的MessageBoxA()


{注意MessageBoxA这里区分大小写,他NND的让我试了半天才知道这里错了,你们也要注意了}
function msg(h:hwnd;sa,sb:pchar;i:uint):integer;stdcall ;external 'user32.dll' name 'MessageBoxA';
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  sa,sb:  PChar;
begin
  sa := '标题';
  sb := '内容';
  msg(0,sa,sb,0);
end;
这样msg就等同于MessageBoxA()

posted @ 2009-01-21 15:45 小叶子 阅读(555) | 评论 (0)编辑 收藏
API之菜单函数

AppendMenu 在指定的菜单里添加一个菜单项
CheckMenuItem 复选或撤消复选指定的菜单条目
CheckMenuRadioItem 指定一个菜单条目被复选成“单选”项目
CreateMenu 创建新菜单
CreatePopupMenu 创建一个空的弹出式菜单
DeleteMenu 删除指定的菜单条目
DestroyMenu 删除指定的菜单
DrawMenuBar 为指定的窗口重画菜单
EnableMenuItem 允许或禁止指定的菜单条目
GetMenu 取得窗口中一个菜单的句柄
GetMenuCheckMarkDimensions 返回一个菜单复选符的大小
GetMenuContextHelpId 取得一个菜单的帮助场景ID
GetMenuDefaultItem 判断菜单中的哪个条目是默认条目
GetMenuItemCount 返回菜单中条目(菜单项)的数量
GetMenuItemID 返回位于菜单中指定位置处的条目的菜单ID
GetMenuItemInfo 取得(接收)与一个菜单条目有关的特定信息
GetMenuItemRect 在一个矩形中装载指定菜单条目的屏幕坐标信息
GetMenuState 取得与指定菜单条目状态有关的信息
GetMenuString 取得指定菜单条目的字串
GetSubMenu 取得一个弹出式菜单的句柄,它位于菜单中指定的位置
GetSystemMenu 取得指定窗口的系统菜单的句柄
HiliteMenuItem 控制顶级菜单条目的加亮显示状态
InsertMenu 在菜单的指定位置处插入一个菜单条目,并根据需要将其他条目向下移动
InsertMenuItem 插入一个新菜单条目
IsMenu 判断指定的句柄是否为一个菜单的句柄
LoadMenu 从指定的模块或应用程序实例中载入一个菜单
LoadMenuIndirect 载入一个菜单
MenuItemFromPoint 判断哪个菜单条目包含了屏幕上一个指定的点
ModifyMenu 改变菜单条目
RemoveMenu 删除指定的菜单条目
SetMenu 设置窗口菜单
SetMenuContextHelpId 设置一个菜单的帮助场景ID
SetMenuDefaultItem 将一个菜单条目设为默认条目
SetMenuItemBitmaps 设置一幅特定位图,令其在指定的菜单条目中使用,代替标准的复选符号(√)
SetMenuItemInfo 为一个菜单条目设置指定的信息
TrackPopupMenu 在屏幕的任意地方显示一个弹出式菜单
TrackPopupMenuEx 与TrackPopupMenu相似,只是它提供了额外的功能
posted @ 2009-01-21 03:27 小叶子 阅读(500) | 评论 (0)编辑 收藏
仅列出标题
共11页: First 3 4 5 6 7 8 9 10 11 

笔记和文章,可能抄袭,只为学习,请原谅