⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 editfile.pas

📁 适用于 Delphi 2-7 的Delphi控件
💻 PAS
字号:
{|----------------------------------------------------------------------
 | Unit:        EditFile
 |
 | Author:      Egbert van Nes
 |
 | Description: Edit the file with the Setup of DelForExp
 |
 | Copyright (c) 2000  Egbert van Nes
 |   All rights reserved
 |   Disclaimer and licence notes: see license.txt
 |
 |----------------------------------------------------------------------
}
unit EditFile;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls, Buttons {, DesignWindows};

type
 TAction = (acUpperCase, acLowerCase, acFirstUp, acFirstLow, acCommentOut);
 
 TDelForEx9FileEditDlg = class(TForm) //TForm
  ItemsList: TListBox;
  SearchEdit: TEdit;
  Label1: TLabel;
  ChangeEdit: TEdit;
  FileNameLabel: TLabel;
  Label2: TLabel;
  Button1: TButton;
  Button2: TButton;
  Button3: TButton;
  Button4: TButton;
  BitBtn1: TBitBtn;
  BitBtn2: TBitBtn;
  Button5: TButton;
  Button6: TButton;
  Button7: TButton;
  HelpBtn: TBitBtn;
  procedure BitBtn2Click(Sender: TObject);
  procedure BitBtn1Click(Sender: TObject);
  procedure FormShow(Sender: TObject);
  procedure ItemsListClick(Sender: TObject);
  procedure ChangeEditChange(Sender: TObject);
  procedure Button1Click(Sender: TObject);
  procedure Button2Click(Sender: TObject);
  procedure Button3Click(Sender: TObject);
  procedure SearchEditChange(Sender: TObject);
  procedure FormClose(Sender: TObject; var Action: TCloseAction);
  procedure Button4Click(Sender: TObject);
  procedure SearchEditKeyDown(Sender: TObject; var Key: Word;
   Shift: TShiftState);
  procedure Button5Click(Sender: TObject);
  procedure Button7Click(Sender: TObject);
  procedure Button6Click(Sender: TObject);
  procedure HelpBtnClick(Sender: TObject);
 private
  FisChanged: Boolean;
  procedure ChangeSelected(AnAction: TAction);
 public
  procedure LoadFile(AFileName: string);
  property IsChanged: Boolean read FisChanged write FisChanged;
 end;
 
implementation
uses OptDlg;
{$R *.DFM}

procedure TDelForEx9FileEditDlg.FormShow(Sender: TObject);
begin
 IsChanged := False;
end;

procedure TDelForEx9FileEditDlg.LoadFile(AFileName: string);
var
 TheFile: TextFile;
 S: string;
begin
 FileNameLabel.Caption := AFileName;
 if FileExists(AFileName) then
  begin
   AssignFile(TheFile, AFileName);
   Reset(TheFile);
   try
    SearchEdit.Text := '';
    ChangeEdit.Text := '';
    ItemsList.Clear;
    ItemsList.Sorted := False;
    while not Eof(TheFile) do
     begin
      Readln(TheFile, S);
      if S <> '' then ItemsList.Items.Add(S);
     end;
   finally
    CloseFile(TheFile);
   end;
   ItemsList.Sorted := True;
  end;
end;

procedure TDelForEx9FileEditDlg.ItemsListClick(Sender: TObject);
begin
 with ItemsList do
  if SelCount <= 1 then
   begin
    SearchEdit.Enabled := True;
    ChangeEdit.Enabled := True;
    SearchEdit.OnChange := nil;
    ChangeEdit.OnChange := nil;
    ChangeEdit.Text := Items[ItemIndex];
    SearchEdit.Text := ChangeEdit.Text;
    SearchEdit.OnChange := SearchEditChange;
    ChangeEdit.OnChange := ChangeEditChange;
   end
  else
   begin
    SearchEdit.Enabled := False;
    ChangeEdit.Enabled := False;
   end

end;

procedure TDelForEx9FileEditDlg.ChangeEditChange(Sender: TObject);
begin
 with ItemsList do
  begin
   if ItemIndex < 0 then
    begin
     Items.Add(ChangeEdit.Text);
     IsChanged := True;
    end
   else if StrIComp(PChar(Items[ItemIndex]),
    PChar(ChangeEdit.Text)) <> 0 then
    begin
     IsChanged := True;
     Items.Delete(ItemIndex);
     Items.Add(ChangeEdit.Text);
    end
   else if Items[ItemIndex] <> ChangeEdit.Text then
    begin
     Items[ItemIndex] := ChangeEdit.Text;
     IsChanged := True;
    end;
   ItemIndex := Items.IndexOf(ChangeEdit.Text);
  end;
end;

procedure TDelForEx9FileEditDlg.ChangeSelected(AnAction: TAction);
var
 I: Integer;
 function Change(S: string): string;
 var
  Ch: Char;
 begin
  case AnAction of
   acUpperCase: Result := UpperCase(S);
   acLowerCase: Result := LowerCase(S);
   acFirstUp:
    begin
     Result := S;
     Result[1] := UpCase(Result[1]);
    end;
   acFirstLow:
    begin
     Result := S;
     Ch := Result[1];
     if (Ch >= 'A') and (Ch <= 'Z') then
      inc(Result[1], 32);
    end;
   acCommentOut:
    if S[1] = '*' then
     Result := Copy(S, 2, Length(S))
    else
     Result := '*' + S;
  end;
  IsChanged := IsChanged or (S <> Result);
 end;
