Delphi高仿windows记事本源码

合集下载

Delphi工具反编译Delphi

Delphi工具反编译Delphi

Delphi工具反编译Delphi第一节关于反向工程(About Reverse Engineering)反编译?反向?解密?(Decompilation? Reverse? Cracking?)简单的说,反编译是编译过程的反转:把一个可执行文件翻译为更高级语言。

假如你丢失了你的Delphi工程的源程序而只有可执行文件:如果源程序已不可得则反向工程(反编译)是有用的。

耶,“源程序不可得”,这是否意味着我们可以反编译别的程序员开发的Delphi工程呢?嗯,对也不对......真正的反编译可能吗?(Is true decompilation possible?)不,当然不行。

完全自动的反编译是不可能的—没有一个反编译器可以正确的重生出原始代码。

当Delphi工程被编译和连接从而产生一个独立的可执行文件,程序中使用的大部分的名称都被转换为地址。

名称的丢失意味着反编译器必须为所有的常量、变量、函数和过程创建唯一的名称。

即使在某种程度上反编译是成功的,产生的“源代码”仍缺少了原始含义的变量和函数名。

显而易见,原始编程语言的语法在可执行文件中已不存在。

所以,让反编译器对可执行文件的连续的机器语言指令进行翻译并判断出原始语言指令是非常困难的。

为什么要使用并且什么时候使用呢(Why and when to use.)反向工程因为以下几个原因而使用:丢失源码的恢复;把应用程序移入新的硬件平台;判断程序中是否存在病毒或恶意代码;当程序拥有者不能更正错误时的程序错误的更正;其它开发人员的程序源代码的恢复(如:测定一个算法)这合法吗?(Is this legal?)反向工程不是解密,尽管很难在两者之间划一个明晰的界限。

计算机程序被版权和商标法保护。

不同的国家对版权拥有者的权利有着不同的解释。

最共同的解释是,下列情况下的反编译是可以的:为了更好的解释的目的,而接口说明已不可得;为了错位更正的目的,而版权拥有者不能进行更正;为了判断程序的部分内容是否被保护。

delphi查找文件代码

delphi查找文件代码

在Windows程序设计中WinAPI也为我们提供了类似的函数,它们就是WinExec()和ShellExecute(),下面就来讨论一下这两个函数的用法。

1)WinExec() 函数原型:UINT WinExec(LPCSTR lpCmdLine,UINTuCmdShow);参数说明:(激活的意思是能接受焦点,即标题栏变成蓝色)lpCmdLine:以0结尾的字符串,命令行参数。

uCmdShow:新的应用程序的运行方式。

其取值如下:SW_HIDE 隐藏SW_MAXIMIZE 最大化SW_MINIMIZE 最小化,并把Z order顺序在此窗口之后(即窗口下一层)的窗口激活SW_RESTORE 激活窗口并还原为初始化大小SW_SHOW 以当前大小和状态激活窗口SW_SHOWDEFAULT 以默认方式运行SW_SHOWMAXIMIZED 激活窗口并最大化SW_SHOWMINIMIZED 激活窗口并最小化SW_SHOWMINNOACTIVE 最小化但不改变当前激活的窗口SW_SHOWNA 以当前状态显示窗口但不改变当前激活的窗口SW_SHOWNOACTIVATE 以初始化大小显示窗口但不改变当前激活的窗口SW_SHOWNORMAL 激活并显示窗口,如果是最大(小)化,窗口将会还原。

第一次运行程序时应该使用这个值比如说,我想要用记事本打开"C:\HDC.TXT",以正常方式运行:WinExec("notepad c:\\hdc.txt",SW_SHOWNORMAL);如果调用成功,这个函数会返回一个不小于31的值,否则调用失败,其返回值的意义如下:0 系统内存或资源不足ERROR_BAD_FORMAT .EXE文件格式无效(比如不是32位应用程序)ERROR_FILE_NOT_FOUND 指定的文件设有找到ERROR_PATH_NOT_FOUND 指定的路径没有找到这个函数和system()非常类似,只能运行.EXE文件,这样在WINDOWS中有它不尽人意的地方,比如不能用此方法通过关联的方法打开文件,例如WinExec("1.html",SW_SHOWNA);就不能打开此文档。

