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 = []
OldCreateOrder = False
Position = poMainFormCenter
OnCloseQuery = FormCloseQuery
OnClose = FormClose
OnCreate = FormCreate
OnDestroy = FormDestroy
OnDeactivate = FormDeactivate
OnShow = FormShow
DesignSize = (
215

View File

@ -25,12 +25,12 @@ type
procedure FormShow(Sender: TObject);
procedure memoTextChange(Sender: TObject);
procedure memoTextKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormCreate(Sender: TObject);
procedure FormDeactivate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
FModified: Boolean;
FStopping: Boolean;
procedure SetModified(NewVal: Boolean);
property Modified: Boolean read FModified write SetModified;
public
@ -154,6 +154,9 @@ procedure TfrmBinEditor.btnCancelClick(Sender: TObject);
var
DoPost: Boolean;
begin
if FStopping then
Exit;
FStopping := True;
if Modified then
DoPost := MessageDlg('Apply modifications?', mtConfirmation, [mbYes, mbNo], 0) = mrYes
else
@ -165,22 +168,15 @@ begin
end;
procedure TfrmBinEditor.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure TfrmBinEditor.FormClose(Sender: TObject; var Action: TCloseAction);
begin
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;
procedure TfrmBinEditor.btnApplyClick(Sender: TObject);
begin
FStopping := True;
TCustomVirtualStringTree(Owner).EndEditNode;
end;

View File

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

View File

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

View File

@ -25,12 +25,12 @@ type
procedure FormShow(Sender: TObject);
procedure memoTextChange(Sender: TObject);
procedure memoTextKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormCreate(Sender: TObject);
procedure FormDeactivate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
FModified: Boolean;
FStopping: Boolean;
procedure SetModified(NewVal: Boolean);
property Modified: Boolean read FModified write SetModified;
public
@ -157,6 +157,9 @@ procedure TfrmTextEditor.btnCancelClick(Sender: TObject);
var
DoPost: Boolean;
begin
if FStopping then
Exit;
FStopping := True;
if Modified then
DoPost := MessageDlg('Apply modifications?', mtConfirmation, [mbYes, mbNo], 0) = mrYes
else
@ -168,22 +171,15 @@ begin
end;
procedure TfrmTextEditor.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure TfrmTextEditor.FormClose(Sender: TObject; var Action: TCloseAction);
begin
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;
procedure TfrmTextEditor.btnApplyClick(Sender: TObject);
begin
FStopping := True;
TCustomVirtualStringTree(Owner).EndEditNode;
end;