tvplanit: Fix and activate component editor of TVpNavBar (still some issues!). Fix TvNavBar background painting issue (#33675).

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6370 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2018-05-02 15:52:08 +00:00
parent 0dd145f49a
commit 3627e39793
6 changed files with 877 additions and 485 deletions

View File

@ -1,347 +1,380 @@
object frmNavBarEd: TfrmNavBarEd
Left = 374
Height = 344
Height = 364
Top = 236
Width = 426
Width = 543
HorzScrollBar.Page = 425
VertScrollBar.Page = 322
Caption = 'Nav Bar Layout Tool'
ClientHeight = 344
ClientWidth = 426
ClientHeight = 364
ClientWidth = 543
FormStyle = fsStayOnTop
OnClose = FormClose
OnCreate = FormCreate
OnResize = FormResize
OnShow = FormShow
Position = poScreenCenter
LCLVersion = '1.7'
object pnlItems: TPanel
Left = 217
Height = 226
Top = 0
Width = 209
Align = alClient
BevelOuter = bvNone
ClientHeight = 226
ClientWidth = 209
TabOrder = 1
object lbItems: TListBox
Left = 0
Height = 203
Top = 23
Width = 173
Align = alClient
ItemHeight = 13
OnClick = lbItemsClick
OnDrawItem = lbItemsDrawItem
Style = lbOwnerDrawVariable
TabOrder = 1
end
object Panel1: TPanel
Left = 173
Height = 203
Top = 23
Width = 32
Align = alRight
BorderSpacing.Right = 4
BevelOuter = bvNone
ClientHeight = 203
ClientWidth = 32
TabOrder = 2
object btnItemAdd: TSpeedButton
Left = 4
Height = 25
Hint = 'Add Item'
Top = 7
Width = 25
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
3000333300000333300033330AAA0333300033330AAA0333300030000AAA0000
300030AAAAAAAAA0300030AAAAAAAAA0300030AAAAAAAAA0300030000AAA0000
300033330AAA0333300033330AAA033330003333000003333000333333333333
3000
}
Layout = blGlyphTop
Spacing = 1
OnClick = btnItemAddClick
ShowHint = True
ParentShowHint = False
end
object btnItemDelete: TSpeedButton
Left = 4
Height = 25
Hint = 'Remove item'
Top = 39
Width = 25
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
3000333333333333300033333333333330003333333333333000300000000000
3000309999999990300030999999999030003099999999903000300000000000
3000333333333333300033333333333330003333333333333000333333333333
3000
}
Layout = blGlyphTop
Spacing = 1
OnClick = btnItemDeleteClick
ShowHint = True
ParentShowHint = False
end
object btnItemUp: TSpeedButton
Left = 4
Height = 25
Hint = 'Move item up'
Top = 72
Width = 25
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
3000333333333333300033330000033330003333066603333000333306660333
3000333306660333300030000666000030003306666666033000333066666033
3000333306660333300033333060333330003333330333333000333333333333
3000
}
Layout = blGlyphTop
Spacing = 1
OnClick = btnItemUpClick
ShowHint = True
ParentShowHint = False
end
object btnItemDown: TSpeedButton
Left = 4
Height = 25
Hint = 'Move item down'
Top = 104
Width = 25
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
3000333333333333300033333303333330003333306033333000333306660333
3000333066666033300033066666660330003000066600003000333306660333
3000333306660333300033330666033330003333000003333000333333333333
3000
}
Layout = blGlyphTop
Spacing = 1
OnClick = btnItemDownClick
ShowHint = True
ParentShowHint = False
end
end
object Panel4: TPanel
Left = 0
Height = 23
Top = 0
Width = 209
Align = alTop
BevelOuter = bvNone
ClientHeight = 23
ClientWidth = 209
TabOrder = 0
object Label2: TLabel
Left = 0
Height = 15
Top = 4
Width = 62
Caption = '&Items/Icons'
FocusControl = lbItems
ParentColor = False
end
end
end
object pnlFolders: TPanel
Left = 0
Height = 226
Top = 0
Width = 217
Align = alLeft
BevelOuter = bvNone
ClientHeight = 226
ClientWidth = 217
TabOrder = 0
object lbFolders: TListBox
Left = 4
Height = 203
Top = 23
Width = 181
Align = alClient
BorderSpacing.Left = 4
ItemHeight = 0
OnClick = lbFoldersClick
TabOrder = 1
end
object Panel6: TPanel
Left = 0
Height = 23
Top = 0
Width = 217
Align = alTop
BevelOuter = bvNone
ClientHeight = 23
ClientWidth = 217
TabOrder = 0
object Label1: TLabel
Left = 4
Height = 15
Top = 4
Width = 38
Caption = '&Folders'
FocusControl = lbFolders
ParentColor = False
end
end
object Panel5: TPanel
Left = 185
Height = 203
Top = 23
Width = 32
Align = alRight
BevelOuter = bvNone
ClientHeight = 203
ClientWidth = 32
TabOrder = 2
object btnFolderAdd: TSpeedButton
Left = 4
Height = 25
Hint = 'Add Item'
Top = 7
Width = 25
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
3000333300000333300033330AAA0333300033330AAA0333300030000AAA0000
300030AAAAAAAAA0300030AAAAAAAAA0300030AAAAAAAAA0300030000AAA0000
300033330AAA0333300033330AAA033330003333000003333000333333333333
3000
}
Layout = blGlyphTop
Spacing = 1
OnClick = btnFolderAddClick
ShowHint = True
ParentShowHint = False
end
object btnFolderDelete: TSpeedButton
Left = 4
Height = 25
Hint = 'Remove item'
Top = 39
Width = 25
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
3000333333333333300033333333333330003333333333333000300000000000
3000309999999990300030999999999030003099999999903000300000000000
3000333333333333300033333333333330003333333333333000333333333333
3000
}
Layout = blGlyphTop
Spacing = 1
OnClick = btnFolderDeleteClick
ShowHint = True
ParentShowHint = False
end
object btnFolderUp: TSpeedButton
Left = 4
Height = 25
Hint = 'Move item up'
Top = 72
Width = 25
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
3000333333333333300033330000033330003333066603333000333306660333
3000333306660333300030000666000030003306666666033000333066666033
3000333306660333300033333060333330003333330333333000333333333333
3000
}
Layout = blGlyphTop
Spacing = 1
OnClick = btnFolderUpClick
ShowHint = True
ParentShowHint = False
end
object btnFolderDown: TSpeedButton
Left = 4
Height = 25
Hint = 'Move item down'
Top = 104
Width = 25
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
3000333333333333300033333303333330003333306033333000333306660333
3000333066666033300033066666660330003000066600003000333306660333
3000333306660333300033330666033330003333000003333000333333333333
3000
}
Layout = blGlyphTop
Spacing = 1
OnClick = btnFolderDownClick
ShowHint = True
ParentShowHint = False
end
end
end
LCLVersion = '1.9.0.0'
object pnlImages: TPanel
Left = 0
Height = 118
Top = 226
Width = 426
Height = 85
Top = 279
Width = 543
Align = alBottom
AutoSize = True
BevelOuter = bvNone
ClientHeight = 118
ClientWidth = 426
TabOrder = 2
ClientHeight = 85
ClientWidth = 543
TabOrder = 0
object Panel8: TPanel
Left = 0
Height = 27
Top = 0
Width = 426
Width = 543
Align = alTop
BevelOuter = bvNone
ClientHeight = 27
ClientWidth = 426
ClientWidth = 543
TabOrder = 0
object Label3: TLabel
AnchorSideLeft.Control = Panel8
AnchorSideTop.Control = Panel8
Left = 4
Height = 15
Top = 8
Width = 89
Caption = 'Available I&mages'
BorderSpacing.Left = 4
BorderSpacing.Top = 8
Caption = 'Available Images'
ParentColor = False
end
end
object lbImages: TListBox
object sbImages: TScrollBox
Left = 4
Height = 87
Height = 54
Top = 27
Width = 418
Width = 535
HorzScrollBar.Page = 56
HorzScrollBar.Tracking = True
VertScrollBar.Page = 50
Align = alClient
AutoSize = True
BorderSpacing.Left = 4
BorderSpacing.Right = 4
BorderSpacing.Bottom = 4
Columns = 10
ItemHeight = 16
OnClick = lbImagesClick
OnDrawItem = lbImagesDrawItem
Style = lbOwnerDrawFixed
ClientHeight = 50
ClientWidth = 531
Color = clWindow
ParentColor = False
TabOrder = 1
OnResize = sbImagesResize
object pnlImageView: TPanel
Left = 0
Height = 50
Top = 0
Width = 56
Constraints.MinHeight = 40
TabOrder = 0
OnClick = pnlImageViewClick
OnPaint = pnlImageViewPaint
end
end
end
object pnlFoldersAndItems: TPanel
Left = 0
Height = 279
Top = 0
Width = 543
Align = alClient
BevelOuter = bvNone
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.EnlargeVertical = crsHomogenousChildResize
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 2
ClientHeight = 279
ClientWidth = 543
TabOrder = 1
object pnlFolders: TPanel
Left = 0
Height = 279
Top = 0
Width = 272
BevelOuter = bvNone
ClientHeight = 279
ClientWidth = 272
TabOrder = 0
object lbFolders: TListBox
Left = 4
Height = 256
Top = 23
Width = 236
Align = alClient
BorderSpacing.Left = 4
ItemHeight = 0
OnClick = lbFoldersClick
TabOrder = 1
end
object Panel6: TPanel
Left = 0
Height = 23
Top = 0
Width = 272
Align = alTop
BevelOuter = bvNone
ClientHeight = 23
ClientWidth = 272
TabOrder = 0
object Label1: TLabel
Left = 4
Height = 15
Top = 4
Width = 38
Caption = '&Folders'
FocusControl = lbFolders
ParentColor = False
end
end
object Panel5: TPanel
Left = 240
Height = 256
Top = 23
Width = 32
Align = alRight
BevelOuter = bvNone
ClientHeight = 256
ClientWidth = 32
TabOrder = 2
object btnFolderAdd: TSpeedButton
Left = 4
Height = 25
Hint = 'Add folder'
Top = 7
Width = 25
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
3000333300000333300033330AAA0333300033330AAA0333300030000AAA0000
300030AAAAAAAAA0300030AAAAAAAAA0300030AAAAAAAAA0300030000AAA0000
300033330AAA0333300033330AAA033330003333000003333000333333333333
3000
}
Layout = blGlyphTop
Spacing = 1
OnClick = btnFolderAddClick
ShowHint = True
ParentShowHint = False
end
object btnFolderDelete: TSpeedButton
Left = 4
Height = 25
Hint = 'Remove folder'
Top = 40
Width = 25
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
3000333333333333300033333333333330003333333333333000300000000000
3000309999999990300030999999999030003099999999903000300000000000
3000333333333333300033333333333330003333333333333000333333333333
3000
}
Layout = blGlyphTop
Spacing = 1
OnClick = btnFolderDeleteClick
ShowHint = True
ParentShowHint = False
end
object btnFolderUp: TSpeedButton
Left = 4
Height = 25
Hint = 'Move folder up'
Top = 72
Width = 25
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
3000333333333333300033330000033330003333066603333000333306660333
3000333306660333300030000666000030003306666666033000333066666033
3000333306660333300033333060333330003333330333333000333333333333
3000
}
Layout = blGlyphTop
Spacing = 1
OnClick = btnFolderUpClick
ShowHint = True
ParentShowHint = False
end
object btnFolderDown: TSpeedButton
Left = 4
Height = 25
Hint = 'Move folder down'
Top = 104
Width = 25
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
3000333333333333300033333303333330003333306033333000333306660333
3000333066666033300033066666660330003000066600003000333306660333
3000333306660333300033330666033330003333000003333000333333333333
3000
}
Layout = blGlyphTop
Spacing = 1
OnClick = btnFolderDownClick
ShowHint = True
ParentShowHint = False
end
end
end
object pnlItems: TPanel
Left = 272
Height = 279
Top = 0
Width = 271
BevelOuter = bvNone
ClientHeight = 279
ClientWidth = 271
TabOrder = 1
object lbItems: TListBox
Left = 0
Height = 256
Top = 23
Width = 235
Align = alClient
ItemHeight = 13
OnClick = lbItemsClick
OnDrawItem = lbItemsDrawItem
OnMeasureItem = lbItemsMeasureItem
Style = lbOwnerDrawVariable
TabOrder = 1
end
object Panel1: TPanel
Left = 235
Height = 256
Top = 23
Width = 32
Align = alRight
BorderSpacing.Right = 4
BevelOuter = bvNone
ClientHeight = 256
ClientWidth = 32
TabOrder = 2
object btnItemAdd: TSpeedButton
Left = 4
Height = 25
Hint = 'Add Item'
Top = 7
Width = 25
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
3000333300000333300033330AAA0333300033330AAA0333300030000AAA0000
300030AAAAAAAAA0300030AAAAAAAAA0300030AAAAAAAAA0300030000AAA0000
300033330AAA0333300033330AAA033330003333000003333000333333333333
3000
}
Layout = blGlyphTop
Spacing = 1
OnClick = btnItemAddClick
ShowHint = True
ParentShowHint = False
end
object btnItemDelete: TSpeedButton
Left = 4
Height = 25
Hint = 'Remove item'
Top = 39
Width = 25
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
3000333333333333300033333333333330003333333333333000300000000000
3000309999999990300030999999999030003099999999903000300000000000
3000333333333333300033333333333330003333333333333000333333333333
3000
}
Layout = blGlyphTop
Spacing = 1
OnClick = btnItemDeleteClick
ShowHint = True
ParentShowHint = False
end
object btnItemUp: TSpeedButton
Left = 4
Height = 25
Hint = 'Move item up'
Top = 72
Width = 25
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
3000333333333333300033330000033330003333066603333000333306660333
3000333306660333300030000666000030003306666666033000333066666033
3000333306660333300033333060333330003333330333333000333333333333
3000
}
Layout = blGlyphTop
Spacing = 1
OnClick = btnItemUpClick
ShowHint = True
ParentShowHint = False
end
object btnItemDown: TSpeedButton
Left = 4
Height = 25
Hint = 'Move item down'
Top = 104
Width = 25
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
3000333333333333300033333303333330003333306033333000333306660333
3000333066666033300033066666660330003000066600003000333306660333
3000333306660333300033330666033330003333000003333000333333333333
3000
}
Layout = blGlyphTop
Spacing = 1
OnClick = btnItemDownClick
ShowHint = True
ParentShowHint = False
end
end
object Panel4: TPanel
Left = 0
Height = 23
Top = 0
Width = 271
Align = alTop
BevelOuter = bvNone
ClientHeight = 23
ClientWidth = 271
TabOrder = 0
object Label2: TLabel
Left = 0
Height = 15
Top = 4
Width = 62
Caption = '&Items/Icons'
FocusControl = lbItems
ParentColor = False
end
end
end
end
end