如何在Delphi中调用外部程序

如何在Delphi中调用外部程序

如何在Delphi中调用外部程序本实例介绍如何在自己的程序中调用指定的Windows程序。

首先启动一个新的项目,在空白的窗体上添加4个TButton组件。

添加组件后的窗体如图1所示。

图1 添加组件后的窗体其中WinExec按钮用于以WinExec函数来调用指定的Windows程序。

ShellExecute按钮用于以ShellExecute函数来调用指定的Windows程序。

CreateProcess按钮和TerminateProcess按钮用于实现对被调用程序更全面的操作,前者用于调用指定的Windows 程序,而后者则用于终止被调用的Windows程序。

以WinExec函数的方式来调用指定的Windows程序的响应代码如下:其中WinExec函数的第1个参数表示了被调用程序的路径和名称,第2个参数表示了程序的显示方式。

以ShellExecute函数的方式来调用指定的Windows程序的响应代码如下:其中ShellExecute用于打开与指定文件关联在一起的程序文件。

第1个参数用于指定一个窗口的句柄;第2个参数指定了程序运行的类别,如’Open’或’Print’;第3个参数指定了想用关联程序打印或打开的一个程序名或文件名;如果第3个参数中指定了一个可执行文件,那么第4个参数就是传递给执行程序的参数;第5个参数指定了可执行程序的完整路径。

最后一个参数用于设定程序运行方式。

下面来介绍利用CreateProcess函数和TerminateProcess函数如何实现对被调用程序更全面的操作。

首先定义3个全局变量:利用CreateProcess函数调用指定程序的响应代码如下:调用CreateProcess函数激活C:\WINNT\Notepad.exe程序后,把它的进程信息存储在变量PI中,然后通过下面的语句来关闭本实例打开的C:\WINNT\Notepad.exe程序:程序代码如下:保存文件,然后按F9键运行程序,程序运行的初始画面如图2所示。

DELPHI编程经典源码总结

DELPHI编程经典源码总结

个人收集资料系列Delphi精典技艺问:如何让del+CTRL+ALT看不见程序运行?答:为了让程序用ALT+DEL+CTRL看不见,在implementation后添加声明:function RegisterServiceProcess(dwProcessID,dwType:Integer):Integer;stdcall;external'KERNEL32.DLL';再在上面的窗口Create事件加上一句:RegisterServiceProcess(GetCurrentProcessID,1);//隐藏也可以使用下面的函数:function My_SelfHide:Boolean;typeTRegisterServiceProcess=function(dwProcessID,dwType:DWord):DWORD;stdcall;varhNdl:THandle;RegisterServiceProcess:TRegisterServiceProcess;beginResult:=False;if Win32Platform<>VER_PLATFORM_WIN32_NT then//不是NTbeginhNdl:=LoadLibrary('KERNEL32.DLL');RegisterServiceProcess:=GetProcAddress(hNdl,'RegisterServiceProcess');RegisterServiceProcess(GetCurrentProcessID,1);FreeLibrary(hNdl);Result:=True;endelseExit;end;问:自我拷贝法怎么样使用?答:这种方法的原理是程序运行时先查看自己是不是在特定目录下,如果是就继续运行,如果不是就把自己拷贝到特定目录下,然后运行新程序,再退出旧程序.打开Delphi,新建一个工程,在窗口的Create事件中写代码:procedure TForm1.FormCreate(Sender:TObject);var myname:string;beginmyname:=ExtractFilename(Application.Exename);//获得文件名if application.Exename<>GetWindir+myname then//如果文件不是在Windows\System\那么..begincopyfile(pchar(application.Exename),pchar(GetWindir+myname),False);{将自己拷贝到Windows\System\下}Winexec(pchar(GetWindir+myname),sw_hide);//运行Windows\System\下的新文件application.Terminate;//退出end;end;其中GetWinDir是自定义函数,起功能是找出Windows\System\的路径.function GetWinDir:String;varBuf:array[0..MAX_PATH]of char;beginGetSystemDirectory(Buf,MAX_PATH);Result:=Buf;if Result[Length(Result)]<>'\'then Result:=Result+'\';end;问:如何避免同时运行多个相同程序?答:为了避免同时运行多个程序的副本(节约系统资源也),程序一般会弄成每次只能运行一个.这又有几种方法.一种方法是程序运行时先查找有没有相同的运行了,如果有,就立刻退出程序.修改dpr项目文件,修改begin和end之间的代码如下:beginApplication.Initialize;if FindWindow('TForm1','Form1')=0then begin//当没有找到Form1时执行下面代码Application.ShowMainForm:=False;//不显示主窗口Application.CreateForm(TForm1,Form1);Application.Run;end;end.另一种方法是启动时会先通过窗口名来确定是否已经在运行,如果是则关闭原先的再启动。

