冬雪雪冬 发表于 2017-8-19 18:57:27

鱼C记事本V1.0 - 阶段性上机实践(小结)04 - 零基础入门学习Delphi027~028

花了几天的时间终于把这个作业完成了,不仅对memo、对话框和菜单的功能有了更深入的认识,且掌握了编写一个完整程序所需的思路和知识。其实设计菜单还是很容易的,只要记住&字母是热键,ShortCut是快捷键,-是分隔就行了。另外用到的是对话框控件,delphi已经为我们准备好了很多的对话框,只要直接调用就行了。
以打开文件为例:OpenDialog1.Execute;
FileName:= OpenDialog1.FileName;

这样就把文件名读取进来了。
但是如果选取消就会出错,为此,稍作修改就完善了:if OpenDialog1.Execute then
FileName:= OpenDialog1.FileName;
剪切复制粘贴等功能非常简单,只用一句代码就行了。“关于”的弹出窗口需调用API函数,具体的代码如下,每个参数的作用还不是很清楚。ShellAbout(self.Handle,
pChar('冬雪雪冬的记事本 V1.0'),
pChar('此版本已具备初步功能,可以编辑文本文件。'+ #13 + '由冬雪雪冬创建于2017/08/19。'),
HICON(nil));

查找和替换的编写比较复杂,至今查找只能实现一次查找,无法完成查找下一个的操作。另外退出程序会引发FormClose时间,可以在其中加入需要的代码,这里实现了提示保存文件的功能,但不保存如何终止退出还没学会。
附件是源程序和可运行的exe文件。


gears 发表于 2018-1-28 15:14:01

请问查找 和 替换 这一部分的代码理解了吗?

小小书生5 发表于 2018-4-10 10:47:06

学习

大黑狗闪电 发表于 2018-12-19 15:08:04

学习

QianQing 发表于 2019-4-25 17:07:10

显示行数和列数,还有获取当前光标在哪一行 要怎么实现呢?鱼C记事本v1.2

smallred 发表于 2020-4-23 15:07:51

本帖最后由 smallred 于 2020-4-23 15:34 编辑

多次查找功能實現
用到"PosEX" "GoTo"指令

代碼如下:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls,SHELLAPI,StrUtils;

type
TForm1 = class(TForm)
    Memo1: TMemo;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    FindDialog1: TFindDialog;
    ReplaceDialog1: TReplaceDialog;
    procedure N7Click(Sender: TObject);
    procedure FindDialog1Find(Sender: TObject);
private
    { Private declarations }
public
    { Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

var

temp:string;
nfclick,i:integer;//nfclick :查找次數

procedure TForm1.N7Click(Sender: TObject);
begin
nfclick:=0;
i:=0;
finddialog1.FindText:=memo1.SelText;
finddialog1.Execute;

end;

procedure TForm1.FindDialog1Find(Sender: TObject);

var
j,k,PosReturn,skc:integer;
label GoAgain;
begin
temp:=finddialog1.FindText;
GoAgain://每行搜尋完換行,

nfclick:=nfclick+1;

         for k:=nfclick to length(memo1.Lines) do
          begin
             PosReturn:=PosEx(temp,memo1.Lines,k);
            if PosReturn<>0 then
                begin
                   skc:=0;
                   skc:=PosReturn;
                     for j:=0 to i-1 do
                         begin
                         skc:=skc+length(memo1.lines)+2;
                         end;
                  memo1.setfocus;
                  memo1.SelStart:=skc-1;
                  memo1.SelLength:=length(temp);
                   nfclick:= PosReturn;
                   break;
                end
               else
               begin
               i:=i+1;
               nfclick:=0;
               goto GoAgain;
               end;
            end;

end;
end.

页: [1]
查看完整版本: 鱼C记事本V1.0 - 阶段性上机实践(小结)04 - 零基础入门学习Delphi027~028