begin
 if ChangeEdit.Enabled = True then
  with ChangeEdit do
   begin
    if SelLength = 0 then
     ChangeEdit.Text := Change(ChangeEdit.Text)
    else
     ChangeEdit.SelText := Change(ChangeEdit.SelText);
   end
 else
  begin
   with ItemsList, Items do
    for I := 0 to Count - 1 do
     begin
      if Selected[I] then
       begin
        Items[I] := Change(Items[I]);
        Selected[I] := True;
       end;
     end;
   if (AnAction = acCommentOut) then
    begin
     ItemsList.Sorted := False;
     ItemsList.Sorted := True; //Combination forces reorder
    end;
  end;
end;

procedure TDelForEx9FileEditDlg.Button1Click(Sender: TObject);
begin
 ChangeSelected(acUpperCase);
end;

procedure TDelForEx9FileEditDlg.Button2Click(Sender: TObject);
begin
 ChangeSelected(acLowerCase);
end;

procedure TDelForEx9FileEditDlg.Button3Click(Sender: TObject);
begin
 ChangeSelected(acFirstUp);
end;

procedure TDelForEx9FileEditDlg.SearchEditChange(Sender: TObject);
var
 SearchEditText: string;
 I, J, Lasti: Integer;
begin
 SearchEditText := SearchEdit.Text;
 with ItemsList, Items do
  begin
   J := 1;
   Lasti := 0;
   for I := 0 to Count - 1 do
    begin
     if (StrLIComp(PChar(SearchEditText), PChar(Items[I]), J) = 0) then
      begin
       inc(J);
       Lasti := I;
      end;
     ItemsList.Selected[I] := False;
    end;
   ItemsList.OnClick := nil;
   ItemsList.Selected[Lasti] := True;
   TopIndex := Lasti - 1;
   ItemsList.OnClick := ItemsListClick;
  end;
end;

procedure TDelForEx9FileEditDlg.FormClose(Sender: TObject;
 var Action: TCloseAction);
var
 TheFile: TextFile;
 I: Integer;
begin
 case ModalResult of
  mrCancel:
   if IsChanged and (MessageDlg('Leave without saving changes?', mtInformation,
    [mbYes, mbNo], 0) = ID_No) then
    Action := caNone;
  mrOk:
   begin
    if IsChanged and (MessageDlg('OK to save changes?', mtInformation,
     [mbYes, mbNo], 0) = ID_YES) then
     begin
      AssignFile(TheFile, FileNameLabel.Caption);
      Rewrite(TheFile);
      try
       for I := 0 to ItemsList.Items.Count - 1 do
        Writeln(TheFile, ItemsList.Items[I]);
      finally
       CloseFile(TheFile);
      end;
     end;
   end;
 end;
end;

procedure TDelForEx9FileEditDlg.Button4Click(Sender: TObject);
begin
 ChangeSelected(acFirstLow);
end;

procedure TDelForEx9FileEditDlg.SearchEditKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 with ItemsList do
  case Key of
   VK_UP:
    begin
     Selected[ItemIndex] := False;
     ItemIndex := ItemIndex - 1;
     Selected[ItemIndex] := True;
     SetFocus;
    end;
   VK_DOWN:
    begin
     Selected[ItemIndex] := False;
     ItemIndex := ItemIndex + 1;
     Selected[ItemIndex] := True;
     SetFocus;
    end;
  end;
end;

procedure TDelForEx9FileEditDlg.Button5Click(Sender: TObject);
var
 I: Integer;
begin
 with ItemsList, Items do
  begin
   IsChanged := True;
   Add('<New Identifier>');
   ItemIndex := IndexOf('<New Identifier>');
   for I := 0 to Count - 1 do
    Selected[I] := False;
   Selected[ItemIndex] := True;
   ItemsListClick(nil);
  end;
end;

procedure TDelForEx9FileEditDlg.Button7Click(Sender: TObject);
begin
 ChangeSelected(acCommentOut);
end;

procedure TDelForEx9FileEditDlg.Button6Click(Sender: TObject);
var
 I: Integer;
begin
 with ItemsList, Items do
  for I := Count - 1 downto 0 do
   if Selected[I] then Delete(I);
end;

procedure TDelForEx9FileEditDlg.HelpBtnClick(Sender: TObject);
var
 S: string;
begin
 with TDelForEx9OptionsDlg(Owner) do
  if HelpFile <> nil then
   begin
    S := 'Edit file dialog';
    WinHelp(0, PChar(HelpFile), HELP_KEY,
     Integer(S));
   end;
end;

procedure TDelForEx9FileEditDlg.BitBtn1Click(Sender: TObject);
begin
 ModalResult := mrOK;
end;

procedure TDelForEx9FileEditDlg.BitBtn2Click(Sender: TObject);
begin
 ModalResult := mrCancel;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -