📄 jvcomctrls.pas
字号:
property OnMouseEnter;
property OnMouseLeave;
property OnParentColorChange;
property Color;
end;
TJvTrackToolTipSide = (tsLeft, tsTop, tsRight, tsBottom);
TJvTrackToolTipEvent = procedure(Sender: TObject; var ToolTipText: string) of object;
TJvTrackBar = class(TJvExTrackBar)
private
FOnChanged: TNotifyEvent;
FShowRange: Boolean;
{$IFDEF VCL}
FToolTips: Boolean;
FToolTipSide: TJvTrackToolTipSide;
FToolTipText: WideString;
FOnToolTip: TJvTrackToolTipEvent;
procedure SetToolTips(const Value: Boolean);
procedure SetToolTipSide(const Value: TJvTrackToolTipSide);
procedure WMNotify(var Msg: TWMNotify); message WM_NOTIFY;
procedure CNHScroll(var Msg: TWMHScroll); message CN_HSCROLL;
procedure CNVScroll(var Msg: TWMVScroll); message CN_VSCROLL;
{$ENDIF VCL}
procedure SetShowRange(const Value: Boolean);
protected
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
{$IFDEF VCL}
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override;
procedure InternalSetToolTipSide;
{$ENDIF VCL}
public
constructor Create(AOwner: TComponent); override;
published
property ShowRange: Boolean read FShowRange write SetShowRange default True;
{$IFDEF VCL}
property ToolTips: Boolean read FToolTips write SetToolTips default False;
property ToolTipSide: TJvTrackToolTipSide read FToolTipSide write SetToolTipSide default tsLeft;
{$ENDIF VCL}
property HintColor;
property OnMouseEnter;
property OnMouseLeave;
property OnParentColorChange;
property OnChanged: TNotifyEvent read FOnChanged write FOnChanged;
property Color;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
{$IFDEF VCL}
property OnToolTip: TJvTrackToolTipEvent read FOnToolTip write FOnToolTip;
{$ENDIF VCL}
end;
{$IFDEF VCL}
TJvTreeNode = class(TTreeNode)
private
FBold: Boolean;
FChecked: Boolean;
FPopupMenu: TPopupMenu;
function GetChecked: Boolean;
procedure SetChecked(Value: Boolean);
function GetBold: Boolean;
procedure SetBold(const Value: Boolean);
procedure SetPopupMenu(const Value: TPopupMenu);
protected
procedure Reinitialize; virtual;
public
class function CreateEnh(AOwner: TTreeNodes): TJvTreeNode;
procedure Assign(Source: TPersistent); override;
property Checked: Boolean read GetChecked write SetChecked;
property Bold: Boolean read GetBold write SetBold;
property PopupMenu: TPopupMenu read FPopupMenu write SetPopupMenu;
end;
TPageChangedEvent = procedure(Sender: TObject; Item: TTreeNode; Page: TTabSheet) of object;
TJvTreeViewComparePageEvent = procedure(Sender: TObject; Page: TTabSheet;
Node: TTreeNode; var Matches: Boolean) of object;
TJvTreeView = class(TJvExTreeView)
private
FAutoDragScroll: Boolean;
FClearBeforeSelect: Boolean;
{$IFDEF COMPILER5}
FMultiSelect: Boolean;
{$ENDIF COMPILER5}
FScrollDirection: Integer;
FSelectedList: TObjectList;
FSelectThisNode: Boolean;
FOnCustomDrawItem: TTVCustomDrawItemEvent;
FOnEditCancelled: TNotifyEvent;
FOnSelectionChange: TNotifyEvent;
FCheckBoxes: Boolean;
FOnHScroll: TNotifyEvent;
FOnVScroll: TNotifyEvent;
FPageControl: TPageControl;
FOnPage: TPageChangedEvent;
FOnComparePage: TJvTreeViewComparePageEvent;
FMenu: TMenu;
FOldMenuChange: TMenuChangeEvent;
FMenuDblClick: Boolean;
FReinitializeTreeNode: Boolean;
procedure InternalCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
function GetSelectedCount: Integer;
function GetSelectedItem(Index: Integer): TTreeNode;
{$IFDEF COMPILER5}
procedure SetMultiSelect(const Value: Boolean);
{$ENDIF COMPILER5}
procedure SetScrollDirection(const Value: Integer);
procedure WMLButtonDown(var Msg: TWMLButtonDown); message WM_LBUTTONDOWN;
procedure WMTimer(var Msg: TWMTimer); message WM_TIMER;
procedure WMHScroll(var Msg: TWMHScroll); message WM_HSCROLL;
procedure WMVScroll(var Msg: TWMVScroll); message WM_VSCROLL;
procedure SetCheckBoxes(const Value: Boolean);
function GetItemHeight: Integer;
procedure SetItemHeight(Value: Integer);
function GetInsertMarkColor: TColor;
procedure SetInsertMarkColor(Value: TColor);
function GetLineColor: TColor;
procedure SetLineColor(Value: TColor);
function GetMaxScrollTime: Integer;
procedure SetMaxScrollTime(const Value: Integer);
function GetUseUnicode: Boolean;
procedure SetUseUnicode(const Value: Boolean);
procedure SetMenu(const Value: TMenu);
procedure DoMenuChange(Sender: TObject; Source: TMenuItem; Rebuild: Boolean);
procedure SetPageControl(const Value: TPageControl);
function GetItemIndex: Integer;
procedure SetItemIndex(const Value: Integer);
protected
procedure RebuildFromMenu; virtual;
function IsMenuItemClick(Node: TTreeNode): Boolean;
function DoComparePage(Page: TTabSheet; Node: TTreeNode): Boolean; virtual;
function CreateNode: TTreeNode; override;
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override;
procedure DestroyWnd; override;
procedure CNNotify(var Msg: TWMNotify); message CN_NOTIFY;
procedure WMPaint(var Msg: TMessage); message WM_PAINT;
procedure Change(Node: TTreeNode); override;
procedure Delete(Node: TTreeNode); override;
procedure DoEditCancelled; dynamic;
procedure DoEnter; override;
procedure DoExit; override;
procedure DoEndDrag(Target: TObject; X, Y: Integer); override;
procedure DoSelectionChange; dynamic;
procedure DragOver(Source: TObject; X, Y: Integer; State: TDragState;
var Accept: Boolean); override;
procedure Edit(const Item: TTVItem); override;
procedure InvalidateNode(Node: TTreeNode);
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure KeyPress(var Key: Char); override;
procedure ResetPostOperationFlags;
property ScrollDirection: Integer read FScrollDirection write SetScrollDirection;
procedure Notification(AComponent: TComponent; Operation: TOperation);
override;
procedure DblClick; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure ClearSelection; reintroduce;
function IsNodeSelected(Node: TTreeNode): Boolean;
procedure InvalidateNodeIcon(Node: TTreeNode);
procedure InvalidateSelectedItems;
procedure SelectItem(Node: TTreeNode; Unselect: Boolean = False);
property SelectedItems[Index: Integer]: TTreeNode read GetSelectedItem;
property SelectedCount: Integer read GetSelectedCount;
function GetBold(Node: TTreeNode): Boolean;
procedure SetBold(Node: TTreeNode; Value: Boolean);
function GetChecked(Node: TTreeNode): Boolean;
procedure SetChecked(Node: TTreeNode; Value: Boolean);
procedure SetNodePopup(Node: TTreeNode; Value: TPopupMenu);
function GetNodePopup(Node: TTreeNode): TPopupMenu;
procedure InsertMark(Node: TTreeNode; MarkAfter: Boolean); // TVM_SETINSERTMARK
procedure RemoveMark;
property InsertMarkColor: TColor read GetInsertMarkColor write SetInsertMarkColor;
property Checked[Node: TTreeNode]: Boolean read GetChecked write SetChecked;
property MaxScrollTime: Integer read GetMaxScrollTime write SetMaxScrollTime;
// UseUnicode should only be changed on Win95 and Win98 that has IE5 or later installed
property UseUnicode: Boolean read GetUseUnicode write SetUseUnicode default False;
published
property LineColor: TColor read GetLineColor write SetLineColor default clDefault;
property ItemHeight: Integer read GetItemHeight write SetItemHeight default 16;
property Menu: TMenu read FMenu write SetMenu;
property MenuDblClick: Boolean read FMenuDblClick write FMenuDblClick default False;
property HintColor;
property ItemIndex: Integer read GetItemIndex write SetItemIndex stored False;
property Checkboxes: Boolean read FCheckBoxes write SetCheckBoxes default False;
property PageControl: TPageControl read FPageControl write SetPageControl;
property AutoDragScroll: Boolean read FAutoDragScroll write FAutoDragScroll default False;
{$IFDEF COMPILER5}
property MultiSelect: Boolean read FMultiSelect write SetMultiSelect default False;
{$ENDIF COMPILER5}
property OnVerticalScroll: TNotifyEvent read FOnVScroll write FOnVScroll;
property OnHorizontalScroll: TNotifyEvent read FOnHScroll write FOnHScroll;
property OnPageChanged: TPageChangedEvent read FOnPage write FOnPage;
property OnComparePage: TJvTreeViewComparePageEvent read FOnComparePage write FOnComparePage;
property OnMouseEnter;
property OnMouseLeave;
property OnParentColorChange;
property OnCustomDrawItem: TTVCustomDrawItemEvent read FOnCustomDrawItem write FOnCustomDrawItem;
property OnEditCancelled: TNotifyEvent read FOnEditCancelled write FOnEditCancelled;
property OnSelectionChange: TNotifyEvent read FOnSelectionChange write FOnSelectionChange;
end;
{$ENDIF VCL}
{$IFDEF VisualCLX}
{ A fake component which either maps the properties to TTreeView or ignores them. }
TJvTreeView = class(TJvExTreeView)
private
FOnSelectionChange: TNotifyEvent;
FLineColor: TColor;
FLastSelection: TTreeNode;
FHideSelection: Boolean;
FShowRoot: Boolean;
procedure SetLineColor(Value: TColor);
procedure SetHideSelection(Value: Boolean);
procedure SetShowRoot(Value: Boolean);
protected
procedure Change(Node: TTreeNode); override;
procedure DoSelectionChange; dynamic;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property HideSelection: Boolean read FHideSelection write SetHideSelection default True;
property ShowRoot: Boolean read FShowRoot write SetShowRoot default True;
property LineColor: TColor read FLineColor write SetLineColor default clDefault;
property OnSelectionChange: TNotifyEvent read FOnSelectionChange write FOnSelectionChange;
end;
{$ENDIF VisualCLX}
{$IFDEF UNITVERSIONING}
const
UnitVersioning: TUnitVersionInfo = (
RCSfile: '$RCSfile: JvComCtrls.pas,v $';
Revision: '$Revision: 1.84 $';
Date: '$Date: 2005/03/09 07:24:56 $';
LogPath: 'JVCL\run'
);
{$ENDIF UNITVERSIONING}
implementation
uses
SysUtils,
JclStrings,
JvConsts, JvJCLUtils;
{$IFDEF VCL}
const
TVIS_CHECKED = $2000;
//=== { TJvIPAddressRange } ==================================================
constructor TJvIPAddressRange.Create(Control: TWinControl);
var
I: Integer;
begin
inherited Create;
FControl := Control;
for I := Low(FRange) to High(FRange) do
begin
FRange[I].Min := 0;
FRange[I].Max := 255;
end;
end;
procedure TJvIPAddressRange.AssignTo(Dest: TPersistent);
begin
if Dest is TJvIPAddressRange then
with TJvIPAddressRange(Dest) do
begin
FRange := Self.FRange;
Change(-1);
end
else
inherited AssignTo(Dest);
end;
procedure TJvIPAddressRange.Change(Index: Integer);
var
I: Integer;
procedure ChangeRange(FieldIndex: Integer);
begin
with FRange[FieldIndex] do
FControl.Perform(IPM_SETRANGE, FieldIndex, MAKEIPRANGE(Min, Max));
end;
begin
if not FControl.HandleAllocated then
Exit;
if Index = -1 then
for I := Low(FRange) to High(FRange) do
ChangeRange(I)
else
ChangeRange(Index);
end;
function TJvIPAddressRange.GetMaxRange(Index: Integer): Byte;
begin
Result := FRange[Index].Max;
end;
function TJvIPAddressRange.GetMinRange(Index: Integer): Byte;
begin
Result := FRange[Index].Min;
end;
procedure TJvIPAddressRange.SetMaxRange(const Index: Integer; const Value: Byte);
begin
FRange[Index].Max := Value;
Change(Index);
end;
procedure TJvIPAddressRange.SetMinRange(const Index: Integer; const Value: Byte);
begin
FRange[Index].Min := Value;
Change(Index);
end;
//=== { TJvIPEditControlHelper } =============================================
constructor TJvIPEditControlHelper.Create(AIPAddress: TJvIPAddress);
begin
inherited Create;
FHandle := 0;
FIPAddress := AIPAddress;
FInstance := MakeObjectInstance(WndProc);
end;
destructor TJvIPEditControlHelper.Destroy;
begin
Handle := 0;
if Assigned(FInstance) then
FreeObjectInstance(FInstance);
inherited Destroy;
end;
procedure TJvIPEditControlHelper.SetFocus;
begin
if FHandle <> 0 then
begin
Windows.SetFocus(FHandle);
SendMessage(FHandle, EM_SETSEL, 0, MaxInt);
end;
end;
function TJvIPEditControlHelper.Focused: Boolean;
begin
if FHandle <> 0 then
Result := Windows.GetFocus = FHandle
else
Result := False;
end;
procedure TJvIPEditControlHelper.DefaultHandler(var Msg);
begin
with TMessage(Msg) do
Result := CallWindowProc(FOrgWndProc, FHandle, Msg, WParam, LParam);
end;
procedure TJvIPEditControlHelper.SetHandle(const Value: THandle);
begin
if Value <> FHandle then
begin
if FHandle <> 0 then
SetWindowLong(FHandle, GWL_WNDPROC, Integer(FOrgWndProc));
FHandle := Value;
if FHandle <> 0 then
begin
FOrgWndProc := Pointer(GetWindowLong(FHandle, GWL_WNDPROC));
SetWindowLong(FHandle, GWL_WNDPROC, Integer(FInstance));
end;
end;
end;
procedure TJvIPEditControlHelper.WndProc(var Msg: TMessage);
begin
case Msg.Msg of
WM_ENABLE:
if csDesigning in FIPAddress.ComponentState then
Exit;
WM_DESTROY:
Handle := 0;
WM_KEYFIRST..WM_KEYLAST:
begin
FIPAddress.Dispatch(Msg);
if Msg.WParam = VK_TAB then
Exit;
end;
// mouse messages are sent through TJvIPAddress.WMParentNotify
end;
Dispatch(Msg);
end;
//=== { TJvIPAddress } =======================================================
constructor TJvIPAddress.Create(AOwner: TComponent);
var
I: Integer;
begin
CheckCommonControl(ICC_INTERNET_CLASSES);
inherited Create(AOwner);
ControlStyle := ControlStyle + [csFixedHeight, csReflector];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -