?? editfile.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.
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -