?? tb97.pas
字號:
FBoundLines := Value;
RecalcNCArea (Self);
end;
end;
procedure TDock97.SetFixAlign (Value: Boolean);
begin
if FFixAlign <> Value then begin
FFixAlign := Value;
ArrangeToolbars;
end;
end;
procedure TDock97.SetPosition (Value: TDockPosition);
begin
if ControlCount <> 0 then
raise EInvalidOperation.Create(STB97DockCannotChangePosition);
FPosition := Value;
case Position of
dpTop: Align := alTop;
dpBottom: Align := alBottom;
dpLeft: Align := alLeft;
dpRight: Align := alRight;
end;
end;
function TDock97.GetToolbarCount: Integer;
begin
Result := DockList.Count;
end;
function TDock97.GetToolbars (Index: Integer): TCustomToolWindow97;
begin
Result := TCustomToolWindow97(DockList[Index]);
end;
{ TFloatingWindowParent - Internal }
constructor TFloatingWindowParent.Create (AOwner: TComponent);
begin
{ Don't use TForm's Create since it attempts to load a form resource, which
TFloatingWindowParent doesn't have. }
CreateNew (AOwner {$IFDEF VER93} , 0 {$ENDIF});
end;
procedure TFloatingWindowParent.CreateParams (var Params: TCreateParams);
begin
inherited;
{ The WS_EX_TOOLWINDOW style is needed to prevent the form from having
a taskbar button when Toolbar97 is used in a DLL or OCX. }
Params.ExStyle := Params.ExStyle or WS_EX_TOOLWINDOW;
end;
procedure TFloatingWindowParent.CMShowingChanged (var Message: TMessage);
const
ShowFlags: array[Boolean] of UINT = (
SWP_NOSIZE or SWP_NOMOVE or SWP_NOZORDER or SWP_NOACTIVATE or SWP_HIDEWINDOW,
SWP_NOSIZE or SWP_NOMOVE or SWP_NOZORDER or SWP_NOACTIVATE or SWP_SHOWWINDOW);
begin
{ Must override TCustomForm/TForm's CM_SHOWINGCHANGED handler so that the
form doesn't get activated when Visible is set to True. }
SetWindowPos (WindowHandle, 0, 0, 0, 0, 0, ShowFlags[Showing and FShouldShow]);
end;
procedure TFloatingWindowParent.CMDialogKey (var Message: TCMDialogKey);
begin
{ If Escape if pressed on a floating toolbar, return focus to the form }
if (Message.CharCode = VK_ESCAPE) and (KeyDataToShiftState(Message.KeyData) = []) and
Assigned(ParentForm) then begin
ParentForm.SetFocus;
Message.Result := 1;
end
else
inherited;
end;
{ Global procedures }
procedure CustomLoadToolbarPositions (const Form: {$IFDEF TB97D3} TCustomForm {$ELSE} TForm {$ENDIF};
const ReadIntProc: TPositionReadIntProc;
const ReadStringProc: TPositionReadStringProc; const ExtraData: Pointer);
function FindDock (AName: String): TDock97;
var
I: Integer;
begin
Result := nil;
for I := 0 to Form.ComponentCount-1 do
if (Form.Components[I] is TDock97) and (Form.Components[I].Name = AName) then begin
Result := TDock97(Form.Components[I]);
Break;
end;
end;
procedure ReadValues (const Toolbar: TCustomToolWindow97; const NewDock: TDock97);
var
Pos: TPoint;
begin
with Toolbar do begin
DockRow := ReadIntProc(Name, rvDockRow, DockRow, ExtraData);
DockPos := ReadIntProc(Name, rvDockPos, DockPos, ExtraData);
Pos.X := ReadIntProc(Name, rvFloatLeft, 0, ExtraData);
Pos.Y := ReadIntProc(Name, rvFloatTop, 0, ExtraData);
ReadPositionData (ReadIntProc, ReadStringProc, ExtraData);
if Assigned(NewDock) then
Parent := NewDock
else begin
Parent := Form;
SetBounds (Pos.X, Pos.Y, Width, Height);
end;
ArrangeControls;
DoneReadingPositionData (ReadIntProc, ReadStringProc, ExtraData);
end;
end;
var
DocksDisabled: TList;
I: Integer;
ToolWindow: TComponent;
ADock: TDock97;
DockedToName: String;
begin
DocksDisabled := TList.Create;
try
with Form do
for I := 0 to ComponentCount-1 do
if Components[I] is TDock97 then begin
TDock97(Components[I]).BeginUpdate;
DocksDisabled.Add (Components[I]);
end;
for I := 0 to Form.ComponentCount-1 do begin
ToolWindow := Form.Components[I];
if ToolWindow is TCustomToolWindow97 then
with TCustomToolWindow97(ToolWindow) do begin
if Name = '' then
raise Exception.Create (STB97ToolWinNameNotSet);
if ReadIntProc(Name, rvRev, 0, ExtraData) = rdCurrentRev then begin
Visible := ReadIntProc(Name, rvVisible, Ord(Visible), ExtraData) <> 0;
DockedToName := ReadStringProc(Name, rvDockedTo, '', ExtraData);
if DockedToName <> '' then begin
if DockedToName <> rdDockedToFloating then begin
ADock := FindDock(DockedToName);
if (ADock <> nil) and (ADock.FAllowDrag) then
ReadValues (TCustomToolWindow97(ToolWindow), ADock);
end
else begin
ReadValues (TCustomToolWindow97(ToolWindow), nil);
MoveOnScreen (True);
end;
end;
end;
end;
end;
finally
for I := DocksDisabled.Count-1 downto 0 do
TDock97(DocksDisabled[I]).EndUpdate;
DocksDisabled.Free;
end;
end;
procedure CustomSaveToolbarPositions (const Form: {$IFDEF TB97D3} TCustomForm {$ELSE} TForm {$ENDIF};
const WriteIntProc: TPositionWriteIntProc;
const WriteStringProc: TPositionWriteStringProc; const ExtraData: Pointer);
var
I: Integer;
N: String;
begin
for I := 0 to Form.ComponentCount-1 do
if Form.Components[I] is TCustomToolWindow97 then
with TCustomToolWindow97(Form.Components[I]) do begin
if Name = '' then
raise Exception.Create (STB97ToolwinNameNotSet);
if not Docked then
N := rdDockedToFloating
else begin
if DockedTo.FAllowDrag then begin
N := DockedTo.Name;
if N = '' then
raise Exception.Create (STB97ToolwinDockedToNameNotSet);
end
else
N := '';
end;
WriteIntProc (Name, rvRev, rdCurrentRev, ExtraData);
WriteIntProc (Name, rvVisible, Ord(Visible), ExtraData);
WriteStringProc (Name, rvDockedTo, N, ExtraData);
WriteIntProc (Name, rvDockRow, FDockRow, ExtraData);
WriteIntProc (Name, rvDockPos, FDockPos, ExtraData);
WriteIntProc (Name, rvFloatLeft, FFloatingTopLeft.X, ExtraData);
WriteIntProc (Name, rvFloatTop, FFloatingTopLeft.Y, ExtraData);
WritePositionData (WriteIntProc, WriteStringProc, ExtraData);
end;
end;
function IniReadInt (const ToolbarName, Value: String; const Default: Longint;
const ExtraData: Pointer): Longint; far;
begin
Result := TIniFile(ExtraData).ReadInteger(ToolbarName, Value, Default);
end;
function IniReadString (const ToolbarName, Value, Default: String;
const ExtraData: Pointer): String; far;
begin
Result := TIniFile(ExtraData).ReadString(ToolbarName, Value, Default);
end;
procedure IniWriteInt (const ToolbarName, Value: String; const Data: Longint;
const ExtraData: Pointer); far;
begin
TIniFile(ExtraData).WriteInteger (ToolbarName, Value, Data);
end;
procedure IniWriteString (const ToolbarName, Value, Data: String;
const ExtraData: Pointer); far;
begin
TIniFile(ExtraData).WriteString (ToolbarName, Value, Data);
end;
procedure IniLoadToolbarPositions (const Form: {$IFDEF TB97D3} TCustomForm {$ELSE} TForm {$ENDIF};
const Filename: String);
var
Ini: TIniFile;
begin
Ini := TIniFile.Create(Filename);
try
CustomLoadToolbarPositions (Form, IniReadInt, IniReadString, Ini);
finally
Ini.Free;
end;
end;
procedure IniSaveToolbarPositions (const Form: {$IFDEF TB97D3} TCustomForm {$ELSE} TForm {$ENDIF};
const Filename: String);
var
Ini: TIniFile;
begin
Ini := TIniFile.Create(Filename);
try
CustomSaveToolbarPositions (Form, IniWriteInt, IniWriteString, Ini);
finally
Ini.Free;
end;
end;
function RegReadInt (const ToolbarName, Value: String; const Default: Longint;
const ExtraData: Pointer): Longint; far;
begin
Result := TRegIniFile(ExtraData).ReadInteger(ToolbarName, Value, Default);
end;
function RegReadString (const ToolbarName, Value, Default: String;
const ExtraData: Pointer): String; far;
begin
Result := TRegIniFile(ExtraData).ReadString(ToolbarName, Value, Default);
end;
procedure RegWriteInt (const ToolbarName, Value: String; const Data: Longint;
const ExtraData: Pointer); far;
begin
TRegIniFile(ExtraData).WriteInteger (ToolbarName, Value, Data);
end;
procedure RegWriteString (const ToolbarName, Value, Data: String;
const ExtraData: Pointer); far;
begin
TRegIniFile(ExtraData).WriteString (ToolbarName, Value, Data);
end;
procedure RegLoadToolbarPositions (const Form: {$IFDEF TB97D3} TCustomForm {$ELSE} TForm {$ENDIF};
const BaseRegistryKey: String);
begin
RegLoadToolbarPositionsEx (Form, HKEY_CURRENT_USER, BaseRegistryKey);
end;
procedure RegLoadToolbarPositionsEx (const Form: {$IFDEF TB97D3} TCustomForm {$ELSE} TForm {$ENDIF};
const RootKey: HKEY; const BaseRegistryKey: String);
var
Reg: TRegIniFile;
begin
Reg := TRegIniFile.Create(BaseRegistryKey);
try
Reg.RootKey := RootKey;
CustomLoadToolbarPositions (Form, RegReadInt, RegReadString, Reg);
finally
Reg.Free;
end;
end;
procedure RegSaveToolbarPositions (const Form: {$IFDEF TB97D3} TCustomForm {$ELSE} TForm {$ENDIF};
const BaseRegistryKey: String);
begin
RegSaveToolbarPositionsEx (Form, HKEY_CURRENT_USER, BaseRegistryKey);
end;
procedure RegSaveToolbarPositionsEx (const Form: {$IFDEF TB97D3} TCustomForm {$ELSE} TForm {$ENDIF};
const RootKey: HKEY; const BaseRegistryKey: String);
var
Reg: TRegIniFile;
begin
Reg := TRegIniFile.Create(BaseRegistryKey);
try
Reg.RootKey := RootKey;
CustomSaveToolbarPositions (Form, RegWriteInt, RegWriteString, Reg);
finally
Reg.Free;
end;
end;
{ TCustomToolWindow97 - Internal }
constructor TCustomToolWindow97.Create (AOwner: TComponent);
begin
inherited;
ControlStyle := ControlStyle +
[csAcceptsControls, csClickEvents, csDoubleClicks, csSetCaption] -
[csCaptureMouse{capturing is done manually}, csOpaque];
InstallHookProc (ToolbarHookProc,
[hpSendActivateApp, hpSendWindowPosChanged, hpPreDestroy],
csDesigning in ComponentState);
GetParams (FParams);
FActivateParent := True;
FBorderStyle := bsSingle;
FDockableTo := [dpTop, dpBottom, dpLeft, dpRight];
FCloseButton := True;
FResizable := True;
FHideWhenInactive := True;
FDockPos := -1;
Color := clBtnFace;
end;
destructor TCustomToolWindow97.Destroy;
begin
inherited;
FDockForms.Free; { must be done after 'inherited' because Notification accesses FDockForms }
FFloatParent.Free;
UninstallHookProc (ToolbarHookProc);
end;
function TCustomToolWindow97.HasParent: Boolean;
begin
if Parent is TFloatingWindowParent then
Result := False
else
Result := inherited HasParent;
end;
function TCustomToolWindow97.GetParentComponent: TComponent;
begin
if Parent is TFloatingWindowParent then
Result := nil
else
Result := inherited GetParentComponent;
end;
procedure TCustomToolWindow97.SetInactiveCaption (Value: Boolean);
begin
if csDesigning in ComponentState then
Value := False;
if FInactiveCaption <> Value then begin
FInactiveCaption := Value;
DrawFloatingNCArea (0, False, True, False);
end;
end;
procedure TCu
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -