tvplanit: Background image in NavBar

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4991 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz 2016-07-17 23:01:16 +00:00
parent c5edf6a2d1
commit 6ccfd77f7c
5 changed files with 266 additions and 41 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -1,22 +1,22 @@
object Form1: TForm1 object Form1: TForm1
Left = 262 Left = 262
Height = 367 Height = 400
Top = 155 Top = 155
Width = 588 Width = 588
Caption = 'Form1' Caption = 'Form1'
ClientHeight = 367 ClientHeight = 400
ClientWidth = 588 ClientWidth = 588
OnCreate = FormCreate OnCreate = FormCreate
LCLVersion = '1.7' LCLVersion = '1.7'
object VpNavBar1: TVpNavBar object VpNavBar1: TVpNavBar
Left = 0 Left = 0
Height = 337 Height = 370
Top = 0 Top = 0
Width = 128 Width = 128
ActiveFolder = 0 ActiveFolder = 0
AllowRearrange = True AllowRearrange = True
BackgroundColor = clInactiveCaption BackgroundColor = clInactiveCaption
BackgroundMethod = bmNormal BackgroundMethod = bmTile
BorderStyle = bsNone BorderStyle = bsNone
ButtonHeight = 20 ButtonHeight = 20
DrawingStyle = dsEtchedButton DrawingStyle = dsEtchedButton
@ -128,7 +128,7 @@ object Form1: TForm1
Align = alLeft Align = alLeft
ParentColor = False ParentColor = False
end end
object RadioGroup1: TRadioGroup object RgDrawingStyle: TRadioGroup
Left = 141 Left = 141
Height = 116 Height = 116
Top = 32 Top = 32
@ -151,7 +151,7 @@ object Form1: TForm1
'dsCoolTab' 'dsCoolTab'
'dsStandardTab' 'dsStandardTab'
) )
OnClick = RadioGroup1Click OnClick = RgDrawingStyleClick
TabOrder = 1 TabOrder = 1
end end
object Label1: TLabel object Label1: TLabel
@ -165,7 +165,7 @@ object Form1: TForm1
object Panel1: TPanel object Panel1: TPanel
Left = 0 Left = 0
Height = 30 Height = 30
Top = 337 Top = 370
Width = 588 Width = 588
Align = alBottom Align = alBottom
ClientHeight = 30 ClientHeight = 30
@ -203,28 +203,28 @@ object Form1: TForm1
end end
end end
object BtnAddFolder: TButton object BtnAddFolder: TButton
Left = 141 Left = 296
Height = 25 Height = 25
Top = 160 Top = 112
Width = 83 Width = 83
Caption = 'Add folder...' Caption = 'Add folder...'
OnClick = BtnAddFolderClick OnClick = BtnAddFolderClick
TabOrder = 3 TabOrder = 3
end end
object BtnAddItem: TButton object BtnAddItem: TButton
Left = 141 Left = 392
Height = 25 Height = 25
Top = 193 Top = 112
Width = 83 Width = 83
Caption = 'Add item...' Caption = 'Add item...'
OnClick = BtnAddItemClick OnClick = BtnAddItemClick
TabOrder = 4 TabOrder = 4
end end
object RadioGroup2: TRadioGroup object RgIconSize: TRadioGroup
Left = 301 Left = 296
Height = 65 Height = 49
Top = 32 Top = 32
Width = 91 Width = 139
AutoFill = True AutoFill = True
Caption = 'Icons' Caption = 'Icons'
ChildSizing.LeftRightSpacing = 6 ChildSizing.LeftRightSpacing = 6
@ -233,22 +233,126 @@ object Form1: TForm1
ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 1 ChildSizing.ControlsPerLine = 2
ClientHeight = 45 ClientHeight = 29
ClientWidth = 87 ClientWidth = 135
Columns = 2
ItemIndex = 0 ItemIndex = 0
Items.Strings = ( Items.Strings = (
'large' 'large'
'small' 'small'
) )
OnClick = RadioGroup2Click OnClick = RgIconSizeClick
TabOrder = 5 TabOrder = 5
end end
object GroupBox1: TGroupBox
Left = 141
Height = 112
Top = 168
Width = 411
Caption = 'Background'
ClientHeight = 92
ClientWidth = 407
TabOrder = 6
object BkColor: TColorBox
Left = 88
Height = 24
Top = 3
Width = 272
Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbCustomColors]
ItemHeight = 16
OnChange = BackgroundColorChange
TabOrder = 0
end
object RbBkColor: TRadioButton
Left = 14
Height = 19
Top = 3
Width = 49
Caption = 'Color'
Checked = True
OnChange = RbBkColorChange
TabOrder = 3
TabStop = True
end
object RbBkImage: TRadioButton
Left = 16
Height = 19
Top = 34
Width = 53
Caption = 'Image'
OnChange = RbBkColorChange
TabOrder = 1
end
object EdBkImage: TFileNameEdit
Left = 88
Height = 23
Top = 33
Width = 299
FileName = 'bkimg.jpg'
Filter = 'BMP files (*.bmp)|*.bmp|PNG files (*.png)|*.png|JPEG files (*.jpg; *.jpeg)|*.jpg;*.jpeg'
FilterIndex = 0
HideDirectories = False
ButtonWidth = 23
NumGlyphs = 1
MaxLength = 0
TabOrder = 2
Text = 'bkimg.jpg'
end
object Panel2: TPanel
Left = 80
Height = 26
Top = 62
Width = 229
BevelOuter = bvNone
ClientHeight = 26
ClientWidth = 229
TabOrder = 4
object RbBkImageNormal: TRadioButton
Left = 8
Height = 19
Top = 4
Width = 58
Caption = 'normal'
OnChange = RbBkColorChange
TabOrder = 1
end
object RbBkImageStretch: TRadioButton
Left = 88
Height = 19
Top = 4
Width = 56
Caption = 'stretch'
OnChange = RbBkColorChange
TabOrder = 0
end
object RbBkImageTile: TRadioButton
Left = 168
Height = 19
Top = 4
Width = 36
Caption = 'tile'
Checked = True
OnChange = RbBkColorChange
TabOrder = 2
TabStop = True
end
end
object BtnLoadBkImage: TButton
Left = 304
Height = 25
Top = 62
Width = 56
Caption = 'Load'
OnClick = BtnLoadBkImageClick
TabOrder = 5
end
end
object Images: TImageList object Images: TImageList
Height = 32 Height = 32
Width = 32 Width = 32
left = 424 left = 488
top = 40 top = 32
Bitmap = { Bitmap = {
4C690A0000002000000020000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF 4C690A0000002000000020000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF

View File

@ -6,7 +6,7 @@ interface
uses uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
StdCtrls, VpNavBar; StdCtrls, ColorBox, EditBtn, VpNavBar;
type type
@ -16,22 +16,35 @@ type
Bevel1: TBevel; Bevel1: TBevel;
BtnAddFolder: TButton; BtnAddFolder: TButton;
BtnAddItem: TButton; BtnAddItem: TButton;
BkColor: TColorBox;
BtnLoadBkImage: TButton;
EdBkImage: TFileNameEdit;
GroupBox1: TGroupBox;
IconsLbl: TLabel; IconsLbl: TLabel;
IconsLink: TLabel; IconsLink: TLabel;
RadioGroup2: TRadioGroup; Panel2: TPanel;
RbBkColor: TRadioButton;
RbBkImage: TRadioButton;
RbBkImageTile: TRadioButton;
RbBkImageStretch: TRadioButton;
RbBkImageNormal: TRadioButton;
RgIconSize: TRadioGroup;
Label1: TLabel; Label1: TLabel;
Images: TImageList; Images: TImageList;
Panel1: TPanel; Panel1: TPanel;
RadioGroup1: TRadioGroup; RgDrawingStyle: TRadioGroup;
VpNavBar1: TVpNavBar; VpNavBar1: TVpNavBar;
procedure BackgroundColorChange(Sender: TObject);
procedure BtnAddFolderClick(Sender: TObject); procedure BtnAddFolderClick(Sender: TObject);
procedure BtnAddItemClick(Sender: TObject); procedure BtnAddItemClick(Sender: TObject);
procedure BtnLoadBkImageClick(Sender: TObject);
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
procedure IconsLinkClick(Sender: TObject); procedure IconsLinkClick(Sender: TObject);
procedure IconsLinkMouseEnter(Sender: TObject); procedure IconsLinkMouseEnter(Sender: TObject);
procedure IconsLinkMouseLeave(Sender: TObject); procedure IconsLinkMouseLeave(Sender: TObject);
procedure RadioGroup1Click(Sender: TObject); procedure RgDrawingStyleClick(Sender: TObject);
procedure RadioGroup2Click(Sender: TObject); procedure RgIconSizeClick(Sender: TObject);
procedure RbBkColorChange(Sender: TObject);
procedure VpNavBar1FolderChanged(Sender: TObject; Index: Integer); procedure VpNavBar1FolderChanged(Sender: TObject; Index: Integer);
procedure VpNavBar1ItemClick(Sender: TObject; Button: TMouseButton; procedure VpNavBar1ItemClick(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; Index: Integer); Shift: TShiftState; Index: Integer);
@ -53,6 +66,11 @@ uses
{ TForm1 } { TForm1 }
procedure TForm1.BackgroundColorChange(Sender: TObject);
begin
VpNavBar1.BackgroundColor := BkColor.Selected;
end;
procedure TForm1.BtnAddFolderClick(Sender: TObject); procedure TForm1.BtnAddFolderClick(Sender: TObject);
var var
s: String; s: String;
@ -81,11 +99,82 @@ begin
end; end;
end; end;
procedure TForm1.BtnLoadBkImageClick(Sender: TObject);
var
ext: String;
bmp: TBitmap;
jpg: TJpegImage;
png: TPortableNetworkGraphic;
begin
if EdBkImage.FileName = '' then
exit;
if not FileExists(EdBkImage.FileName) then
exit;
ext := Lowercase(ExtractFileExt(EdBkImage.FileName));
case ext of
'.bmp':
VpNavBar1.BackgroundImage.LoadFromFile(EdBkImage.FileName);
'.png':
begin
png := TPortableNetworkGraphic.Create;
try
png.LoadFromFile(EdBkImage.FileName);
VpNavBar1.BackgroundImage.Assign(png);
finally
png.Free;
end;
end;
'.jpg', '.jpeg':
begin
jpg := TJpegImage.Create;
try
jpg.LoadFromFile(EdBkImage.FileName);
VpNavBar1.BackgroundImage.Assign(jpg);
finally
jpg.Free;
end;
end;
end;
{
pic := TPicture.Create;
try
pic.LoadFromFile(EdBkImage.FileName);
bmp := TBitmap.Create;
bmp.Assign(pic);
VpNavBar1.BackgroundImage.Assign(bmp);
finally
pic.Free;
end;
}
end;
procedure TForm1.FormCreate(Sender: TObject); procedure TForm1.FormCreate(Sender: TObject);
begin begin
RandSeed := 1; RandSeed := 1;
IconsLink.Left := IconsLbl.Left + IconsLbl.Width; IconsLink.Left := IconsLbl.Left + IconsLbl.Width;
RadioGroup1.ItemIndex := ord(VpNavBar1.DrawingStyle); RgDrawingStyle.ItemIndex := ord(VpNavBar1.DrawingStyle);
BkColor.Selected := VpNavBar1.BackgroundColor;
case VpNavBar1.BackgroundMethod of
bmNone:
RbBkColor.Checked := true;
bmNormal:
begin
RbBkImage.Checked := true;
RbBkImageNormal.Checked := true;
end;
bmStretch:
begin
RbBkImage.Checked := true;
RbBkImageStretch.Checked := true;
end;
bmTile:
begin
RbBkImage.Checked := true;
RbBkImageTile.Checked := true;
end;
end;
BtnLoadBkImageClick(nil);
end; end;
procedure TForm1.IconsLinkClick(Sender: TObject); procedure TForm1.IconsLinkClick(Sender: TObject);
@ -103,27 +192,47 @@ begin
IconsLink.Font.style := IconsLink.Font.Style - [fsUnderline]; IconsLink.Font.style := IconsLink.Font.Style - [fsUnderline];
end; end;
procedure TForm1.RadioGroup1Click(Sender: TObject); procedure TForm1.RgDrawingStyleClick(Sender: TObject);
begin begin
VpNavBar1.DrawingStyle := TVpFolderDrawingStyle(Radiogroup1.ItemIndex); VpNavBar1.DrawingStyle := TVpFolderDrawingStyle(RgDrawingStyle.ItemIndex);
end; end;
procedure TForm1.RadioGroup2Click(Sender: TObject); procedure TForm1.RgIconSizeClick(Sender: TObject);
var var
folder: TVpNavFolder; folder: TVpNavFolder;
begin begin
RgIconSize.OnClick := nil;
folder := VpNavBar1.Folders[VpNavBar1.ActiveFolder]; folder := VpNavBar1.Folders[VpNavBar1.ActiveFolder];
folder.IconSize := TVpIconSize(RadioGroup1.ItemIndex); folder.IconSize := TVpIconSize(RgDrawingStyle.ItemIndex);
RgIconSize.OnClick := @RgIconSizeClick;
end;
procedure TForm1.RbBkColorChange(Sender: TObject);
begin
if RbBkColor.Checked then
VpNavBar1.BackgroundMethod := bmNone
else
if RbBkImage.Checked then begin
if RbBkImageNormal.Checked then
VpNavBar1.BackgroundMethod := bmNormal
else
if RbBkImageStretch.Checked then
VpNavBar1.BackgroundMethod := bmStretch
else
if RbBkImageTile.Checked then
VpNavBar1.BackgroundMethod := bmTile;
end;;
VpNavBar1.Invalidate;
end; end;
procedure TForm1.VpNavBar1FolderChanged(Sender: TObject; Index: Integer); procedure TForm1.VpNavBar1FolderChanged(Sender: TObject; Index: Integer);
var var
folder: TVpNavFolder; folder: TVpNavFolder;
begin begin
RadioGroup2.OnClick := nil; RgIconSize.OnClick := nil;
folder := VpNavBar1.Folders[Index]; folder := VpNavBar1.Folders[Index];
RadioGroup2.ItemIndex := ord(folder.IconSize); RgIconSize.ItemIndex := ord(folder.IconSize);
RadioGroup2.OnClick := @RadioGroup2Click; RgIconSize.OnClick := @RgIconSizeClick;
end; end;
procedure TForm1.VpNavBar1ItemClick(Sender: TObject; Button: TMouseButton; procedure TForm1.VpNavBar1ItemClick(Sender: TObject; Button: TMouseButton;

View File

@ -1106,19 +1106,23 @@ end;
procedure TVpCustomNavBar.ItemChanged(FolderIndex, ItemIndex: Integer); procedure TVpCustomNavBar.ItemChanged(FolderIndex, ItemIndex: Integer);
begin begin
InvalidateItem(FolderIndex, ItemIndex); Invalidate;
// InvalidateItem(FolderIndex, ItemIndex);
(*
if not (csDestroying in ComponentState) then if not (csDestroying in ComponentState) then
RecreateWnd{$IFDEF LCL}(self){$ENDIF}; RecreateWnd{$IFDEF LCL}(self){$ENDIF};
*)
end; end;
{=====} {=====}
procedure TVpCustomNavBar.FolderChanged(FolderIndex: Integer); procedure TVpCustomNavBar.FolderChanged(FolderIndex: Integer);
begin begin
Unused(FolderIndex); Unused(FolderIndex);
Invalidate; Invalidate;
(*
if not (csDestroying in ComponentState) then if not (csDestroying in ComponentState) then
RecreateWnd{$IFDEF LCL}(self){$ENDIF}; RecreateWnd{$IFDEF LCL}(self){$ENDIF};
*)
end; end;
{=====} {=====}

View File

@ -220,7 +220,14 @@ begin
begin begin
case FBackgroundMethod of case FBackgroundMethod of
bmNormal: bmNormal:
Canvas.Draw(R.Left, R.Top, FBackgroundImage); begin
if (FBackgroundImage.Width < WidthOf(R)) or (FBackgroundImage.Height < HeightOf(R))
then begin
Canvas.Brush.Color := FBackgroundColor;
Canvas.FillRect(R.Left, R.Top, R.Right, R.Bottom);
end;
Canvas.Draw(R.Left, R.Top, FBackgroundImage);
end;
bmStretch: bmStretch:
Canvas.StretchDraw(R, FBackgroundImage); Canvas.StretchDraw(R, FBackgroundImage);
bmTile: bmTile:
@ -434,10 +441,12 @@ begin
Canvas.LineTo(R.Right+1, R.Bottom+1); Canvas.LineTo(R.Right+1, R.Bottom+1);
Canvas.LineTo(R.Left-1, R.Bottom+1); Canvas.LineTo(R.Left-1, R.Bottom+1);
Canvas.Brush.Color := FBackgroundColor; Canvas.Brush.Color := FBackgroundColor;
(*
end else begin end else begin
Canvas.Pen.Color := FBackgroundColor; Canvas.Pen.Color := FBackgroundColor;
Canvas.Brush.Color := FBackgroundColor; Canvas.Brush.Color := FBackgroundColor;
Canvas.Rectangle(R.Left - 1, R.Top - 1, R.Right + 1, R.Bottom + 1); Canvas.Rectangle(R.Left - 1, R.Top - 1, R.Right + 1, R.Bottom + 1);
*)
end; end;
end; end;
@ -572,10 +581,9 @@ begin
if Assigned(FImages) then begin if Assigned(FImages) then begin
bmp := TBitmap.Create; bmp := TBitmap.Create;
try try
bmp.Width := FImages.Width; FImages.GetBitmap(AItem.IconIndex, bmp);
bmp.Height := FImages.Height; bmp.Transparent := true;
FImages.Draw(bmp.Canvas, 0, 0, AItem.IconIndex); Canvas.StretchDraw(AItem.IconRect, bmp);
Canvas.BrushCopy(AItem.IconRect, bmp, Rect(0, 0, bmp.Width, bmp.Height), bmp.Canvas.Pixels[0, bmp.Height-1]);
finally finally
bmp.Free; bmp.Free;
end; end;