📄 jvdocksupportclass.pas
字号:
Zone := Self;
while Zone.PrevSibling <> nil do
begin
Zone := Zone.PrevSibling;
Inc(Result);
end;
end;
//=== { TJvDockBaseTree } ====================================================
constructor TJvDockBaseTree.Create(TreeZone: TJvDockTreeZoneClass);
begin
inherited Create;
FTreeZoneClass := TreeZone;
FTopTreeZone := FTreeZoneClass.Create(Self);
FCurrTreeZone := FTopTreeZone;
FScanZoneProc := nil;
FScanAction := snNone;
end;
destructor TJvDockBaseTree.Destroy;
begin
FScanAction := snDeleted;
BackwardScanTree(TopTreeZone);
FScanAction := snNone;
inherited Destroy;
end;
{$IFDEF JVDOCK_DEBUG}
// This helps us to understand the content of the tree by allowing
// us to build an XML dump of the tree.
procedure TJvDockBaseTree.DebugDump(var Index: Integer; Indent, Entity: string; TreeZone: TJvDockBaseZone; Strs: TStrings);
var
Zone: TJvDockBaseZone;
WasIndex: Integer;
procedure Write(S: string);
begin
Strs.Add(S);
end;
begin
Zone := TreeZone;
while Assigned(Zone) do
begin
WasIndex := Index;
Inc(Index);
Write(Indent + '<' + Entity + IntToStr(WasIndex) + '>');
Write(Indent + ' <class>' + Zone.ClassName + '</class>');
DebugDump(Index, Indent + ' ', 'child.' + entity, Zone.ChildZone, Strs);
Write(Indent + '</' + entity + IntToStr(WasIndex) + '>');
Write('');
Zone := Zone.NextSibling;
end;
end;
{$ENDIF JVDOCK_DEBUG}
function TJvDockBaseTree.AddChildZone(TreeZone, NewZone: TJvDockBaseZone): TJvDockBaseZone;
begin
if TreeZone.ChildZone <> nil then
Result := AddNextSibling(TreeZone.ChildZone, NewZone)
else
begin
if NewZone = nil then
Result := FTreeZoneClass.Create(Self)
else
Result := NewZone;
TreeZone.ChildZone := Result;
Result.ParentZone := TreeZone;
end;
end;
function TJvDockBaseTree.AddNextSibling(TreeZone, NewZone: TJvDockBaseZone): TJvDockBaseZone;
begin
while TreeZone.NextSibling <> nil do
TreeZone := TreeZone.NextSibling;
if NewZone = nil then
Result := FTreeZoneClass.Create(Self)
else
Result := NewZone;
TreeZone.NextSibling := Result;
Result.PrevSibling := TreeZone;
Result.ParentZone := TreeZone.ParentZone;
end;
function TJvDockBaseTree.AddParentZone(TreeZone, NewZone: TJvDockBaseZone): TJvDockBaseZone;
begin
if NewZone = nil then
Result := FTreeZoneClass.Create(Self)
else
Result := NewZone;
while TreeZone.PrevSibling <> nil do
TreeZone := TreeZone.PrevSibling;
if TreeZone.ParentZone <> nil then
TreeZone.ParentZone.ChildZone := Result
else
TopTreeZone := Result;
Result.ParentZone := TreeZone.ParentZone;
TreeZone.ParentZone := Result;
end;
function TJvDockBaseTree.AddPrevSibling(TreeZone, NewZone: TJvDockBaseZone): TJvDockBaseZone;
begin
if NewZone = nil then
Result := FTreeZoneClass.Create(Self)
else
Result := NewZone;
if TreeZone.PrevSibling <> nil then
begin
TreeZone.PrevSibling.NextSibling := Result;
Result.PrevSibling := TreeZone.PrevSibling;
TreeZone.PrevSibling := Result;
Result.NextSibling := TreeZone;
Result.ParentZone := TreeZone.ParentZone;
end
else
begin
if TreeZone.ParentZone <> nil then
TreeZone.ParentZone.ChildZone := Result
else
TopTreeZone := Result;
Result.ParentZone := TreeZone.ParentZone;
Result.NextSibling := TreeZone;
TreeZone.PrevSibling := Result;
end;
end;
procedure TJvDockBaseTree.ForwardScanTree(TreeZone: TJvDockBaseZone);
begin
if TreeZone <> nil then
begin
ScanTreeZone(TreeZone);
ForwardScanTree(TreeZone.ChildZone);
ForwardScanTree(TreeZone.NextSibling);
end;
end;
procedure TJvDockBaseTree.MiddleScanTree(TreeZone: TJvDockBaseZone);
begin
if TreeZone <> nil then
begin
MiddleScanTree(TreeZone.ChildZone);
ScanTreeZone(TreeZone);
MiddleScanTree(TreeZone.NextSibling);
end;
end;
procedure TJvDockBaseTree.BackwardScanTree(TreeZone: TJvDockBaseZone);
begin
if TreeZone <> nil then
begin
BackwardScanTree(TreeZone.ChildZone);
BackwardScanTree(TreeZone.NextSibling);
ScanTreeZone(TreeZone);
end;
end;
procedure TJvDockBaseTree.ScanTreeZone(TreeZone: TJvDockBaseZone);
begin
if Assigned(FScanZoneProc) then
FScanZoneProc(TreeZone);
if FScanAction = snDeleted then
TreeZone.Free;
end;
procedure TJvDockBaseTree.RemoveChildZone(TreeZone: TJvDockBaseZone);
begin
if TreeZone.ChildZone <> nil then
begin
FScanAction := snDeleted;
BackwardScanTree(TreeZone.ChildZone);
FScanAction := snNone;
end;
end;
procedure TJvDockBaseTree.RemoveNextSibling(TreeZone: TJvDockBaseZone);
begin
if TreeZone.NextSibling <> nil then
begin
FScanAction := snDeleted;
BackwardScanTree(TreeZone.NextSibling);
FScanAction := snNone;
end;
end;
procedure TJvDockBaseTree.RemoveParentZone(TreeZone: TJvDockBaseZone);
begin
end;
procedure TJvDockBaseTree.RemovePrevSibling(TreeZone: TJvDockBaseZone);
begin
if TreeZone.PrevSibling <> nil then
begin
FScanAction := snDeleted;
BackwardScanTree(TreeZone.PrevSibling);
FScanAction := snNone;
end;
end;
//=== { TJvDockBaseGetFormEventComponent } ===================================
constructor TJvDockBaseGetFormEventComponent.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FParentForm := TForm(AOwner);
if not (csDesigning in ComponentState) then
begin
FOldOnActivate := FParentForm.OnActivate;
FParentForm.OnActivate := DoFormOnActivate;
FOldOnClose := FParentForm.OnClose;
FParentForm.OnClose := DoFormOnClose;
FOldOnCloseQuery := FParentForm.OnCloseQuery;
FParentForm.OnCloseQuery := DoFormOnCloseQuery;
FOldOnCreate := FParentForm.OnCreate;
FParentForm.OnCreate := DoFormOnCreate;
FOldOnDeactivate := FParentForm.OnDeactivate;
FParentForm.OnDeactivate := DoFormOnDeactivate;
FOldOnDestroy := FParentForm.OnDestroy;
FParentForm.OnDestroy := DoFormOnDestroy;
FOldOnHelp := FParentForm.OnHelp;
FParentForm.OnHelp := DoFormOnHelp;
FOldOnHide := FParentForm.OnHide;
FParentForm.OnHide := DoFormOnHide;
FOldOnPaint := FParentForm.OnPaint;
FParentForm.OnPaint := DoFormOnPaint;
FOldOnShortCut := FParentForm.OnShortCut;
FParentForm.OnShortCut := DoFormOnShortCut;
FOldOnShow := FParentForm.OnShow;
FParentForm.OnShow := DoFormOnShow;
FOldOnDockDrop := FParentForm.OnDockDrop;
FParentForm.OnDockDrop := DoFormOnDockDrop;
FOldOnDockOver := FParentForm.OnDockOver;
FParentForm.OnDockOver := DoFormOnDockOver;
FOldOnGetSiteInfo := FParentForm.OnGetSiteInfo;
FParentForm.OnGetSiteInfo := DoFormOnGetSiteInfo;
FOldOnKeyDown := FParentForm.OnKeyDown;
FParentForm.OnKeyDown := DoFormOnKeyDown;
FOldOnKeyPress := FParentForm.OnKeyPress;
FParentForm.OnKeyPress := DoFormOnKeyPress;
FOldOnKeyUp := FParentForm.OnKeyUp;
FParentForm.OnKeyUp := DoFormOnKeyUp;
FOldOnMouseWheel := FParentForm.OnMouseWheel;
FParentForm.OnMouseWheel := DoFormOnMouseWheel;
FOldOnMouseWheelDown := FParentForm.OnMouseWheelDown;
FParentForm.OnMouseWheelDown := DoFormOnMouseWheelDown;
FOldOnMouseWheelUp := FParentForm.OnMouseWheelUp;
FParentForm.OnMouseWheelUp := DoFormOnMouseWheelUp;
FOldOnUndock := FParentForm.OnUnDock;
FParentForm.OnUnDock := DoFormOnUndock;
FOldOnCanResize := FParentForm.OnCanResize;
FParentForm.OnCanResize := DoFormOnCanResize;
FOldOnClick := FParentForm.OnClick;
FParentForm.OnClick := DoFormOnClick;
FOldOnConstrainedResize := FParentForm.OnConstrainedResize;
FParentForm.OnConstrainedResize := DoFormOnConstrainedResize;
FOldOnContextPopup := FParentForm.OnContextPopup;
FParentForm.OnContextPopup := DoFormOnContextPopup;
FOldOnDblClick := FParentForm.OnDblClick;
FParentForm.OnDblClick := DoFormOnDblClick;
FOldOnDragDrop := FParentForm.OnDragDrop;
FParentForm.OnDragDrop := DoFormOnDragDrop;
FOldOnDragOver := FParentForm.OnDragOver;
FParentForm.OnDragOver := DoFormOnDragOver;
FOldOnEndDock := FParentForm.OnEndDock;
FParentForm.OnEndDock := DoFormOnEndDock;
FOldOnMouseDown := FParentForm.OnMouseDown;
FParentForm.OnMouseDown := DoFormOnMouseDown;
FOldOnMouseMove := FParentForm.OnMouseMove;
FParentForm.OnMouseMove := DoFormOnMouseMove;
FOldOnMouseUp := FParentForm.OnMouseUp;
FParentForm.OnMouseUp := DoFormOnMouseUp;
FOldOnResize := FParentForm.OnResize;
FParentForm.OnResize := DoFormOnResize;
FOldOnStartDock := FParentForm.OnStartDock;
FParentForm.OnStartDock := DoFormOnStartDock;
FOldWindowProc := FParentForm.WindowProc;
FParentForm.WindowProc := WindowProc;
end;
end;
destructor TJvDockBaseGetFormEventComponent.Destroy;
begin
if not (csDesigning in ComponentState) then
begin
if Assigned(FOldWindowProc) then
FParentForm.WindowProc := FOldWindowProc;
FOldWindowProc := nil;
FParentForm.OnActivate := FOldOnActivate;
FOldOnActivate := nil;
FParentForm.OnClose := FOldOnClose;
FOldOnClose := nil;
FParentForm.OnCloseQuery := FOldOnCloseQuery;
FOldOnCloseQuery := nil;
FParentForm.OnCreate := FOldOnCreate;
FOldOnCreate := nil;
FParentForm.OnDeactivate := FOldOnDeactivate;
FOldOnDeactivate := nil;
FParentForm.OnDestroy := FOldOnDestroy;
FOldOnDestroy := nil;
FParentForm.OnHelp := FOldOnHelp;
FOldOnHelp := nil;
FParentForm.OnHide := FOldOnHide;
FOldOnHide := nil;
FParentForm.OnPaint := FOldOnPaint;
FOldOnPaint := nil;
FParentForm.OnShortCut := FOldOnShortCut;
FOldOnShortCut := nil;
FParentForm.OnShow := FOldOnShow;
FOldOnShow := nil;
FParentForm.OnDockDrop := FOldOnDockDrop;
FOldOnDockDrop := nil;
FParentForm.OnDockOver := FOldOnDockOver;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -