mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-26 11:17:57 +08:00
Code structure: Seperate editor link from memo editor form, into own unit grideditlinks.pas . All edit links can live here while the used forms will need their own unit + dfm.
This commit is contained in:
@ -38,7 +38,8 @@ uses
|
||||
editvar in '..\..\source\editvar.pas' {frmEditVariable},
|
||||
view in '..\..\source\view.pas' {frmView},
|
||||
selectdbobject in '..\..\source\selectdbobject.pas' {frmSelectDBObject},
|
||||
memoeditor in '..\..\source\memoeditor.pas' {frmMemoEditor};
|
||||
memoeditor in '..\..\source\memoeditor.pas' {frmMemoEditor},
|
||||
grideditlinks in '..\..\source\grideditlinks.pas';
|
||||
|
||||
{$R *.RES}
|
||||
|
||||
|
@ -94,6 +94,7 @@
|
||||
<DCCReference Include="..\..\source\fieldeditor.pas">
|
||||
<Form>FieldEditForm</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="..\..\source\grideditlinks.pas" />
|
||||
<DCCReference Include="..\..\source\helpers.pas" />
|
||||
<DCCReference Include="..\..\source\insertfiles.pas">
|
||||
<Form>frmInsertFiles</Form>
|
||||
|
@ -577,7 +577,7 @@ uses
|
||||
Main, fieldeditor,
|
||||
copytable, sqlhelp, printlist,
|
||||
column_selection, data_sorting, runsqlfile, mysql_structures,
|
||||
Registry, memoeditor;
|
||||
Registry, grideditlinks;
|
||||
|
||||
|
||||
type
|
||||
|
128
source/grideditlinks.pas
Normal file
128
source/grideditlinks.pas
Normal file
@ -0,0 +1,128 @@
|
||||
unit grideditlinks;
|
||||
|
||||
// The editor links, instanciated by VirtualTree.CreateEditor
|
||||
|
||||
interface
|
||||
|
||||
uses Windows, Graphics, messages, VirtualTrees, memoeditor;
|
||||
|
||||
type
|
||||
TMemoEditorLink = class(TInterfacedObject, IVTEditLink)
|
||||
private
|
||||
FForm: TfrmMemoEditor;
|
||||
FTree: TCustomVirtualStringTree; // A back reference to the tree calling.
|
||||
FNode: PVirtualNode; // The node to be edited.
|
||||
FColumn: TColumnIndex; // The column of the node.
|
||||
FTextBounds: TRect; // Smallest rectangle around the text.
|
||||
FStopping: Boolean; // Set to True when the edit link requests stopping the edit action.
|
||||
public
|
||||
FieldType: Integer;
|
||||
MaxInputLength: Integer;
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
function BeginEdit: Boolean; virtual; stdcall;
|
||||
function CancelEdit: Boolean; virtual; stdcall;
|
||||
function EndEdit: Boolean; virtual; stdcall;
|
||||
function GetBounds: TRect; virtual; stdcall;
|
||||
function PrepareEdit(Tree: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex): Boolean; virtual; stdcall;
|
||||
procedure ProcessMessage(var Message: TMessage); virtual; stdcall;
|
||||
procedure SetBounds(R: TRect); virtual; stdcall;
|
||||
end;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
|
||||
constructor TMemoEditorLink.Create;
|
||||
begin
|
||||
inherited;
|
||||
end;
|
||||
|
||||
destructor TMemoEditorLink.Destroy;
|
||||
begin
|
||||
inherited;
|
||||
FForm.Free;
|
||||
end;
|
||||
|
||||
|
||||
function TMemoEditorLink.PrepareEdit(Tree: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex): Boolean; stdcall;
|
||||
// Retrieves the true text bounds from the owner tree.
|
||||
var
|
||||
Text: WideString;
|
||||
F: TFont;
|
||||
begin
|
||||
Result := Tree is TCustomVirtualStringTree;
|
||||
if not Result then
|
||||
exit;
|
||||
|
||||
FTree := Tree as TVirtualStringTree;
|
||||
FNode := Node;
|
||||
FColumn := Column;
|
||||
|
||||
// Initial size, font and text of the node.
|
||||
F := TFont.Create;
|
||||
FTree.GetTextInfo(Node, Column, F, FTextBounds, Text);
|
||||
|
||||
// Create the editor form
|
||||
FForm := TfrmMemoEditor.Create(Ftree);
|
||||
FForm.Parent := Tree;
|
||||
FForm.memoText.Font := F;
|
||||
FForm.memoText.Text := Text;
|
||||
end;
|
||||
|
||||
|
||||
function TMemoEditorLink.BeginEdit: Boolean; stdcall;
|
||||
begin
|
||||
Result := not FStopping;
|
||||
if Result then
|
||||
FForm.Show;
|
||||
end;
|
||||
|
||||
|
||||
function TMemoEditorLink.CancelEdit: Boolean; stdcall;
|
||||
begin
|
||||
Result := not FStopping;
|
||||
if Result then begin
|
||||
FStopping := True;
|
||||
FForm.Hide;
|
||||
FTree.CancelEditNode;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
function TMemoEditorLink.EndEdit: Boolean; stdcall;
|
||||
begin
|
||||
Result := not FStopping;
|
||||
if Result then try
|
||||
FStopping := True;
|
||||
if FForm.memoText.Text <> FTree.Text[FNode, FColumn] then
|
||||
FTree.Text[FNode, FColumn] := FForm.memoText.Text;
|
||||
FForm.Hide;
|
||||
except
|
||||
FStopping := False;
|
||||
raise;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
function TMemoEditorLink.GetBounds: TRect; stdcall;
|
||||
begin
|
||||
Result := FForm.BoundsRect;
|
||||
end;
|
||||
|
||||
|
||||
procedure TMemoEditorLink.ProcessMessage(var Message: TMessage); stdcall;
|
||||
begin
|
||||
end;
|
||||
|
||||
|
||||
procedure TMemoEditorLink.SetBounds(R: TRect); stdcall;
|
||||
begin
|
||||
// Sets the top left corner of the edit control
|
||||
if not FStopping then
|
||||
FForm.TopLeft := R.TopLeft;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
end.
|
@ -3,8 +3,7 @@ unit memoeditor;
|
||||
interface
|
||||
|
||||
uses
|
||||
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
||||
Dialogs, StdCtrls, TntStdCtrls, Registry, VirtualTrees;
|
||||
Windows, Classes, Graphics, Controls, Forms, StdCtrls, TntStdCtrls, Registry;
|
||||
|
||||
{$I const.inc}
|
||||
|
||||
@ -21,31 +20,6 @@ type
|
||||
end;
|
||||
|
||||
|
||||
// The editor link, instanciated by VirtualTree.CreateEditor
|
||||
TMemoEditorLink = class(TInterfacedObject, IVTEditLink)
|
||||
private
|
||||
FForm: TfrmMemoEditor;
|
||||
FTree: TCustomVirtualStringTree; // A back reference to the tree calling.
|
||||
FNode: PVirtualNode; // The node to be edited.
|
||||
FColumn: TColumnIndex; // The column of the node.
|
||||
FTextBounds: TRect; // Smallest rectangle around the text.
|
||||
FStopping: Boolean; // Set to True when the edit link requests stopping the edit action.
|
||||
public
|
||||
FieldType: Integer;
|
||||
MaxInputLength: Integer;
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
function BeginEdit: Boolean; virtual; stdcall;
|
||||
function CancelEdit: Boolean; virtual; stdcall;
|
||||
function EndEdit: Boolean; virtual; stdcall;
|
||||
function GetBounds: TRect; virtual; stdcall;
|
||||
function PrepareEdit(Tree: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex): Boolean; virtual; stdcall;
|
||||
procedure ProcessMessage(var Message: TMessage); virtual; stdcall;
|
||||
procedure SetBounds(R: TRect); virtual; stdcall;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
uses main, helpers;
|
||||
@ -84,95 +58,5 @@ begin
|
||||
end;
|
||||
|
||||
|
||||
constructor TMemoEditorLink.Create;
|
||||
begin
|
||||
inherited;
|
||||
end;
|
||||
|
||||
destructor TMemoEditorLink.Destroy;
|
||||
begin
|
||||
inherited;
|
||||
FForm.Free;
|
||||
end;
|
||||
|
||||
|
||||
function TMemoEditorLink.PrepareEdit(Tree: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex): Boolean; stdcall;
|
||||
// Retrieves the true text bounds from the owner tree.
|
||||
var
|
||||
Text: WideString;
|
||||
F: TFont;
|
||||
begin
|
||||
Result := Tree is TCustomVirtualStringTree;
|
||||
if not Result then
|
||||
exit;
|
||||
|
||||
FTree := Tree as TVirtualStringTree;
|
||||
FNode := Node;
|
||||
FColumn := Column;
|
||||
|
||||
// Initial size, font and text of the node.
|
||||
F := TFont.Create;
|
||||
FTree.GetTextInfo(Node, Column, F, FTextBounds, Text);
|
||||
|
||||
// Create the editor form
|
||||
FForm := TfrmMemoEditor.Create(Ftree);
|
||||
FForm.Parent := Tree;
|
||||
FForm.memoText.Font := F;
|
||||
FForm.memoText.Text := Text;
|
||||
end;
|
||||
|
||||
|
||||
function TMemoEditorLink.BeginEdit: Boolean; stdcall;
|
||||
begin
|
||||
Result := not FStopping;
|
||||
if Result then
|
||||
FForm.Show;
|
||||
end;
|
||||
|
||||
|
||||
function TMemoEditorLink.CancelEdit: Boolean; stdcall;
|
||||
begin
|
||||
Result := not FStopping;
|
||||
if Result then begin
|
||||
FStopping := True;
|
||||
FForm.Hide;
|
||||
FTree.CancelEditNode;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
function TMemoEditorLink.EndEdit: Boolean; stdcall;
|
||||
begin
|
||||
Result := not FStopping;
|
||||
if Result then try
|
||||
FStopping := True;
|
||||
if FForm.memoText.Text <> FTree.Text[FNode, FColumn] then
|
||||
FTree.Text[FNode, FColumn] := FForm.memoText.Text;
|
||||
FForm.Hide;
|
||||
except
|
||||
FStopping := False;
|
||||
raise;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
function TMemoEditorLink.GetBounds: TRect; stdcall;
|
||||
begin
|
||||
Result := FForm.BoundsRect;
|
||||
end;
|
||||
|
||||
|
||||
procedure TMemoEditorLink.ProcessMessage(var Message: TMessage); stdcall;
|
||||
begin
|
||||
end;
|
||||
|
||||
|
||||
procedure TMemoEditorLink.SetBounds(R: TRect); stdcall;
|
||||
begin
|
||||
// Sets the top left corner of the edit control
|
||||
if not FStopping then
|
||||
FForm.TopLeft := R.TopLeft;
|
||||
end;
|
||||
|
||||
|
||||
end.
|
||||
|
Reference in New Issue
Block a user