diff --git a/components/jvcllaz/examples/JvTabBar/JvTabBarDemo.lpi b/components/jvcllaz/examples/JvTabBar/JvTabBarDemo.lpi index 02c6553fa..fdd338083 100644 --- a/components/jvcllaz/examples/JvTabBar/JvTabBarDemo.lpi +++ b/components/jvcllaz/examples/JvTabBar/JvTabBarDemo.lpi @@ -13,7 +13,6 @@ - diff --git a/components/jvcllaz/examples/JvTabBar/main.lfm b/components/jvcllaz/examples/JvTabBar/main.lfm index 59080c9e6..c6c4231cb 100644 --- a/components/jvcllaz/examples/JvTabBar/main.lfm +++ b/components/jvcllaz/examples/JvTabBar/main.lfm @@ -12,7 +12,7 @@ object Form1: TForm1 LCLVersion = '1.9.0.0' object JvTabBar1: TJvTabBar Left = 0 - Top = 40 + Top = 42 Width = 614 Visible = False HotTracking = True @@ -25,7 +25,7 @@ object Form1: TForm1 end object ToolBar: TToolBar Left = 0 - Height = 40 + Height = 42 Top = 0 Width = 614 AutoSize = True @@ -37,17 +37,17 @@ object Form1: TForm1 TabOrder = 1 object TbOpen: TToolButton Left = 1 - Top = 0 + Top = 2 Action = AcFileOpen end object TbQuit: TToolButton Left = 102 - Top = 0 + Top = 2 Action = AcFileQuit end object TbStyle: TToolButton Left = 47 - Top = 0 + Top = 2 Caption = 'Style' DropdownMenu = PopupMenu1 ImageIndex = 3 @@ -56,18 +56,17 @@ object Form1: TForm1 object ToolButton2: TToolButton Left = 97 Height = 40 - Top = 0 + Top = 2 Caption = 'ToolButton2' Style = tbsDivider end end object Memo1: TMemo - Left = 4 - Height = 244 - Top = 67 - Width = 606 + Left = 0 + Height = 250 + Top = 65 + Width = 614 Align = alClient - BorderSpacing.Around = 4 Font.CharSet = ANSI_CHARSET Font.Color = clBlack Font.Height = -11 diff --git a/components/jvcllaz/examples/JvXPCtrls/MainFrm.lfm b/components/jvcllaz/examples/JvXPCtrls/MainFrm.lfm index ee8f41f23..e40f73bae 100644 --- a/components/jvcllaz/examples/JvXPCtrls/MainFrm.lfm +++ b/components/jvcllaz/examples/JvXPCtrls/MainFrm.lfm @@ -2,23 +2,23 @@ object frmMain: TfrmMain Left = 291 Height = 191 Top = 290 - Width = 456 + Width = 486 BorderIcons = [biSystemMenu, biMinimize] BorderStyle = bsSingle Caption = 'frmMain' ClientHeight = 191 - ClientWidth = 456 + ClientWidth = 486 Color = clBtnFace DefaultMonitor = dmDesktop Font.Color = clWindowText OnCreate = FormCreate Position = poDesktopCenter - LCLVersion = '1.7' + LCLVersion = '1.9.0.0' object cntHeader: TJvXPContainer Left = 0 Height = 15 Top = 0 - Width = 456 + Width = 486 Caption = 'cntHeader' OnPaint = cntHeaderPaint Align = alTop @@ -35,22 +35,34 @@ object frmMain: TfrmMain end end object cntNetPanel: TJvXPContainer + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = cntHeader + AnchorSideTop.Side = asrBottom + AnchorSideBottom.Control = chkOfficeStyle + AnchorSideBottom.Side = asrBottom Left = 8 - Height = 161 - Top = 24 - Width = 121 + Height = 162 + Top = 23 + Width = 129 + BorderSpacing.Left = 8 + BorderSpacing.Top = 8 BoundColor = 16251903 BoundLines = [blLeft, blTop, blRight, blBottom] Caption = 'cntNetPanel' Color = 16251903 ParentColor = False + Spacing = 34 OnPaint = cntNetPanelPaint - Anchors = [akTop, akLeft, akBottom] object lbBrowse: TLabel - Left = 8 + AnchorSideLeft.Control = cntNetPanel + AnchorSideTop.Control = cntNetHeader + AnchorSideTop.Side = asrBottom + Left = 9 Height = 15 - Top = 24 + Top = 21 Width = 42 + BorderSpacing.Left = 8 + BorderSpacing.Top = 3 Caption = 'Browse' Font.Color = clWindowText Font.Style = [fsBold] @@ -58,44 +70,71 @@ object frmMain: TfrmMain ParentFont = False end object shpSeperator: TShape - Left = 8 + AnchorSideLeft.Control = cntNetPanel + AnchorSideTop.Control = lbBrowse + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = cntNetPanel + AnchorSideRight.Side = asrBottom + Left = 9 Height = 1 Top = 37 - Width = 108 + Width = 111 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Left = 8 + BorderSpacing.Top = 1 + BorderSpacing.Right = 8 Pen.Color = clSilver end object lbInternalPage: TLabel + AnchorSideLeft.Control = lbConfigure + AnchorSideTop.Control = shpSeperator + AnchorSideTop.Side = asrBottom Cursor = crHandPoint - Left = 24 + Left = 26 Height = 15 - Top = 40 + Top = 42 Width = 69 + BorderSpacing.Top = 4 Caption = 'Internal Page' ParentColor = False end object lbWebEditor: TLabel + AnchorSideLeft.Control = lbConfigure + AnchorSideTop.Control = lbInternalPage + AnchorSideTop.Side = asrBottom Cursor = crHandPoint - Left = 24 + Left = 26 Height = 15 - Top = 56 + Top = 59 Width = 60 + BorderSpacing.Top = 2 Caption = 'Web-Editor' ParentColor = False end object lbConfigure: TLabel + AnchorSideLeft.Control = imgConfigure + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = imgConfigure + AnchorSideTop.Side = asrCenter Cursor = crHandPoint - Left = 24 + Left = 26 Height = 15 - Top = 80 + Top = 85 Width = 62 + BorderSpacing.Left = 4 Caption = 'Configure...' ParentColor = False end object imgConfigure: TImage + AnchorSideLeft.Control = cntNetPanel + AnchorSideTop.Control = lbWebEditor + AnchorSideTop.Side = asrBottom Left = 5 Height = 17 - Top = 79 + Top = 84 Width = 17 + BorderSpacing.Left = 4 + BorderSpacing.Top = 10 Picture.Data = { 07544269746D617036030000424D360300000000000036000000280000001000 0000100000000100180000000000000300000000000000000000000000000000 @@ -129,18 +168,21 @@ object frmMain: TfrmMain end object cntNetHeader: TJvXPContainer Left = 1 - Height = 15 + Height = 17 Top = 1 - Width = 119 + Width = 127 Alignment = taLeftJustify + AutoSize = True + BoundColor = clRed Caption = 'ToDo-List' Color = 14936557 ParentColor = False ShowCaption = True - Spacing = 34 + Spacing = 18 Align = alTop object btnLeft: TJvXPToolButton Left = 0 + Height = 17 Top = 0 ToolType = ttArrowLeft Align = alLeft @@ -148,136 +190,200 @@ object frmMain: TfrmMain StyleManager = styleOffice end object btnRight: TJvXPToolButton - Left = 15 + Left = 112 + Height = 17 Top = 0 ToolType = ttArrowRight - Align = alLeft + Align = alRight ImageIndex = 0 StyleManager = styleOffice end end end object btnOK: TJvXPButton - Left = 296 - Top = 160 + AnchorSideTop.Control = btnCancel + AnchorSideRight.Control = btnCancel + AnchorSideBottom.Control = btnCancel + AnchorSideBottom.Side = asrBottom + Left = 329 + Top = 159 Caption = '&OK' TabOrder = 2 + Anchors = [akTop, akRight, akBottom] + BorderSpacing.Right = 8 Default = True ModalResult = 1 - Anchors = [akTop, akRight] OnClick = btnCloseClick end object btnCancel: TJvXPButton - Left = 376 - Top = 160 + AnchorSideRight.Control = btn4 + AnchorSideRight.Side = asrBottom + AnchorSideBottom.Control = chkOfficeStyle + AnchorSideBottom.Side = asrBottom + Left = 410 + Top = 159 Caption = '&Cancel' TabOrder = 3 + Anchors = [akTop, akRight, akBottom] + BorderSpacing.Right = 8 Cancel = True ModalResult = 2 - Anchors = [akTop, akRight] end object btn1: TJvXPButton - Left = 136 + AnchorSideLeft.Control = cntNetPanel + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = cntNetPanel + Left = 145 Height = 41 - Top = 24 + Top = 23 + Width = 80 Action = acBtn1 TabOrder = 4 + BorderSpacing.Left = 8 end object btn2: TJvXPButton - Left = 216 + AnchorSideLeft.Control = btn1 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = btn1 + Left = 233 Height = 41 - Top = 24 + Top = 23 + Width = 81 Action = acBtn2 TabOrder = 5 + BorderSpacing.Left = 8 Layout = blGlyphRight end object btn4: TJvXPButton - Left = 376 + AnchorSideLeft.Control = btn3 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = btn1 + Left = 410 Height = 41 - Top = 24 + Top = 23 + Width = 81 Action = acBtn4 TabOrder = 6 + BorderSpacing.Left = 8 + BorderSpacing.Right = 8 Layout = blGlyphBottom end object btn3: TJvXPButton - Left = 296 + AnchorSideLeft.Control = btn2 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = btn1 + Left = 322 Height = 41 - Top = 24 + Top = 23 + Width = 80 Action = acBtn3 TabOrder = 7 + BorderSpacing.Left = 8 Layout = blGlyphTop end object chkToogleEnable: TJvXPCheckbox - Left = 136 + AnchorSideLeft.Control = btn1 + AnchorSideTop.Control = btn1 + AnchorSideTop.Side = asrBottom + Left = 145 Height = 17 - Top = 72 - Width = 313 + Top = 80 + Width = 334 Caption = '&Toogle Enable-Mode' TabOrder = 8 Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 16 StyleManager = styleOffice OnClick = chkToogleEnableClick end object chkOfficeStyle: TJvXPCheckbox - Left = 136 + AnchorSideLeft.Control = btn1 + AnchorSideTop.Control = chk2 + AnchorSideTop.Side = asrBottom + Left = 145 Height = 17 - Top = 162 + Top = 163 Width = 121 Caption = 'Office Style' TabOrder = 9 Checked = True State = cbChecked + BorderSpacing.Top = 16 + BorderSpacing.Bottom = 8 StyleManager = styleOffice OnClick = chkOfficeStyleClick end object chk1: TJvXPCheckbox - Left = 136 + AnchorSideLeft.Control = btn1 + AnchorSideTop.Control = chkToogleEnable + AnchorSideTop.Side = asrBottom + Left = 145 Height = 17 - Top = 104 - Width = 121 + Top = 105 + Width = 153 Caption = 'Additional Check1' TabOrder = 10 + BorderSpacing.Top = 8 StyleManager = styleOffice end object chk2: TJvXPCheckbox - Left = 136 + AnchorSideLeft.Control = btn1 + AnchorSideTop.Control = chk1 + AnchorSideTop.Side = asrBottom + Left = 145 Height = 17 - Top = 128 - Width = 121 + Top = 130 + Width = 153 Caption = 'Additional Check2' TabOrder = 11 + BorderSpacing.Top = 8 StyleManager = styleOffice end object dxToolButton1: TJvXPToolButton - Left = 300 - Top = 129 + AnchorSideLeft.Control = btnOK + AnchorSideTop.Control = chk2 + AnchorSideTop.Side = asrCenter + Left = 329 + Top = 131 ImageIndex = 0 StyleManager = styleOffice end object dxToolButton2: TJvXPToolButton - Left = 316 - Top = 129 + AnchorSideLeft.Control = dxToolButton1 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = dxToolButton1 + Left = 344 + Top = 131 ToolType = ttMaximize ImageIndex = 0 StyleManager = styleOffice end object dxToolButton3: TJvXPToolButton - Left = 332 - Top = 129 + AnchorSideLeft.Control = dxToolButton2 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = dxToolButton1 + Left = 359 + Top = 131 ToolType = ttMinimize ImageIndex = 0 StyleManager = styleOffice end object dxToolButton4: TJvXPToolButton - Left = 364 - Top = 129 + AnchorSideLeft.Control = dxToolButton5 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = dxToolButton1 + Left = 389 + Top = 131 ToolType = ttPopup ImageIndex = 0 StyleManager = styleOffice end object dxToolButton5: TJvXPToolButton - Left = 348 - Top = 130 + AnchorSideLeft.Control = dxToolButton3 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = dxToolButton1 + Left = 374 + Top = 131 ToolType = ttRestore ImageIndex = 0 StyleManager = styleOffice diff --git a/components/jvcllaz/examples/JvXPCtrls/SimpleDemo.lpi b/components/jvcllaz/examples/JvXPCtrls/SimpleDemo.lpi index 40e5e2d46..f39b53f0b 100644 --- a/components/jvcllaz/examples/JvXPCtrls/SimpleDemo.lpi +++ b/components/jvcllaz/examples/JvXPCtrls/SimpleDemo.lpi @@ -1,7 +1,7 @@ - + @@ -17,9 +17,10 @@ - - - + + + + diff --git a/components/jvcllaz/run/JvXPCtrls/JvXPButtons.pas b/components/jvcllaz/run/JvXPCtrls/JvXPButtons.pas index f71298985..089fc57d2 100644 --- a/components/jvcllaz/run/JvXPCtrls/JvXPButtons.pas +++ b/components/jvcllaz/run/JvXPCtrls/JvXPButtons.pas @@ -31,7 +31,7 @@ unit JvXPButtons; interface uses - Classes, TypInfo, LCLIntf, LCLType, LCLProc, LMessages, Graphics, + Classes, TypInfo, LCLIntf, LCLType, LCLProc, LMessages, Types, Graphics, Controls, Forms, ActnList, ImgList, Menus, JvXPCore, JvXPCoreUtils; @@ -202,13 +202,13 @@ type procedure SetDropDownMenu(const Value: TPopupMenu); procedure DoImagesChange(Sender: TObject); protected + class function GetControlClassDefaultSize: TSize; override; procedure Notification(AComponent: TComponent; Operation: TOperation); override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer); override; procedure SetToolType(Value: TJvXPToolType); virtual; procedure Paint; override; procedure HookResized; override; - property ToolType: TJvXPToolType read FToolType write SetToolType default ttClose; property DropDownMenu: TPopupMenu read FDropDownMenu write SetDropDownMenu; property Images: TCustomImageList read FImages write SetImages; @@ -286,7 +286,6 @@ type implementation -//{$R ../resource/JvXPCore.res} //=== { TJvXPCustomButtonActionLink } ======================================== @@ -593,13 +592,6 @@ begin } end; -{ -procedure TJvXPCustomButton.HookResized; -begin - UpdateBitmaps; - inherited; -end; - } procedure TJvXPCustomButton.SetBounds(ALeft, ATop, AWidth, AHeight: integer); begin @@ -787,7 +779,8 @@ begin FToolType := ttClose; FChangeLink := TChangeLink.Create; FChangeLink.OnChange := DoImagesChange; - HookResized; + Width := 15; + Height := 15; end; destructor TJvXPCustomToolButton.Destroy; @@ -796,13 +789,24 @@ begin inherited Destroy; end; +class function TJvXPCustomToolButton.GetControlClassDefaultSize: TSize; +begin + Result.CX := 15; + Result.CY := 15; +end; + procedure TJvXPCustomToolButton.HookResized; begin + // Don't change the size here - it will cause an infinite ChangeBoundsLoop + // And: why must the size stay at 15 x 15 pixels? + { + inherited; if ToolType <> ttImage then begin Height := 15; Width := 15; end; + } end; procedure TJvXPCustomToolButton.SetToolType(Value: TJvXPToolType); diff --git a/components/jvcllaz/run/JvXPCtrls/JvXPContainer.pas b/components/jvcllaz/run/JvXPCtrls/JvXPContainer.pas index 6f3e02798..fa062013d 100644 --- a/components/jvcllaz/run/JvXPCtrls/JvXPContainer.pas +++ b/components/jvcllaz/run/JvXPCtrls/JvXPContainer.pas @@ -56,7 +56,7 @@ type FLayout: TTextLayout; FShowBoundLines: Boolean; FShowCaption: Boolean; - FSpacing: Byte; + FSpacing: Integer; FWordWrap: Boolean; FOnEnabledChanged: TNotifyEvent; FOnPaint: TJvXPPaintEvent; @@ -70,15 +70,18 @@ type procedure SetLayout(Value: TTextLayout); procedure SetShowBoundLines(Value: Boolean); procedure SetShowCaption(Value: Boolean); - procedure SetSpacing(Value: Byte); + procedure SetSpacing(Value: Integer); procedure SetWordWrap(Value: Boolean); protected procedure CreateParams(var Params: TCreateParams); override; procedure AdjustClientRect(var Rect: TRect); override; + procedure GetPreferredSize(var PreferredWidth, PreferredHeight: integer; + Raw: boolean = false; WithThemeSpace: boolean = true); override; procedure HookEnabledChanged; override; procedure HookMouseDown; override; procedure HookPosChanged; override; procedure Paint; override; + procedure SetBounds(aLeft, aTop, aWidth, aHeight: integer); override; property Alignment: TAlignment read FAlignment write SetAlignment default taCenter; property BorderWidth: TBorderWidth read FBorderWidth write SetBorderWidth default 0; property BoundColor: TColor read FBoundColor write SetBoundColor default clGray; @@ -94,7 +97,7 @@ type default True; property ShowCaption: Boolean read FShowCaption write SetShowCaption default False; - property Spacing: Byte read FSpacing write SetSpacing default 5; + property Spacing: Integer read FSpacing write SetSpacing default 5; property Width default 185; property WordWrap: Boolean read FWordWrap write SetWordWrap default False; property OnEnabledChanged: TNotifyEvent read FOnEnabledChanged write FOnEnabledChanged; @@ -190,8 +193,9 @@ constructor TJvXPCustomContainer.Create(AOwner: TComponent); begin inherited Create(AOwner); ControlStyle := ControlStyle + [csAcceptsControls]; - Height := 41; - Width := 185; + SetInitialBounds(0, 0, 41, 185); +// Height := 41; +// Width := 185; FAlignment := taCenter; FBoundColor := clGray; FBoundLines := []; @@ -222,6 +226,18 @@ begin end; +procedure TJvXPCustomContainer.GetPreferredSize( + var PreferredWidth, PreferredHeight: integer; + Raw: boolean = false; WithThemeSpace: boolean = true); +begin + inherited; + if FShowCaption and (Caption <> '') and HandleAllocated then begin + Canvas.Font.Assign(Font); + PreferredHeight := Canvas.TextHeight('Tg') + 2; + end; +end; + + procedure TJvXPCustomContainer.HookEnabledChanged; var I: Integer; @@ -268,6 +284,16 @@ begin end; end; +procedure TJvXPCustomContainer.SetBorderWidth(Value: TBorderWidth); +begin + if Value <> FBorderWidth then + begin + FBorderWidth := Value; + Realign; + InternalRedraw; + end; +end; + procedure TJvXPCustomContainer.SetBoundColor(Value: TColor); begin if Value <> FBoundColor then @@ -287,14 +313,13 @@ begin end; end; -procedure TJvXPCustomContainer.SetBorderWidth(Value: TBorderWidth); +procedure TJvXPCustomContainer.SetBounds(aLeft, aTop, aWidth, aHeight: integer); begin - if Value <> FBorderWidth then - begin - FBorderWidth := Value; - Realign; - InternalRedraw; - end; + if (ALeft = Left) and (ATop = Top) and (AWidth = Width) and (AHeight = Height) then + exit; + if AutoSize and WordWrap then + InvalidatePreferredSize; + inherited; end; procedure TJvXPCustomContainer.SetEnabledMode(Value: TJvXPEnabledMode); @@ -353,7 +378,7 @@ begin end; end; -procedure TJvXPCustomContainer.SetSpacing(Value: Byte); +procedure TJvXPCustomContainer.SetSpacing(Value: Integer); begin if Value <> FSpacing then begin @@ -390,6 +415,7 @@ var begin with AParent, Canvas do begin + Canvas.Font.Assign(AFont); DrawStyle := Alignments[AAlignment]; if (DrawStyle <> DT_LEFT) and (ARect.Right - ARect.Left < TextWidth(ACaption)) then DrawStyle := DT_LEFT; @@ -437,7 +463,6 @@ begin end; if FShowCaption then begin - Font.Assign(Self.Font); InflateRect(Rect, -FSpacing, -1); if csDesigning in ComponentState then begin diff --git a/components/jvcllaz/run/JvXPCtrls/JvXPCoreUtils.pas b/components/jvcllaz/run/JvXPCtrls/JvXPCoreUtils.pas index 9d7bdeccf..a9df7ae92 100644 --- a/components/jvcllaz/run/JvXPCtrls/JvXPCoreUtils.pas +++ b/components/jvcllaz/run/JvXPCtrls/JvXPCoreUtils.pas @@ -395,10 +395,15 @@ begin Rect := Bounds(0, 0, ABitmap.Width, ABitmap.Height); ColorMap := TBitmap.Create; try + // Just the create the handle + ColorMap.Canvas.Brush.Color := clWhite; + ColorMap.Canvas.FillRect(0, 0, 1, 1); + // Assign the source bitmap ColorMap.Assign(ABitmap); ABitmap.FreeImage; with ColorMap.Canvas do begin + // Replace color clBlack by AColor Brush.Color := AColor; BrushCopy(Rect, ABitmap, Rect, clBlack); end;