delphi winexec cmd语句

delphi winexec cmd语句

delphi winexec cmd语句在Delphi中,你可以使用`WinExec`函数来执行命令行语句。

`WinExec`函数允许你在Windows 操作系统上执行外部程序或者命令。

以下是一个简单的示例,演示如何在Delphi中使用`WinExec`来执行cmd命令:```delphiunit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 = class(TForm)btnRunCmd: TButton;procedure btnRunCmdClick(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementation{$R *.dfm}procedure TForm1.btnRunCmdClick(Sender: TObject);varCmd: string;begin// 要执行的cmd命令Cmd := 'cmd.exe /c dir C:\'; // 例如,列出C盘根目录下的文件// 使用WinExec执行cmd命令WinExec(PChar(Cmd), SW_SHOWNORMAL);end;end.```在上述示例中,单击按钮时,`btnRunCmdClick`事件处理程序将调用`WinExec`函数执行指定的cmd命令。

请注意,这里使用了`SW_SHOWNORMAL`参数,它指示系统显示新创建的进程的主窗口,并将其激活。

请注意,`WinExec`函数在较新的Windows版本中已被弃用,建议使用更现代的方法,如使用`CreateProcess`函数。

delphi DLL注入完整源码

delphi DLL注入完整源码

DLL注入完整源码1.interface2.es4.Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,Dialogs,5.StdCtrls, tlhelp32;6.{type7.TProcessEntry32 = record8.dwSize: DWORD; //大小tUsage: DWORD;10.th32ProcessID: DWORD; //线程的pid11.th32DefaultHeapID: DWORD;12.th32ModuleID: DWORD;tThreads: DWORD; //线程数14.th32ParentProcessID: DWORD; //父线程15.pcPriClassBase: integer;16.dwFlags: DWORD;17.szExeFile: array[0..MAX_PATH - 1] of char; //进程名称18.end; } ///说明某个进程TProcessEntry32 结构19.type20.TtoDllFrm = class(TForm)21.Button1: TButton;22.procedure Button1Click(Sender: TObject);23.private24.{ Private declarations }25.public26.{ Public declarations }27.end;28.29.var30.toDllFrm: TtoDllFrm;31.32.implementation33.34.{$R *.DFM}35.36.procedure FindAProcess (const AFilename: string; const PathMatch: Boolean; varProcessID: DWORD); //自定义一个查找a进程的过程,获得pid37.var38.lppe: TProcessEntry32; // 该进程的结构39.SsHandle: Thandle; // 该进程的句柄40.FoundAProc, FoundOK: boolean; //是否找到41.begin42.ProcessID :=0; //初始pid数值43.SsHandle := CreateToolHelp32SnapShot(TH32CS_SnapProcess, 0);44.//创建进程快照即进程的瞬时列表表单TH32CS_SnapProcess,0 表示进程列表45.//返回进程列表的句柄46.lppe.dwSize := SizeOf(TProcessEntry32);47.//在调用Process32First API之前,需要初始化lppe记录的大小,48.郁闷测试几个小时,没有初始白忙活近一天,始终找不到错误49.FoundAProc := Process32First(Sshandle, lppe);50.//将进程列表的第一个进程信息读入ppe记录中,并判断是否读入成功.51.52.while FoundAProc do //读入成功,进行下面处理53.begin54.if PathMatch then55.FoundOK := AnsiStricomp(lppe.szExefile, PChar(AFilename)) = 056.// AnsiStricomp 返回2字符串类型的比较结果相同时返回057.else58.FoundOK := AnsiStricomp(PChar(ExtractFilename(lppe.szExefile)),PChar(ExtractFilename(AFilename))) = 0;59.//比较获得的参数和返回的ExtractFilename(lppe.szExefile) 值看是否为0.60.if FoundOK then61.begin62.ProcessID := lppe.th32ProcessID;63.break; //找到后,退出循环64.end;65.FoundAProc := Process32Next(SsHandle, lppe);66.///否则继续找直到找到67.end;68.CloseHandle(SsHandle); // 释放句柄69.end;70./71.function EnabledDebugPrivilege(const bEnabled: Boolean): Boolean;72.//关于提高线程访问权限的提权并不是什么进程都可以访问73.//访问不了那是权限不够就提权吧74.//这一部分我也没有弄懂,注释以后在++75.var76.hToken: THandle;77.tp: TOKEN_PRIVILEGES;78.a: DWORD;79.const80.SE_DEBUG_NAME = 'SeDebugPrivilege'; //最高权限81.begin82.Result := False;83.if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES,hToken))84.//第一参数是要修改访问权限的进程句柄85.//第二个参数指定你要进行的操作类型,要修改令牌我们要指定第二个参数为TOKEN_ADJUST_PRIVILEGES86.//第三个参数就是返回的访问令牌指针87.88.89.then90.begin91.tp.PrivilegeCount := 1;92.LookupPrivilegeValue(nil, SE_DEBUG_NAME, tp.Privileges[0].Luid);93.//返回特权名LUID//修改进程的权限,在此处为修改本进程成为具有退出系统的权限94.//第一个参数是系统的名称,如果是本地系统只要指明为NULL就可以了,95.//第三个参数就是返回LUID的指针,第二个参数就是指明了权限的名称,96.if bEnabled then97.tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED98.else99.tp.Privileges[0].Attributes := 0;100. a := 0;101.AdjustTokenPrivileges(hToken, False, tp, SizeOf(tp), nil, a);102.//第一个参数是访问令牌的句柄;103.//第二个参数决定是进行权限修改还是除能(Disable)所有权限104.//第三个参数指明要修改的权限105.//第四个参数是结构PreviousState的长度,如果PreviousState为空,该参数应为NULL106.//第五参数也是一个指向TOKEN_PRIVILEGES结构的指针,存放修改前的访问权限的信息,可空107.108.Result := GetLastError = ERROR_SUCCESS;109.CloseHandle(hToken);110.end;111.end;112.113.114.function AttachToProcess(const HostFile, GuestFile: string; const PID: DWORD =0): DWORD; //自定义注入函数115.var116.hRemoteProcess: THandle; //远程线程句秉117.dwRemoteProcessId: DWORD; //远程线程pid118.cb: DWORD;119.pszLibFileRemote: Pointer; //一个指针指向远程dll的地址120.iReturnCode: Boolean; //返回值作判断用121.TempVar: DWORD;122.pfnStartAddr: TFNThreadStartRoutine; //lib函数地址123.pszLibAFilename: PwideChar; //一个指向文件名124.begin125.Result := 0;126.EnabledDebugPrivilege(True); //提权127.Getmem(pszLibAFilename, Length(GuestFile) * 2 + 1);128.//申请内存内存的大小由Length(GuestFile) * 2 + 1 决定129.StringToWideChar(GuestFile, pszLibAFilename, Length(GuestFile) * 2 +1);130.if PID > 0 then131.dwRemoteProcessID := PID132.else133.FindAProcess(HostFile, False, dwRemoteProcessID);134.hRemoteProcess := OpenProcess(PROCESS_CREATE_THREAD + {允许远程创建线程}135.PROCESS_VM_OPERATION + {允许远程VM操作}136.PROCESS_VM_WRITE, {允许远程VM写}137.FALSE, dwRemoteProcessId);138.cb := (1 + lstrlenW(pszLibAFilename)) * sizeof(WCHAR);139.pszLibFileRemote := PWIDESTRING(VirtualAllocEx(hRemoteProcess, nil, cb, MEM_COMMIT, PAGE_READWRITE));140.//申请内存,并指向内寸地址并付值141.TempVar := 0;142.iReturnCode := WriteProcessMemory(hRemoteProcess, pszLibFileRemote, pszLibAFilename, cb, TempVar);143.//写入成功,将返回一个不为0-de 值144.if iReturnCode then145.begin146.pfnStartAddr := GetProcAddress(GetModuleHandle('Kernel32'), 'LoadLibraryW');147.//GetProcAddress函数检索指定的动态链接库(DLL)中的输出库函数地址148.//GetModuleHandle函数可以返回此句柄149.TempVar := 0;150.Result := CreateRemoteThread(hRemoteProcess, nil, 0, pfnStartAddr, pszLibFileRemote, 0, TempVar);151.//新生成的线程分配的线程Id 即TempVar152.end;153.Freemem(pszLibAFilename);154.end;155.156.procedure TtoDllFrm.Button1Click(Sender: TObject);157.begin158.AttachToProcess('Explorer.exe',extractfilepath(paramstr(0))+'Project2.dll');159.//其中Project2.dll是想要注入到Explorer.EXE的进程,Explorer.exe也可以是别的进程.160.end;161.end.。

Delphi常用代码(个人自用整理2)

Delphi常用代码(个人自用整理2)

Delphi常⽤代码(个⼈⾃⽤整理2)3.Delphi 实现⽂件加密源码unit main;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,ShellAPI,inifiles,registry,Des ,FileCtrl, jpeg, ExtCtrls;typeTBruce = class(TForm)dlgOpen1: TOpenDialog;Image1: TImage;Button2: TButton;Edit1: TEdit;Label1: TLabel;Button1: TButton;Label2: TLabel;Edit2: TEdit;Button3: TButton;Label3: TLabel;Edit3: TEdit;Button5: TButton;procedure FormCreate(Sender: TObject);procedure Button5Click(Sender: TObject);procedure JiaMI(var FilePath,MiMa:string);procedure JieMi(var DianFile:string);procedure ZhuCeCaiDan;procedure DelZhuCe;procedure Button1Click(Sender: TObject);procedure Edit2Exit(Sender: TObject);procedure FormShow(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varBruce: TBruce;FilePahtName :string;sRoot:WideString;sCaption:string;implementationuses Unit2;{$R *.dfm}DianFile,IniPath:string;inifile: TInifile;beginDianFile:=FilePath+'..\';iniPath:='dat.ini';inifile:=TIniFile.Create(IniPath);inifile.WriteString('111','key',DES.EncryStrHex(MiMa,'FEIGEW')); inifile.Free;renamefile(FilePath,DianFile);end;procedure TBruce.FormCreate(Sender: TObject);vari: Integer;beginZhuCeCaiDan;for i := 1 to ParamCount dobeginif LowerCase(ParamStr(i)) <> '' then beginFilePahtName:= ParamStr(i);end;end;end;procedure TBruce.JieMi(var DianFile:string);varFileName,FileJD:string;i:Integer;beginFileName:=DianFile+'.\';I:=Length(FileName);FileJD:=Copy(FileName,1,i-3);renamefile(FileName,FileJD);end;procedure TBruce.ZhuCeCaiDan;vara:TRegistry;begina:=TRegistry.create;a.rootkey:=HKEY_CLASSES_ROOT;if a.openkey('Folder\Shell\cutbig',true) thena.closekey;end;if a.openkey('Folder\Shell\cutbig\command',true) thenbegin//command⼦键的内容是点击右键后选择相应项后要运⾏的程序;//%1是在单击右键时选中的⽂件名a.writestring('','"'+Application.exeName+'" "%1"');a.closekey;end;a.free;end;procedure TBruce.DelZhuCe;vara:TRegistry;begina:=TRegistry.create;a.rootkey:=HKEY_CLASSES_ROOT;//⽤deletekey删除⼀个主键,其所包含的⼦键也被删除,如果已⽆此主键,运⾏删除操作不会带来别的危害a.deletekey('Folder\Shell\cutbig');a.free;Application.MessageBox('成功删除系统右键菜单!', '成功', MB_OK +MB_ICONINFORMATION);end;procedure TBruce.Button5Click(Sender: TObject);beginapplication.Terminate;end;procedure TBruce.Button1Click(Sender: TObject);varpassword:string;beginif FilePahtName='' then beginApplication.MessageBox('没有可加密的⽂件夹,请从⽂件夹上右键启动加密程序!','系统', MB_OK + MB_ICONWARNING);//Application.Terminate;end;if (Edit1.Text='') or (Edit2.text='') then beginApplication.MessageBox('密码不能为空,请输⼊你的密码!', '系统', MB_OK +MB_ICONWARNING);Exit;end;if Edit2.Text=Edit1.Text then beginpassword:=Edit2.Text;JiaMI(FilePahtName,password);Application.MessageBox('⽂件夹添加密码成功,请牢记您的密码!', '系统', MB_OK+ MB_ICONINFORMATION);//Application.Terminate;end else beginend;end;procedure TBruce.Edit2Exit(Sender: TObject);beginif Edit2.Text<>Edit1.Text then beginApplication.MessageBox('两次输⼊的密码不⼀致,请重新输⼊!', '系统', MB_OK + MB_ICONWARNING);Edit2.SetFocus;end;end;procedure TBruce.FormShow(Sender: TObject);beginEdit1.SetFocus;end;procedure TBruce.Button2Click(Sender: TObject);begin{ FilePahtName:='';if not dlgOpen1.Execute then exit;FilePahtName:=dlgOpen1.FileName;ShowMessage(FilePahtName);}sCaption := '⽂件夹'; //弹出框标题名(⾮弹出框窗体名)sRoot := ''; //初始⽂件夹(如'C:\','D:\DownLoad'等, 不存在则从桌⾯)beginif SelectDirectory(sCaption, sRoot, FilePahtName) then//已返回所选⽂件夹路径给FilePahtName,⾃⾏处理end;ShowMessage(FilePahtName);end;procedure TBruce.Button3Click(Sender: TObject);varlen:Integer;inifile: TInifile;IniPath,password,sstemp:string;beginBruce.JieMi(FilePahtName);len:=Length(FilePahtName);sstemp:=Copy(FilePahtName,1,len-1);iniPath:='dat.ini';inifile:=TIniFile.Create(IniPath);password:=inifile.ReadString('111','key','');password:=des.DecryStrhex(password,'FEIGEW');inifile.Free;Bruce.JiaMI(sstemp,password);if Edit3.Text=password then beginBruce.JieMi(FilePahtName);DeleteFile(IniPath) ;Application.MessageBox('您输⼊的密码错误,请重新输⼊密码!', '系统', MB_OK +MB_ICONWARNING);Edit3.SetFocus;end;end;end.⼀、“软件限时注册”控件(TShareRegist)功能说明:简介:⼀、1、只要将该控件加⼊主窗体,使Action属性设为true,再设置其它属性,你的软件就有限时注册的功能了,只要你牢记三个密钥,并加上给你的算号软件(RegObject_Admin.exe)你就可以⽆敌天下了。

分享一个Delphi制作的文档编辑器源代码(仿Word)

分享一个Delphi制作的文档编辑器源代码(仿Word)

分享⼀个Delphi制作的⽂档编辑器源代码(仿Word)
功能挺多的,就是很多地⽅都没有完善。

不过简单使⽤,是没有问题的。

我也忘记是在哪个⽹站下载的,可能是Git国外的⽹站。

仿Word⽂档编辑器,不过其实没有必要的,因为⽤户会直接使⽤微软或者其他软件来制作⾃⼰的⽂档。

但是却具有参考价值,虽然代码需要优化的地⽅还有很多。

⽐如那些添加控件这些可以去除,把代码结构处理得紧凑⼀些,⽽且增加更多可以⾃定义的地⽅就更理想了。

其实⼤家最最讨厌都是⼀些滚动条和控件背景颜⾊都⽆法⾃定义,都被写得死死的,就像原来Vcl那些玩意⼀样。

想弄个⾃定义界⾯都办不到。

这套代码也是这样,所以需要⼤家⾃⼰改。

下⾯这个是我改的,多页功能,我去掉了,改成单页,跟RichEdit这种类型⼀样。

不过完全⽀持表格、图⽚、GIF图⽚这些添加,⽽且可以⾃定义编辑框背景图⽚的添加和更换。

这样⼀来,也算是解决了⼀直以来的⼼愿。

⾄少收集和管理各种⽂档资料更加⽅便了。

在这⾥提供原来代码的下载地址,原来的忘记了:
有兴趣的,⾃⼰下载看看,⾄于我改的就不提供了。

它⾥⾯带有作者的通讯⽅式,有兴趣可以联系交流。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

主要功能都已添加上并测试可用。

效果图:源码:unit Unit1Calculator;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, ComCtrls;typeTForm1 = class(TForm)ColorDialog1: TColorDialog;SaveDialog1: TSaveDialog;ColorDialog2: TColorDialog;MainMenu1: TMainMenu;N1: TMenuItem;myNew: TMenuItem;mySave: TMenuItem;N3: TMenuItem;myPage: TMenuItem;myPrint: TMenuItem;myQuit: TMenuItem;myEdit: TMenuItem;myUndo: TMenuItem;N4: TMenuItem;myCut: TMenuItem;myCopy: TMenuItem;myPaste: TMenuItem;myDelete: TMenuItem;N6: TMenuItem;myFind: TMenuItem;myReplace: TMenuItem;myFormat: TMenuItem;myFont: TMenuItem;myView: TMenuItem;myStatus: TMenuItem;myHelp: TMenuItem;myHelpTopics: TMenuItem;N9: TMenuItem;myAbout: TMenuItem;OpenDialog1: TOpenDialog;FontDialog1: TFontDialog;myOpen: TMenuItem;FindDialog1: TFindDialog;ReplaceDialog1: TReplaceDialog;FontDialog2: TFontDialog;PageSetupDialog1: TPageSetupDialog;PrintDialog1: TPrintDialog;RichEdit1: TRichEdit;procedure myNewClick(Sender: TObject);procedure FormCreate(Sender: TObject);procedure myOpenClick(Sender: TObject);procedure mySaveClick(Sender: TObject);procedure myQuitClick(Sender: TObject);procedure myUndoClick(Sender: TObject);procedure myCutClick(Sender: TObject);procedure myCopyClick(Sender: TObject);procedure myPasteClick(Sender: TObject);procedure myDeleteClick(Sender: TObject);procedure myFindClick(Sender: TObject);procedure myReplaceClick(Sender: TObject);procedure myFontClick(Sender: TObject);procedure myPageClick(Sender: TObject);procedure myPrintClick(Sender: TObject);procedure myAboutClick(Sender: TObject);procedure myHelpTopicsClick(Sender: TObject);procedure FormClose(Sender: TObject; var Action: TCloseAction); private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementation{$R *.dfm}var fName: String;procedure TForm1.myNewClick(Sender: TObject);var msg : integer;beginif (richEdit1.Modified) thenbeginmsg := Application.MessageBox('文件已被修改,是否保存?', 'Delphi记事本', mb_YesNoCancel);case msg ofidYes: beginmySaveClick(Sender);richEdit1.Clear;fName := '文档1';Caption := fName + '--Delphi记事本';end;idNo: beginrichEdit1.Clear;fName := '文档1';Caption := fName + '--Delphi记事本';end;idCancel: ;end;endelse beginrichEdit1.Clear;fName := '文档1';Caption := fName + '--Delphi记事本';end;end;procedure TForm1.FormCreate(Sender: TObject);beginfName := '文档1';richEdit1.Clear;Caption := fName + '--Delphi记事本';end;procedure TForm1.myOpenClick(Sender: TObject);var msg : integer;beginif (richEdit1.Modified) thenbeginmsg := Application.MessageBox('文件已被修改,是否保存?', 'Delphi记事本', mb_YesNoCancel);case msg ofidYes: beginmySaveClick(Sender);end;idNo: if (openDialog1.Execute) thenbeginfName := openDialog1.FileName;richEdit1.Lines.LoadFromFile(fName);form1.Caption := fName + 'Delphi记事本';end;idCancel: ;end;endelse if (openDialog1.Execute) thenbeginfName := openDialog1.FileName;richEdit1.Lines.LoadFromFile(fName);form1.Caption := fName + 'Delphi记事本';end;end;procedure TForm1.mySaveClick(Sender: TObject);beginif (fName <> '文档1') thenbeginrichEdit1.Lines.SaveToFile(fName);endelse beginsaveDialog1.FileName := fName;if (saveDialog1.Execute) thenbeginfName := saveDialog1.FileName;richEdit1.Lines.SaveToFile(fName);form1.Caption := fName;end;end;richEdit1.Modified := false;end;procedure TForm1.myQuitClick(Sender: TObject);beginif (richEdit1.Modified) then mySaveClick(Sender); Application.Terminate;end;procedure TForm1.myUndoClick(Sender: TObject);beginrichEdit1.Undo;end;procedure TForm1.myCutClick(Sender: TObject);beginrichEdit1.CutToClipboard;end;procedure TForm1.myCopyClick(Sender: TObject);beginrichEdit1.CopyToClipboard;end;procedure TForm1.myPasteClick(Sender: TObject);beginrichEdit1.PasteFromClipboard;end;procedure TForm1.myDeleteClick(Sender: TObject);beginrichEdit1.ClearSelection;end;procedure TForm1.myFindClick(Sender: TObject);beginfindDialog1.Execute;end;procedure TForm1.myReplaceClick(Sender: TObject);beginreplaceDialog1.Execute;end;procedure TForm1.myFontClick(Sender: TObject);beginfontDialog1.Font := richEdit1.Font; //初始化字体对话框if (fontDialog1.Execute) then richEdit1.SelAttributes.Assign(fontDialog1.Font); end;procedure TForm1.myPageClick(Sender: TObject);beginpageSetupDialog1.Execute;end;procedure TForm1.myPrintClick(Sender: TObject);beginif (printDialog1.Execute) thenbeginrichEdit1.Print(fName);end;end;procedure TForm1.myAboutClick(Sender: TObject);beginShowMessage('Delphi记事本1.0' + #13 + ' 记念于12.5.14');end;procedure TForm1.myHelpTopicsClick(Sender: TObject);beginmyAboutClick(Sender);end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); beginmyQuitClick(Sender);end;end.。

相关文档
最新文档