Fix bug #778 you will be asked twice if you want to apply the modifications in the editor window after ESC pressed. The editor dialogs are modal now which fixes a certain part of this issue and makes the code paths less complex.

This commit is contained in:
Ansgar Becker
2008-10-03 09:08:26 +00:00
parent 798356e065
commit 85a00cca2d
5 changed files with 19 additions and 29 deletions

View File

@ -15,10 +15,9 @@ object frmBinEditor: TfrmBinEditor
Font.Style = [] Font.Style = []
OldCreateOrder = False OldCreateOrder = False
Position = poMainFormCenter Position = poMainFormCenter
OnCloseQuery = FormCloseQuery OnClose = FormClose
OnCreate = FormCreate OnCreate = FormCreate
OnDestroy = FormDestroy OnDestroy = FormDestroy
OnDeactivate = FormDeactivate
OnShow = FormShow OnShow = FormShow
DesignSize = ( DesignSize = (
215 215

View File

@ -25,12 +25,12 @@ type
procedure FormShow(Sender: TObject); procedure FormShow(Sender: TObject);
procedure memoTextChange(Sender: TObject); procedure memoTextChange(Sender: TObject);
procedure memoTextKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure memoTextKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
procedure FormDeactivate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction);
private private
{ Private declarations } { Private declarations }
FModified: Boolean; FModified: Boolean;
FStopping: Boolean;
procedure SetModified(NewVal: Boolean); procedure SetModified(NewVal: Boolean);
property Modified: Boolean read FModified write SetModified; property Modified: Boolean read FModified write SetModified;
public public
@ -154,6 +154,9 @@ procedure TfrmBinEditor.btnCancelClick(Sender: TObject);
var var
DoPost: Boolean; DoPost: Boolean;
begin begin
if FStopping then
Exit;
FStopping := True;
if Modified then if Modified then
DoPost := MessageDlg('Apply modifications?', mtConfirmation, [mbYes, mbNo], 0) = mrYes DoPost := MessageDlg('Apply modifications?', mtConfirmation, [mbYes, mbNo], 0) = mrYes
else else
@ -165,22 +168,15 @@ begin
end; end;
procedure TfrmBinEditor.FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure TfrmBinEditor.FormClose(Sender: TObject; var Action: TCloseAction);
begin begin
btnCancelClick(Sender); btnCancelClick(Sender);
CanClose := False; // Done by editor link
end;
procedure TfrmBinEditor.FormDeactivate(Sender: TObject);
begin
// Fixes an AV when another control steels focus, reported in bug #774
btnCancelClick(Sender);
end; end;
procedure TfrmBinEditor.btnApplyClick(Sender: TObject); procedure TfrmBinEditor.btnApplyClick(Sender: TObject);
begin begin
FStopping := True;
TCustomVirtualStringTree(Owner).EndEditNode; TCustomVirtualStringTree(Owner).EndEditNode;
end; end;

View File

@ -157,7 +157,7 @@ function TMemoEditorLink.BeginEdit: Boolean; stdcall;
begin begin
Result := not FStopping; Result := not FStopping;
if Result then if Result then
FForm.Show; FForm.ShowModal;
end; end;
@ -166,7 +166,7 @@ begin
Result := not FStopping; Result := not FStopping;
if Result then begin if Result then begin
FStopping := True; FStopping := True;
FForm.Hide; FForm.Close;
FTree.CancelEditNode; FTree.CancelEditNode;
FTree.SetFocus; FTree.SetFocus;
end; end;
@ -180,7 +180,7 @@ begin
FStopping := True; FStopping := True;
if FForm.GetText <> FTree.Text[FNode, FColumn] then if FForm.GetText <> FTree.Text[FNode, FColumn] then
FTree.Text[FNode, FColumn] := FForm.GetText; FTree.Text[FNode, FColumn] := FForm.GetText;
FForm.Hide; FForm.Close;
FTree.SetFocus; FTree.SetFocus;
except except
FStopping := False; FStopping := False;

View File

@ -15,10 +15,9 @@ object frmTextEditor: TfrmTextEditor
Font.Style = [] Font.Style = []
OldCreateOrder = False OldCreateOrder = False
Position = poMainFormCenter Position = poMainFormCenter
OnCloseQuery = FormCloseQuery OnClose = FormClose
OnCreate = FormCreate OnCreate = FormCreate
OnDestroy = FormDestroy OnDestroy = FormDestroy
OnDeactivate = FormDeactivate
OnShow = FormShow OnShow = FormShow
DesignSize = ( DesignSize = (
215 215

View File

@ -25,12 +25,12 @@ type
procedure FormShow(Sender: TObject); procedure FormShow(Sender: TObject);
procedure memoTextChange(Sender: TObject); procedure memoTextChange(Sender: TObject);
procedure memoTextKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure memoTextKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
procedure FormDeactivate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction);
private private
{ Private declarations } { Private declarations }
FModified: Boolean; FModified: Boolean;
FStopping: Boolean;
procedure SetModified(NewVal: Boolean); procedure SetModified(NewVal: Boolean);
property Modified: Boolean read FModified write SetModified; property Modified: Boolean read FModified write SetModified;
public public
@ -157,6 +157,9 @@ procedure TfrmTextEditor.btnCancelClick(Sender: TObject);
var var
DoPost: Boolean; DoPost: Boolean;
begin begin
if FStopping then
Exit;
FStopping := True;
if Modified then if Modified then
DoPost := MessageDlg('Apply modifications?', mtConfirmation, [mbYes, mbNo], 0) = mrYes DoPost := MessageDlg('Apply modifications?', mtConfirmation, [mbYes, mbNo], 0) = mrYes
else else
@ -168,22 +171,15 @@ begin
end; end;
procedure TfrmTextEditor.FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure TfrmTextEditor.FormClose(Sender: TObject; var Action: TCloseAction);
begin begin
btnCancelClick(Sender); btnCancelClick(Sender);
CanClose := False; // Done by editor link
end;
procedure TfrmTextEditor.FormDeactivate(Sender: TObject);
begin
// Fixes an AV when another control steels focus, reported in bug #774
btnCancelClick(Sender);
end; end;
procedure TfrmTextEditor.btnApplyClick(Sender: TObject); procedure TfrmTextEditor.btnApplyClick(Sender: TObject);
begin begin
FStopping := True;
TCustomVirtualStringTree(Owner).EndEditNode; TCustomVirtualStringTree(Owner).EndEditNode;
end; end;