Componentes.Terceros.DevExp.../internal/x.46/2/ExpressEditors Library 5/Sources/cxShellBrowser.pas

297 lines
9.6 KiB
ObjectPascal

{********************************************************************}
{ }
{ Developer Express Visual Component Library }
{ ExpressEditors }
{ }
{ Copyright (c) 1998-2009 Developer Express Inc. }
{ ALL RIGHTS RESERVED }
{ }
{ The entire contents of this file is protected by U.S. and }
{ International Copyright Laws. Unauthorized reproduction, }
{ reverse-engineering, and distribution of all or any portion of }
{ the code contained in this file is strictly prohibited and may }
{ result in severe civil and criminal penalties and will be }
{ prosecuted to the maximum extent possible under the law. }
{ }
{ RESTRICTIONS }
{ }
{ THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES }
{ (DCU, OBJ, DLL, ETC.) ARE CONFIDENTIAL AND PROPRIETARY TRADE }
{ SECRETS OF DEVELOPER EXPRESS INC. THE REGISTERED DEVELOPER IS }
{ LICENSED TO DISTRIBUTE THE EXPRESSEDITORS AND ALL }
{ ACCOMPANYING VCL CONTROLS AS PART OF AN EXECUTABLE PROGRAM ONLY. }
{ }
{ THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED }
{ FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE }
{ COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE }
{ AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT }
{ AND PERMISSION FROM DEVELOPER EXPRESS INC. }
{ }
{ CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON }
{ ADDITIONAL RESTRICTIONS. }
{ }
{********************************************************************}
unit cxShellBrowser;
{$I cxVer.inc}
{$IFDEF DELPHI6}
{$WARN UNIT_PLATFORM OFF}
{$ENDIF}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, cxControls, cxContainer, cxShellTreeView,
cxShellCommon, cxSHellControls, cxShellDlgs,
ShlObj, ComObj, ActiveX, cxEdit, cxTextEdit, FileCtrl,
ComCtrls, cxLookAndFeels, cxLookAndFeelPainters,
cxLabel, cxButtons, Menus, cxGraphics;
type
{ TcxShellBrowserDlg }
TcxShellBrowserDlg = class(TForm)
cxStv: TcxShellTreeView;
lblFolder: TcxLabel;
cxTeFolder: TcxTextEdit;
cxButton1: TcxButton;
cxButton2: TcxButton;
procedure FormResize(Sender: TObject);
procedure cxStvChange(Sender: TObject; Node: TTreeNode);
procedure FormPaint(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
FLookAndFeel: TcxLookAndFeel;
FSizeGripWidth: integer;
FSizeGripHeight: integer;
FSizeGripRect: TRect;
function GetFolder: string;
procedure SetFolder(const Value: string);
function GetCaption: string;
procedure SetCaption(const Value: string);
function GetFolderCaption: string;
procedure SetFolderCaption(const Value: string);
function GetShellOptions: TcxShellTreeViewOptions;
procedure SetShellOptions(Value: TcxShellTreeViewOptions);
function GetRoot: TcxShellTreeRoot;
procedure SetRoot(const Value: TcxShellTreeRoot);
function GetShButtons: boolean;
function GetShInfoTips: boolean;
function GetShShowLines: boolean;
function GetShShowRoot: boolean;
procedure SetSfShowRoot(const Value: boolean);
procedure SetShButtons(const Value: boolean);
procedure SetShInfoTips(const Value: boolean);
procedure SetShShowLines(const Value: boolean);
procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
procedure LFChanged(Sender: TcxLookAndFeel; AChangedValues: TcxLookAndFeelValues);
procedure SetLookAndFeel(Value: TcxLookAndFeel);
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property DlgCaption: string read GetCaption write SetCaption;
property DlgFolderLabelCaption: string read GetFolderCaption write SetFolderCaption;
property DlgOptions: TcxShellTreeViewOptions read GetShellOptions
write SetShellOptions;
property DlgShowButtons: boolean read GetShButtons write SetShButtons;
property DlgShowInfoTips: boolean read GetShInfoTips write SetShInfoTips;
property DlgShowLines: boolean read GetShShowLines write SetShShowLines;
property DlgShowRoot: boolean read GetShShowRoot write SetSfShowRoot;
property DlgRoot: TcxShellTreeRoot read GetRoot write SetRoot;
property DlgFolder: string read GetFolder write SetFolder;
property LookAndFeel: TcxLookAndFeel read FLookAndFeel write SetLookAndFeel;
end;
implementation
{$R *.dfm}
uses
Types, cxClasses, cxEditConsts, dxThemeConsts, dxThemeManager, dxUxTheme;
{ TcxShellBrowserDlg }
constructor TcxShellBrowserDlg.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FLookAndFeel := TcxLookAndFeel.Create(Self);
FLookAndFeel.OnChanged := LFChanged;
cxStv.Style.LookAndFeel.MasterLookAndFeel := FLookAndFeel;
cxTeFolder.Style.LookAndFeel.MasterLookAndFeel := FLookAndFeel;
cxButton1.LookAndFeel.MasterLookAndFeel := FLookAndFeel;
cxButton2.LookAndFeel.MasterLookAndFeel := FLookAndFeel;
cxButton1.Caption := cxGetResourceString(@cxSEditButtonOK);
cxButton2.Caption := cxGetResourceString(@cxSEditButtonCancel);
end;
destructor TcxShellBrowserDlg.Destroy;
begin
FreeAndNil(FLookAndFeel);
inherited Destroy;
end;
procedure TcxShellBrowserDlg.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := WS_EX_DLGMODALFRAME or WS_EX_WINDOWEDGE;
end;
procedure TcxShellBrowserDlg.CreateWnd;
begin
inherited CreateWnd;
SendMessage(Handle, WM_SETICON, 1, 0);
end;
function TcxShellBrowserDlg.GetCaption: string;
begin
Result := Caption;
end;
function TcxShellBrowserDlg.GetFolder: string;
begin
Result := cxStv.Path;
end;
function TcxShellBrowserDlg.GetFolderCaption: string;
begin
Result := lblFolder.Caption;
end;
procedure TcxShellBrowserDlg.SetCaption(const Value: string);
begin
Caption := Value;
end;
procedure TcxShellBrowserDlg.SetFolder(const Value: string);
begin
cxStv.Path := Value;
end;
procedure TcxShellBrowserDlg.SetFolderCaption(const Value: string);
begin
lblFolder.Caption := Value;
end;
procedure TcxShellBrowserDlg.FormResize(Sender: TObject);
begin
cxTeFolder.Text := MinimizeName(cxStv.Path, Canvas, cxTeFolder.Width);
FSizeGripRect := ClientRect;
FSizeGripRect.Left := FSizeGripRect.Right - FSizeGripWidth;
FSizeGripRect.Top := FSizeGripRect.Bottom - FSizeGripHeight;
Refresh;
end;
procedure TcxShellBrowserDlg.cxStvChange(Sender: TObject;
Node: TTreeNode);
begin
with cxTeFolder do
Text := MinimizeName(cxStv.Path, Self.Canvas, Width);
// cxStv.InnerTreeView.Selected.MakeVisible;
end;
procedure TcxShellBrowserDlg.SetShellOptions(Value: TcxShellTreeViewOptions);
begin
cxStv.Options := Value;
end;
function TcxShellBrowserDlg.GetRoot: TcxShellTreeRoot;
begin
Result := cxStv.Root;
end;
procedure TcxShellBrowserDlg.SetRoot(const Value: TcxShellTreeRoot);
begin
cxStv.Root := Value;
end;
function TcxShellBrowserDlg.GetShButtons: boolean;
begin
Result := cxStv.ShowButtons;
end;
function TcxShellBrowserDlg.GetShellOptions: TcxShellTreeViewOptions;
begin
Result := cxStv.Options;
end;
function TcxShellBrowserDlg.GetShInfoTips: boolean;
begin
Result := cxStv.ShowInfoTips;
end;
function TcxShellBrowserDlg.GetShShowLines: boolean;
begin
Result := cxStv.ShowLines;
end;
function TcxShellBrowserDlg.GetShShowRoot: boolean;
begin
Result := cxStv.ShowRoot;
end;
procedure TcxShellBrowserDlg.SetSfShowRoot(const Value: boolean);
begin
cxStv.ShowRoot := Value;
end;
procedure TcxShellBrowserDlg.SetShButtons(const Value: boolean);
begin
cxStv.ShowButtons := Value;
end;
procedure TcxShellBrowserDlg.SetShInfoTips(const Value: boolean);
begin
cxStv.ShowInfoTips := Value;
end;
procedure TcxShellBrowserDlg.SetShShowLines(const Value: boolean);
begin
cxStv.ShowLines := Value;
end;
procedure TcxShellBrowserDlg.FormPaint(Sender: TObject);
var
ACanvas: TcxCanvas;
begin
ACanvas := TcxCanvas.Create(Canvas);
try
FLookAndFeel.Painter.DrawSizeGrip(ACanvas, FSizeGripRect, clNone);
finally
ACanvas.Free;
end;
end;
procedure TcxShellBrowserDlg.FormCreate(Sender: TObject);
begin
FSizeGripWidth := GetSystemMetrics(SM_CXVSCROLL);
FSizeGripHeight := GetSystemMetrics(SM_CYHSCROLL);
end;
procedure TcxShellBrowserDlg.WMNCHitTest(var Message: TWMNCHitTest);
begin
inherited;
if PtInRect(FSizeGripRect,
ScreenToClient(SmallPointToPoint(Message.Pos))) then
Message.Result := HTBOTTOMRIGHT;
end;
procedure TcxShellBrowserDlg.LFChanged(Sender: TcxLookAndFeel; AChangedValues: TcxLookAndFeelValues);
begin
end;
procedure TcxShellBrowserDlg.SetLookAndFeel(Value: TcxLookAndFeel);
begin
FLookAndFeel.Assign(Value);
end;
end.