View File

@ -34,34 +34,29 @@ unit VpNabEd;
interface
uses
{$IFDEF LCL}
LCLProc, LCLType, LCLIntf,
{$ELSE}
Windows, Messages,
{$ENDIF}
SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
{$IFDEF LCL}
lazlogger,
LCLProc, LCLType, LCLIntf,
PropEdits, LazarusPackageIntf, FieldsEditor, ComponentEditors,
{$ELSE}
Windows, Messages,
{$IFDEF VERSION6}
{$IFNDEF LCL}
DesignIntf, DesignEditors,
{$ELSE}
PropEdits,
LazarusPackageIntf,
FieldsEditor,
ComponentEditors,
{$ENDIF}
{$ELSE}
DsgnIntf,
{$ENDIF}
{$ENDIF}
SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Buttons,
VpBase, VpNavBar;
type
{$IFNDEF LCL}
{$IFDEF VERSION6}
{$IFDEF VERSION6}
TProtectedSelList = class(TDesignerSelections);
{$ENDIF}
{$ENDIF}
{$ENDIF}
TVpNavBarEditor = class(TComponentEditor)
@ -70,7 +65,11 @@ type
function GetVerbCount : Integer; override;
end;
{ TfrmNavBarEd }
TfrmNavBarEd = class(TForm)
pnlImageView: TPanel;
pnlFoldersAndItems: TPanel;
pnlItems: TPanel;
pnlFolders: TPanel;
lbItems: TListBox;
@ -92,47 +91,66 @@ type
pnlImages: TPanel;
Panel8: TPanel;
Label3: TLabel;
lbImages: TListBox;
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure lbFoldersClick(Sender: TObject);
procedure lbItemsMeasureItem(Control: TWinControl; Index: Integer;
var Height: Integer);
procedure lbItemsDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
procedure lbImagesDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
procedure lbImagesClick(Sender: TObject);
procedure btnItemUpClick(Sender: TObject);
procedure btnItemDownClick(Sender: TObject);
procedure btnFolderUpClick(Sender: TObject);
procedure btnFolderDownClick(Sender: TObject);
procedure btnItemDeleteClick(Sender: TObject);
procedure btnFolderDeleteClick(Sender: TObject);
sbImages: TScrollBox;
procedure btnFolderAddClick(Sender: TObject);
procedure btnFolderDeleteClick(Sender: TObject);
procedure btnFolderDownClick(Sender: TObject);
procedure btnFolderUpClick(Sender: TObject);
procedure btnItemAddClick(Sender: TObject);
procedure lbItemsClick(Sender: TObject);
procedure btnItemDeleteClick(Sender: TObject);
procedure btnItemDownClick(Sender: TObject);
procedure btnItemUpClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
// procedure FormResize(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure lbFoldersClick(Sender: TObject);
procedure lbItemsMeasureItem(Control: TWinControl; Index: Integer; var Height: Integer);
procedure lbItemsClick(Sender: TObject);
procedure lbItemsDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
procedure pnlImageViewClick(Sender: TObject);
procedure pnlImageViewPaint(Sender: TObject);
procedure sbImagesResize(Sender: TObject);
private
FBar: TVpNavBar;
FDesigner: TIDesigner;
RefreshTimer: TTimer;
{$IFDEF VERSION5}
{$IFDEF VERSION6}
{$IFNDEF LCL}
procedure SelectList(SelList : TDesignerSelections);
{$ENDIF}
{$ELSE}
procedure SelectList(SelList : TDesignerSelectionList);
{$ENDIF}
FSelImgIndex: Integer;
{$IFDEF LCL}
function FindBtnIndex(APersistent: TPersistent): Integer;
function FindFolderIndex(APersistent: TPersistent): Integer;
procedure OnGetSelection(const ASelection: TPersistentSelectionList);
procedure OnPersistentAdded(APersistent: TPersistent; Select: boolean);
procedure OnPersistentDeleting(APersistent: TPersistent);
procedure OnSetSelection(const ASelection: TPersistentSelectionList);
procedure SelectList(SelList: TPersistentSelectionList);
{$ELSE}
{$IFDEF VERSION5}
{$IFDEF VERSION6}
procedure SelectList(SelList: TDesignerSelections);
{$ELSE}
procedure SelectList(SelList : TComponentList);
procedure SelectList(SelList: TDesignerSelectionList);
{$ENDIF}
{$ELSE}
procedure SelectList(SelList: TComponentList);
{$ENDIF}
{$ENDIF}
procedure OnTimer(Sender: TObject);
public
{ Public declarations }
Bar : TVpNavBar;
Designer : TIDesigner;
procedure PopulateFolderList;
procedure PopulateItemList;
procedure SetData(ADesigner: TIDesigner; ABar: TVpNavBar);
property Bar: TVpNavBar read FBar;
property Designer: TIDesigner read FDesigner;
end;
var
@ -147,25 +165,26 @@ implementation
{$ENDIF}
uses
PropEditUtils,
VpMisc;
{$IFDEF VERSION6}
procedure EditNavBar(Designer : TIDesigner; Bar : TVpNavBar);
const
ITEMS_MARGIN = 2;
IMG_MARGIN = 4;
{$IFDEF LCL}
procedure EditNavBar(Designer: TIDesigner; Bar: TVpNavBar);
{$ELSE}
procedure EditNavBar(Designer : TIFormDesigner; Bar : TVpNavBar);
{$IFDEF VERSION6}
procedure EditNavBar(Designer: TIDesigner; Bar: TVpNavBar);
{$ELSE}
procedure EditNavBar(Designer: TIFormDesigner; Bar: TVpNavBar);
{$ENDIF}
{$ENDIF}
var
i : Integer;
begin
frmNavEd := TfrmNavBarEd.Create(Application);
frmNavEd.Bar := Bar;
frmNavEd.PopulateFolderList;
frmNavEd.Designer := Designer;
if Bar.Images <> nil then begin
frmNavEd.lbImages.ItemHeight := Bar.Images.Height + 4;
for i := 0 to pred(Bar.Images.Count) do
frmNavEd.lbImages.Items.Add(IntToStr(i));
end;
if frmNavEd = nil then
frmNavEd := TfrmNavBarEd.Create(Application);
frmNavEd.SetData(Designer, Bar);
frmNavEd.Show;
end;
@ -200,14 +219,17 @@ begin
RefreshTimer.OnTimer := OnTimer;
RefreshTimer.Enabled := true;
end;
{=====}
procedure TfrmNavBarEd.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
(*
Unused(Action);
RefreshTimer.Free;
Release;
*)
end;
{=====}
@ -236,20 +258,149 @@ begin
end;
end;
{=====}
(*
procedure TfrmNavBarEd.FormResize(Sender: TObject);
begin
pnlFolders.Width := (pnlItems.Width + pnlFolders.Width) div 2;
if Bar.Images <> nil then begin
pnlImages.Height := 25 + (5 * (Bar.Images.Height div 3));
lbImages.Columns := lbImages.Width div Bar.Images.Width;
lbImages.Columns := lbImages.ClientWidth div Bar.Images.Width;
{Allow for scrollbar if excessive number of images}
if (lbImages.Width >= Bar.Images.Width) then
pnlImages.Height := pnlImages.Height + 20;
end;
end; *)
procedure TfrmNavBarEd.FormShow(Sender: TObject);
begin
if Bar.Images <> nil then begin
// sbImages.Constraints.MinHeight := Bar.Images.Height + GetScrollbarHeight + 2*IMG_MARGIN;
pnlImages.Height := Bar.Images.Height + GetScrollbarHeight + 2*IMG_MARGIN +
Panel8.Height + pnlImages.BorderSpacing.Top + pnlImages.BorderSpacing.Bottom;
//lbImages.Columns := lbImages.ClientWidth div Bar.Images.Width;
end;
end;
{=====}
{$IFDEF LCL}
function TfrmNavBarEd.FindFolderIndex(APersistent: TPersistent): Integer;
begin
for Result := 0 to lbFolders.Items.Count-1 do
if TPersistent(lbFolders.Items.Objects[Result]) = APersistent then
exit;
Result := -1;
end;
function TfrmNavBarEd.FindBtnIndex(APersistent: TPersistent): Integer;
begin
for Result := 0 to lbItems.Items.Count-1 do
if TPersistent(lbItems.Items.Objects[Result]) = APersistent then
exit;
Result := -1;
end;
{$ENDIF}
{$IFDEF LCL}
procedure TfrmNavBarEd.OnGetSelection(const ASelection: TPersistentSelectionList);
var
i: Integer;
begin
if not Assigned(ASelection) then
exit;
if ASelection.Count > 0 then
ASelection.Clear;
if lbFolders.Focused then begin
for i:=0 to lbFolders.Items.Count-1 do
if lbFolders.Selected[i] then
ASelection.Add(TPersistent(lbFolders.Items.Objects[i]));
end else
if lbItems.Focused then begin
for i:=0 to lbItems.Items.Count-1 do
if lbItems.Selected[i] then
ASelection.Add(TPersistent(lbItems.Items.Objects[i]));
end;
end;
{$ENDIF}
{$IFDEF LCL}
procedure TfrmNavBarEd.OnPersistentAdded(APersistent: TPersistent; Select: boolean);
var
i: Integer;
begin
if not Assigned(APersistent) then
exit;
if (APersistent is TVpNavFolder) then
begin
PopulateFolderList;
if Select then begin
i := FindFolderIndex(APersistent);
lbFolders.ItemIndex := i;
end;
end else
if (APersistent is TVpNavBtnItem) then
begin
PopulateItemList;
if Select then begin
i := FindBtnIndex(APersistent);
lbItems.ItemIndex := i;
end;
end;
end;
{$ENDIF}
{$IFDEF LCL}
procedure TfrmNavBarEd.OnPersistentDeleting(APersistent: TPersistent);
var
i: Integer;
begin
if APersistent is TVpNavFolder then
begin
i := FindFolderIndex(APersistent);
if i <> -1 then lbFolders.Items.Delete(i);
end else
if APersistent is TVpNavBtnItem then
begin
i := FindBtnIndex(APersistent);
if i <> -1 then lbItems.Items.Delete(i);
end;
end;
{$ENDIF}
{$IFDEF LCL}
procedure TfrmNavBarEd.OnSetSelection(const ASelection: TPersistentSelectionList);
var
i, j: Integer;
begin
if Assigned(ASelection) and (ASelection.Count > 0) then
begin
if TPersistent(ASelection[0]) is TVpNavFolder then begin
//Unselect all
for i := 0 to lbFolders.Items.Count-1 do
lbFolders.Selected[i] := false;
//select from list
for i := 0 to ASelection.Count - 1 do begin
j := FindFolderIndex(ASelection[i]);
if j <> -1 then lbFolders.Selected[j] := true;
end;
end else
if TPersistent(ASelection[0]) is TVpNavBtnItem then
begin
// Unselect all
for i := 0 to lbItems.Items.Count - 1 do
lbItems.Selected[i] := false;
// Select from list
for i := 0 to ASelection.Count - 1 do begin
j := FindBtnIndex(ASelection[i]);
if j <> -1 then lbItems.Selected[j] := true;
end;
end;
end;
end;
{$ENDIF}
procedure TfrmNavBarEd.PopulateFolderList;
var
I : Integer;
@ -282,22 +433,92 @@ begin
end;
{=====}
procedure TfrmNavBarEd.SetData(ADesigner: TIDesigner; ABar: TVpNavBar);
var
i: Integer;
w: Integer;
begin
if FBar <> nil then
FBar.RemoveFreeNotification(self);
FBar := ABar;
FDesigner := ADesigner;
if FBar <> nil then
FBar.FreeNotification(self);
PopulateFolderList;
if FBar.Images <> nil then begin
w := (Bar.Images.Width + 2*IMG_MARGIN) * Bar.Images.Count;
pnlImageView.ClientWidth := w;
pnlImageView.Constraints.MinHeight := Bar.Images.Height + 2 * IMG_MARGIN + GetScrollbarHeight;
if w > sbImages.ClientWidth then begin
sbImages.HorzScrollbar.Range := w - sbImages.ClientWidth;
sbImages.HorzScrollbar.Visible := true;
end else
sbImages.HorzScrollbar.Visible := false;
(*
lbImages.ItemHeight := Bar.Images.Height + 4;
for i := 0 to pred(FBar.Images.Count) do
lbImages.Items.Add(IntToStr(i));
*)
end;
FSelImgIndex := -1;
if GlobalDesignHook <> nil then
begin
GlobalDesignHook.RemoveAllHandlersForObject(Self);
if FBar <> nil then
begin
GlobalDesignHook.AddHandlerPersistentAdded(OnPersistentAdded);
GlobalDesignHook.AddHandlerPersistentDeleting(OnPersistentDeleting);
GlobalDesignHook.AddHandlerGetSelection(OnGetSelection);
GlobalDesignHook.AddHandlerSetSelection(OnSetSelection);
end;
end;
end;
procedure TfrmNavBarEd.lbFoldersClick(Sender: TObject);
{$IFDEF LCL}
var
SelList: TPersistentSelectionList;
i: Integer;
begin
PopulateItemList;
Bar.ActiveFolder := lbFolders.ItemIndex;
FSelImgIndex := -1;
pnlImageView.Invalidate;
SelList := TPersistentSelectionList.Create;
SelList.ForceUpdate := true;
for i := 0 to pred(lbFolders.Items.Count) do
if lbFolders.Selected[i] then begin
SelList.Add(TPersistent(lbFolders.Items.Objects[i]));
Bar.FolderCollection.DoOnItemSelected(i);
end;
if not Bar.FolderCollection.ReadOnly then
begin
btnFolderUp.Enabled := SelList.Count = 1;
btnFolderDown.Enabled := btnFolderUp.Enabled;
btnFolderDelete.Enabled := btnFolderUp.Enabled;
end;
if SelList.Count > 0 then
SelectList(SelList);
end;
{$ELSE}
var
{$IFDEF VERSION5}
{$IFDEF VERSION6}
{$IFNDEF LCL}
SelList : TDesignerSelections;
{$ENDIF}
{$ELSE}
SelList : TDesignerSelectionList;
{$ENDIF}
{$IFDEF VERSION6}
SelList : TDesignerSelections;
{$ELSE}
SelList : TDesignerSelectionList;
{$ENDIF}
{$ELSE}
SelList : TComponentList;
{$ENDIF}
{%H-}i : Integer;
begin
{$IFNDEF LCL}
PopulateItemList;
Bar.ActiveFolder := lbFolders.ItemIndex;
@ -335,8 +556,8 @@ begin
if SelList.Count > 0 then
{$ENDIF}
SelectList(SelList);
{$ENDIF}
end;
{$ENDIF}
{=====}
procedure TfrmNavBarEd.lbItemsMeasureItem(Control: TWinControl;
@ -344,103 +565,141 @@ procedure TfrmNavBarEd.lbItemsMeasureItem(Control: TWinControl;
begin
Unused(Control, Index);
if (Bar.Images <> nil) then
Height := Bar.Images.Height + 4;
Height := Bar.Images.Height + 2 * ITEMS_MARGIN;
end;
{=====}
procedure TfrmNavBarEd.lbItemsDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
btn: TVpNavBtnItem;
lb: TListbox;
ts: TTextStyle;
x, y: Integer;
delta: Integer;
begin
Unused(State);
with TListBox(Control).Canvas do
FillRect(Rect);
if (Bar.Images <> nil)
and (TVpNavBtnItem(lbItems.Items.Objects[Index]).IconIndex > -1)
and (TVpNavBtnItem(lbItems.Items.Objects[Index]).IconIndex <
Bar.Images.Count)
then begin
Bar.Images.Draw(TListBox(Control).Canvas, Rect.Right - Bar.Images.Width,
Rect.Top, TVpNavBtnItem(lbItems.Items.Objects[Index]).IconIndex);
with TListBox(Control).Canvas do
TextOut(Rect.Left + 2, Rect.Top + (Rect.Bottom - Rect.Top) div 3,
TListBox(Control).Items[Index]);
end else
with TListBox(Control).Canvas do
TextOut(Rect.Left + 2, Rect.Top, TListBox(Control).Items[Index]);
end;
{=====}
lb := TListBox(Control);
lb.Canvas.FillRect(Rect);
procedure TfrmNavBarEd.lbImagesDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
Unused(State);
with TListBox(Control).Canvas do
FillRect(Rect);
if (Bar.Images <> nil) then
Bar.Images.Draw(TListBox(Control).Canvas, Rect.Left + 1, Rect.Top + 1,
Index);
if Index = -1 then
exit;
// Draw button image
delta := ITEMS_MARGIN;
btn := TVpNavBtnItem(lbItems.Items.Objects[Index]);
if (Bar.Images <> nil) and (btn <> nil) and
(btn.IconIndex > -1) and (btn.IconIndex < Bar.Images.Count) then
begin
Bar.Images.Draw(
lb.Canvas,
Rect.Right - Bar.Images.Width - delta,
(Rect.Top + Rect.Bottom - Bar.Images.Height) div 2,
btn.IconIndex
);
end;
// Draw text
ts := lb.Canvas.TextStyle;
ts.Alignment := taLeftJustify;
ts.Layout := tlCenter;
ts.EndEllipsis := true;
ts.Singleline := true;
ts.Wordbreak := false;
x := Rect.Left + 2;
y := (Rect.Top + Rect.Bottom - lb.Canvas.TextHeight('Tg')) div 2;
lb.Canvas.TextRect(Rect, x, y, lb.Items[Index]);
end;
{=====}
procedure TfrmNavBarEd.lbItemsClick(Sender: TObject);
{$IFDEF LCL}
var
{$IFDEF VERSION5}
{$IFDEF VERSION6}
{$IFNDEF LCL}
SelList : TDesignerSelections;
{$ENDIF}
{$ELSE}
SelList : TDesignerSelectionList;
{$ENDIF}
{$ELSE}
SelList : TComponentList;
{$ENDIF}
{%H-}i : Integer;
SelList: TPersistentSelectionList;
i: Integer;
btn: TVpNavBtnItem;
begin
{$IFNDEF LCL}
if (lbItems.ItemIndex <> -1) then begin
lbImages.ItemIndex :=
TVpNavBtnItem(lbItems.Items.Objects[lbItems.ItemIndex]).IconIndex;
{$IFDEF VERSION5}
{$IFDEF VERSION6}
SelList := TDesignerSelections.Create;
{$ELSE}
SelList := TDesignerSelectionList.Create;
{$ENDIF}
{$ELSE}
SelList := TComponentList.Create;
{$ENDIF}
for i := 0 to pred(lbItems.Items.Count) do
if lbItems.Selected[i] then begin
{$IFDEF VERSION6}
TProtectedSelList(SelList).Add(TComponent(lbItems.Items.Objects[i]));
{$ELSE}
SelList.Add(TComponent(lbItems.Items.Objects[i]));
{$ENDIF}
if (lbItems.ItemIndex <> -1) and (Bar.ActiveFolder <> 1) then
begin
btn := TVpNavBtnItem(lbItems.Items.Objects[lbItems.ItemIndex]);
FSelImgIndex := btn.IconIndex;
pnlImageView.Invalidate;
SelList := TPersistentSelectionList.Create;
SelList.ForceUpdate := true;
for i:=0 to lbItems.Items.Count-1 do
if lbItems.Selected[i] then
begin
SelList.Add(TPersistent(lbItems.Items.Objects[i]));
Bar.Folders[Bar.ActiveFolder].ItemCollection.DoOnItemSelected(I);
end;
if not Bar.Folders[Bar.ActiveFolder].ItemCollection.ReadOnly
then begin
{$IFDEF VERSION6}
btnItemUp.Enabled := TProtectedSelList(SelList).Count = 1;
{$ELSE}
btnItemUp.Enabled := SelList.Count = 1;
{$ENDIF}
btnItemUp.Enabled := SelList.Count = 1;
btnItemDown.Enabled := btnItemUp.Enabled;
btnItemDelete.Enabled := btnItemUp.Enabled;
end;
{$IFDEF VERSION6}
if TProtectedSelList(SelList).Count > 0 then
{$ELSE}
if SelList.Count > 0 then
{$ENDIF}
SelectList(SelList);
end;
{$ENDIF}
end;
{=====}
{$ELSE}
var
{$IFDEF VERSION5}
{$IFDEF VERSION6}
SelList : TDesignerSelections;
{$ELSE}
SelList : TDesignerSelectionList;
{$ENDIF}
{$ELSE}
SelList : TComponentList;
{$ENDIF}
i : Integer;
begin
if (lbItems.ItemIndex <> -1) then begin
lbImages.ItemIndex :=
TVpNavBtnItem(lbItems.Items.Objects[lbItems.ItemIndex]).IconIndex;
{$IFDEF VERSION5}
{$IFDEF VERSION6}
SelList := TDesignerSelections.Create;
{$ELSE}
SelList := TDesignerSelectionList.Create;
{$ENDIF}
{$ELSE}
SelList := TComponentList.Create;
{$ENDIF}
for i := 0 to pred(lbItems.Items.Count) do
if lbItems.Selected[i] then begin
{$IFDEF VERSION6}
TProtectedSelList(SelList).Add(TComponent(lbItems.Items.Objects[i]));
{$ELSE}
SelList.Add(TComponent(lbItems.Items.Objects[i]));
{$ENDIF}
Bar.Folders[Bar.ActiveFolder].ItemCollection.DoOnItemSelected(I);
end;
if not Bar.Folders[Bar.ActiveFolder].ItemCollection.ReadOnly
then begin
{$IFDEF VERSION6}
btnItemUp.Enabled := TProtectedSelList(SelList).Count = 1;
{$ELSE}
btnItemUp.Enabled := SelList.Count = 1;
{$ENDIF}
btnItemDown.Enabled := btnItemUp.Enabled;
btnItemDelete.Enabled := btnItemUp.Enabled;
end;
{$IFDEF VERSION6}
if TProtectedSelList(SelList).Count > 0 then
SelectList(SelList);
{$ELSE}
if SelList.Count > 0 then
SelectList(SelList);
{$ENDIF}
end;
end;
{$ENDIF}
{=====}
(*
procedure TfrmNavBarEd.lbImagesClick(Sender: TObject);
begin
if (lbImages.ItemIndex <> -1) and (lbItems.ItemIndex <> -1) then begin
@ -450,7 +709,8 @@ begin
if assigned(Designer) then
Designer.Modified;
end;
end;
end; *)
{=====}
procedure TfrmNavBarEd.btnItemUpClick(Sender: TObject);
@ -461,12 +721,14 @@ begin
if (lbItems.ItemIndex > 0) then begin
SaveItemIndex := lbItems.ItemIndex;
Item := TVpNavBtnItem(lbItems.Items.Objects[lbItems.ItemIndex]);
if Item.Index > 0 then
Item.Index := Item.Index - 1;
Item.Index := Item.Index - 1;
if Assigned(Designer) then
if Assigned(Designer) then begin
GlobalDesignHook.SelectOnlyThis(nil);
GlobalDesignHook.SelectOnlyThis(Item);
Designer.Modified;
end;
PopulateItemList;
@ -485,8 +747,11 @@ begin
if Item.Index < Pred(lbItems.Items.Count) then
Item.Index := Item.Index + 1;
if Assigned(Designer) then
if Assigned(Designer) then begin
GlobalDesignHook.SelectOnlyThis(nil);
GlobalDesignHook.SelectOnlyThis(Item);
Designer.Modified;
end;
PopulateItemList;
@ -507,8 +772,11 @@ begin
if Folder.Index > 0 then
Folder.Index := Folder.Index - 1;
if assigned(Designer) then
if Assigned(Designer) then begin
GlobalDesignHook.SelectOnlyThis(nil);
GlobalDesignHook.SelectOnlyThis(folder);
Designer.Modified;
end;
PopulateFolderList;
@ -527,8 +795,11 @@ begin
if Folder.Index < pred(lbFolders.Items.Count) then
Folder.Index := Folder.Index + 1;
if assigned(Designer) then
if Assigned(Designer) then begin
GlobalDesignHook.SelectOnlyThis(nil);
GlobalDesignHook.SelectOnlyThis(folder);
Designer.Modified;
end;
PopulateFolderList;
@ -542,6 +813,7 @@ begin
if (lbItems.ItemIndex <> -1) then begin
TVpNavBtnItem(lbItems.Items.Objects[lbItems.ItemIndex]).Free;
lbItems.ItemIndex := -1;
FSelImgIndex := -1;
PopulateItemList;
if assigned(Designer) then
Designer.Modified;
@ -586,20 +858,98 @@ begin
end;
{=====}
procedure TfrmNavBarEd.pnlImageViewPaint(Sender: TObject);
var
R: TRect;
Rimg: TRect;
i: Integer;
x, y: Integer;
wimg, himg: Integer;
begin
R := Rect(0, 0, sbImages.Width, sbImages.Height);
pnlImageView.Canvas.Brush.Color := clWindow;
pnlImageView.Canvas.FillRect(R);
if (Bar.Images = nil) or (Bar.Images.Count = 0) then
exit;
wimg := Bar.Images.Width;
himg := Bar.Images.Height;
x := 0;
y := R.Top + IMG_MARGIN;
if pnlImageView.Width <= sbImages.Width then // no scrollbar
inc(y, GetScrollbarHeight div 2);
i := 0;
while i < Bar.Images.Count do begin
if i = FSelImgIndex then begin
R := Rect(x, R.Top, x+wimg+2*IMG_MARGIN, R.Bottom);
pnlImageView.Canvas.Brush.Color := clHighlight;
pnlImageView.Canvas.FillRect(R);
end;
Bar.Images.Draw(pnlImageView.Canvas, x + IMG_MARGIN, y, i, true);
inc(i);
inc(x, wimg + 2*IMG_MARGIN);
end;
end;
procedure TfrmNavBarEd.pnlImageViewClick(Sender: TObject);
var
P: TPoint;
btn: TVpNavBtnItem;
res: Integer;
begin
if (Bar.Images = nil) or (Bar.Images.Count = 0) then
exit;
P := pnlImageView.ScreenToClient(Mouse.CursorPos);
FSelImgIndex := P.X div (Bar.Images.Width + 2*IMG_MARGIN);
if FSelImgIndex >= Bar.Images.Count then FSelImgIndex := Bar.Images.Count - 1;
pnlImageView.Invalidate;
if (FSelImgIndex <> -1) and (lbItems.ItemIndex <> -1) then begin
btn := TVpNavBtnItem(lbItems.Items.Objects[lbItems.ItemIndex]);
if btn.IconIndex <> -1 then begin
res := MessageDlg('Do you want to replace the button icon by this one?',
mtConfirmation, [mbYes, mbNo, mbCancel], 0);
if res <> mrYes then
exit;
end;
btn.IconIndex := FSelImgIndex;
lbItems.Invalidate;
if Assigned(Designer) then
Designer.Modified;
end;
end;
procedure TfrmNavBarEd.sbImagesResize(Sender: TObject);
begin
sbImages.HorzScrollbar.Visible := sbImages.ClientWidth < pnlImageView.ClientWidth;
end;
{$IFDEF LCL}
procedure TfrmNavBarEd.Selectlist(SelList: TPersistentSelectionList);
begin
if GlobalDesignHook <> nil then
begin
GlobalDesignHook.SetSelection(SelList);
GlobalDesignHook.LookupRoot := GetLookupRootForComponent(Bar);
end;
SelList.Free;
end;
{$ELSE}
{$IFDEF VERSION5}
{$IFDEF VERSION6}
{$IFNDEF LCL}
procedure TfrmNavBarEd.SelectList(SelList : TDesignerSelections);
{$ENDIF}
{$ELSE}
procedure TfrmNavBarEd.SelectList(SelList : TDesignerSelectionList);
{$ENDIF}
{$IFDEF VERSION6}
procedure TfrmNavBarEd.SelectList(SelList : TDesignerSelections);
{$ELSE}
procedure TfrmNavBarEd.SelectList(SelList : TDesignerSelectionList);
{$ENDIF}
{$ELSE}
procedure TfrmNavBarEd.SelectList(SelList : TComponentList);
{$ENDIF}
begin
{$IFNDEF LCL}
{$IFNDEF Ver80}
{$IFNDEF Ver80}
{$IFDEF VERSION4}
if Designer <> nil then
{$IFDEF VERSION6}
@ -612,9 +962,9 @@ begin
(Designer as TFormDesigner).SetSelections(SelList);
{$ENDIF}
SelList.Free;
{$ELSE}
{$ELSE}
CompLib.SetSelection(Designer, Designer.Form, SelList);
{$ENDIF}
{$ENDIF}
end;
{$ENDIF}
{=====}

View File

@ -36,21 +36,17 @@ unit VpReg;
interface
uses
{$IFDEF LCL}
{$IFDEF LCL}
LCLProc, LCLType, LCLIntf, LazFileUtils,
{$ELSE}
Windows,
{$ENDIF}
{$IFDEF VERSION6}
{$IFNDEF LCL}
DesignIntf, DesignEditors, VCLEditors,
{$ELSE}
PropEdits, LazarusPackageIntf, FieldsEditor, ComponentEditors,
{$ENDIF}
{$ELSE}
Windows,
{$IFDEF VERSION6}
DesignIntf, DesignEditors, VCLEditors,
{$ELSE}
DsgnIntf,
{$ENDIF}
{$ENDIF}
Dialogs, Classes, Controls, TypInfo, Forms, SysUtils,
VpDatePropEdit;
@ -202,9 +198,7 @@ uses
VpContactButtons, { - New contact grid button bar component }
{ Designtime Interfaces (Property and Component Editors) }
VpAbout, { About form for the About property editor }
{$IFDEF DELPHI}
VpNabEd, { component editor for the VpNavBar } // crashes in Lazarus
{$ENDIF}
VpNabEd, { component editor for the VpNavBar }
VpFlxDSEd1; { Field mapper component editor for the FlexDS }
@ -557,9 +551,7 @@ begin
{----------------------------------------------------------------------------}
{ register component editors }
{----------------------------------------------------------------------------}
{$IFDEF DELPHI}
RegisterComponentEditor(TVpNavBar, TVpNavBarEditor);
{$ENDIF}
RegisterComponentEditor(TVpControlLink, TVpPrtFmtPropertyEditor);
RegisterComponentEditor(TVpFlexDataStore, TVpFlexDSEditor);

View File

@ -182,6 +182,9 @@ procedure LoadGlyphFromRCDATA(AGlyph: TBitmap; ABaseResName: String;
procedure LoadImageFromRCDATA(AImage: TImage; ABaseResName: String;
ALowRes, AMedRes, AHighRes: Integer; AdjustSize: Boolean = true);
function GetScrollbarHeight: Integer;
function GetScrollbarWidth: Integer;
procedure Unused(const A1); overload;
procedure Unused(const A1, A2); overload;
procedure Unused(const A1, A2, A3); overload;
@ -1023,6 +1026,17 @@ begin
end;
end;
function GetScrollbarHeight: Integer;
begin
Result := GetSystemMetrics(SM_CYHSCROLL);
end;
function GetScrollbarWidth: Integer;
begin
Result := GetSystemMetrics(SM_CXVSCROLL);
end;
{$PUSH}{$HINTS OFF}
procedure Unused(const A1);
begin

View File

@ -328,7 +328,7 @@ type
property ActiveFolder: Integer read FActiveFolder write SetActiveFolder;
property AllowInplaceEdit: Boolean read FAllowInplaceEdit write FAllowInplaceEdit default false;
property AllowRearrange: Boolean read FAllowRearrange write FAllowRearrange;
property BackgroundColor: TColor read FBackgroundColor write SetBackgroundColor;
property BackgroundColor: TColor read FBackgroundColor write SetBackgroundColor default clWindow;
property BackgroundImage: TBitmap read FBackgroundImage write SetBackgroundImage;
property BackgroundMethod: TVpBackgroundMethod read FBackgroundMethod write SetBackgroundMethod;
property ButtonHeight: Integer read FButtonHeight write SetButtonHeight;
@ -1005,7 +1005,7 @@ begin
FItemFont := TFont.Create;
FItemFont.Name := Font.Name;
FItemFont.OnChange := nabFontChanged;
FItemFont.Color := clWhite;
FItemFont.Color := clWindowText;
FItemSpacing := abs(FItemFont.Height) + 3;
FSelectedItemFont := TFont.Create;
@ -1061,7 +1061,7 @@ begin
ParentColor := False;
FAllowRearrange := True;
FBackgroundColor := clInactiveCaption;
FBackgroundColor := clWindow;
FBackgroundImage := TBitmap.Create;
FBackgroundMethod := bmNormal;
// FBorderStyle := bsSingle;

View File

@ -214,7 +214,7 @@ var
rowStart: Integer;
lLeft, lHeight, lWidth: Integer;
begin
if FBackgroundImage.Empty or (FBackgroundMethod = bmNone) then
if FBackgroundImage.Empty or (FBackgroundMethod = bmNone) or (FNavBar.FolderCount = 0) then
begin
Canvas.Brush.Color := FBackgroundColor;
Canvas.FillRect(R.Left, R.Top, R.Right, R.Bottom);
@ -861,6 +861,7 @@ begin
try
DrawBmp.Width := FClientWidth;
DrawBmp.Height := FClientHeight;
DrawBmp.Transparent := false;
DrawBmp.Canvas.Font := FNavBar.Font;
DrawBmp.Canvas.Pen.Color := FBackgroundColor;
@ -878,6 +879,8 @@ begin
if FNavBar.FolderCount = 0 then begin
nabScrollUpBtn.Visible := False;
nabScrollDownBtn.Visible := False;
FNavBar.Canvas.CopyMode := cmSrcCopy;
FNavBar.Canvas.CopyRect(MyRect, DrawBmp.Canvas, Rect(0, 0, DrawBmp.Width,DrawBmp.Height));
Exit;
end;