📄 datacompfrm.pas
字号:
unit DataCompFrm;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, ExtCtrls, HexChFrm,
Compare;
type
TDataCompData = record
Para: TComparePara;
end;
TDataCompForm = class(TForm)
WinListView: TListView;
CompKindRadioGroup: TRadioGroup;
CompFromRadioGroup: TRadioGroup;
OkButton: TButton;
CancelButton: TButton;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure OkButtonClick(Sender: TObject);
procedure CancelButtonClick(Sender: TObject);
private
{ Private declarations }
procedure FillListView;
function CheckValid: Boolean;
public
{ Public declarations }
procedure GetData(var Value: TDataCompData);
end;
var
DataCompForm: TDataCompForm;
function ShowDataCompForm(var Value: TDataCompData): Boolean;
implementation
{$R *.DFM}
uses MainFrm;
function ShowDataCompForm(var Value: TDataCompData): Boolean;
var
Frm: TDataCompForm;
begin
if MHMainForm.GetDocCount < 2 then
begin
MessageBox(Application.Handle, '请打开两个或两个以上的文档后再进行数据比较。', '提示', 48);
Result := False;
Exit;
end;
Frm := TDataCompForm.Create(Application);
Result := (Frm.ShowModal = mrOk);
if Result then Frm.GetData(Value);
Frm.Free;
end;
procedure TDataCompForm.GetData(var Value: TDataCompData);
var
i: Integer;
begin
Value.Para.Form1 := nil;
Value.Para.Form2 := nil;
for i := 0 to WinListView.Items.Count - 1 do
begin
if (Value.Para.Form1 <> nil) and (Value.Para.Form2 <> nil) then Break;
if WinListView.Items[i].Checked then
begin
if Value.Para.Form1 = nil then
Value.Para.Form1 := WinListView.Items[i].Data
else
Value.Para.Form2 := WinListView.Items[i].Data;
end;
end;
Value.Para.CompKind := TCompareKind(CompKindRadioGroup.ItemIndex);
Value.Para.CompFrom := TCompareFrom(CompFromRadioGroup.ItemIndex);
end;
function TDataCompForm.CheckValid: Boolean;
var
i, j: Integer;
begin
Result := True;
j := 0;
for i := 0 to WinListView.Items.Count - 1 do
if WinListView.Items[i].Checked then Inc(j);
if j <> 2 then
begin
Result := False;
MessageBox(Handle, '请从列表中选择两个文件。', '提示', 48);
WinListView.SetFocus;
end;
end;
procedure TDataCompForm.FillListView;
var
HexFrm: THexChForm;
ListItem: TListItem;
i: Integer;
begin
WinListView.Items.BeginUpdate;
WinListView.Items.Clear;
for i := 0 to MHMainForm.MDIChildCount - 1 do
begin
if MHMainForm.MDIChildren[i] is THexChForm then
begin
HexFrm := (MHMainForm.MDIChildren[i] as THexChForm);
ListItem := WinListView.Items.Add;
ListItem.Caption := HexFrm.FileName;
ListItem.SubItems.Add(IntToStr(HexFrm.BufSize));
ListItem.SubItems.Add(IntToStr(HexFrm.Offset));
ListItem.Data := HexFrm;
if MHMainForm.ActiveMDIChild = HexFrm then
WinListView.Selected := ListItem;
end;
end;
WinListView.Items.EndUpdate;
end;
procedure TDataCompForm.FormCreate(Sender: TObject);
begin
FillListView;
if WinListView.Items.Count = 2 then
begin
WinListView.Items[0].Checked := True;
WinListView.Items[1].Checked := True;
end else
begin
WinListView.Selected.Checked := True;
end;
end;
procedure TDataCompForm.OkButtonClick(Sender: TObject);
begin
if CheckValid then
ModalResult := mrOk;
end;
procedure TDataCompForm.CancelButtonClick(Sender: TObject);
begin
ModalResult := mrCancel;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -