1
0
mirror of synced 2024-11-23 10:33:51 +00:00

Added: X2MenuBar component + musikCube painter

This commit is contained in:
Mark van Renswoude 2006-03-24 05:56:59 +00:00
parent 72f9725251
commit 430d01900e
13 changed files with 2544 additions and 1 deletions

View File

0
Lib/D7/placeholder.txt Normal file
View File

View File

@ -21,7 +21,8 @@ uses
procedure Register; procedure Register;
begin begin
RegisterComponents('X²Software', [TX2GraphicContainer, TX2GraphicList]); RegisterComponents('X2Software', [TX2GraphicContainer, TX2GraphicList]);
RegisterPropertyEditor(TypeInfo(TX2GraphicCollection), TX2GraphicContainer, 'Graphics', TX2GraphicsProperty); RegisterPropertyEditor(TypeInfo(TX2GraphicCollection), TX2GraphicContainer, 'Graphics', TX2GraphicsProperty);
RegisterComponentEditor(TX2GraphicContainer, TX2GraphicContainerEditor); RegisterComponentEditor(TX2GraphicContainer, TX2GraphicContainerEditor);
RegisterComponentEditor(TX2GraphicList, TX2GraphicListEditor); RegisterComponentEditor(TX2GraphicList, TX2GraphicListEditor);

29
Packages/X2CLMBReg.pas Normal file
View File

@ -0,0 +1,29 @@
{
:: Registers the MenuBar components
::
:: Last changed: $Date$
:: Revision: $Rev$
:: Author: $Author$
}
unit X2CLMBReg;
interface
procedure Register;
implementation
uses
Classes,
DesignIntf,
X2CLMenuBar,
X2CLmusikCubePainter;
{.$R ..\Resources\MenuBar.dcr}
procedure Register;
begin
RegisterComponents('X2Software', [TX2MenuBar,
TX2MenuBarmusikCubePainter]);
end;
end.

1306
Source/X2CLMenuBar.pas Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,627 @@
{
:: Implements a musikCube-style painter for the X2MenuBar.
::
:: Last changed: $Date$
:: Revision: $Rev$
:: Author: $Author$
}
unit X2CLmusikCubePainter;
interface
uses
Classes,
Graphics,
ImgList,
Windows,
X2CLMenuBar;
type
// #ToDo1 (MvR) 19-3-2006: IsStored implementations
// #ToDo1 (MvR) 19-3-2006: cache positions
TX2MenuBarmCColor = class(TPersistent)
private
FBorderAlpha: Byte;
FBorderColor: TColor;
FFillAlpha: Byte;
FFillColor: TColor;
FOnChange: TNotifyEvent;
procedure SetBorderAlpha(const Value: Byte);
procedure SetBorderColor(const Value: TColor);
procedure SetFillAlpha(const Value: Byte);
procedure SetFillColor(const Value: TColor);
protected
procedure DoChange();
function MixColors(ABackColor, AForeColor: TColor; AAlpha: Byte): TColor;
property OnChange: TNotifyEvent read FOnChange write FOnChange;
public
constructor Create();
function MixBorder(AColor: TColor): TColor;
function MixFill(AColor: TColor): TColor;
published
property BorderColor: TColor read FBorderColor write SetBorderColor;
property BorderAlpha: Byte read FBorderAlpha write SetBorderAlpha;
property FillColor: TColor read FFillColor write SetFillColor;
property FillAlpha: Byte read FFillAlpha write SetFillAlpha;
end;
TX2MenuBarmCColors = class(TPersistent)
private
FHot: TX2MenuBarmCColor;
FNormal: TX2MenuBarmCColor;
FSelected: TX2MenuBarmCColor;
FOnChange: TNotifyEvent;
procedure SetHot(const Value: TX2MenuBarmCColor);
procedure SetNormal(const Value: TX2MenuBarmCColor);
procedure SetSelected(const Value: TX2MenuBarmCColor);
protected
procedure DoChange();
procedure ColorChange(Sender: TObject);
property OnChange: TNotifyEvent read FOnChange write FOnChange;
public
constructor Create();
destructor Destroy(); override;
published
property Hot: TX2MenuBarmCColor read FHot write SetHot;
property Normal: TX2MenuBarmCColor read FNormal write SetNormal;
property Selected: TX2MenuBarmCColor read FSelected write SetSelected;
end;
// #ToDo1 (MvR) 19-3-2006: Custom base class
TX2MenuBarmusikCubePainter = class(TX2MenuBarPainter)
private
FColor: TColor;
FGroupColors: TX2MenuBarmCColors;
FGroupHeight: Integer;
FIndicatorColors: TX2MenuBarmCColors;
FItemColors: TX2MenuBarmCColors;
FItemHeight: Integer;
procedure SetColor(const Value: TColor);
procedure SetGroupColors(const Value: TX2MenuBarmCColors);
procedure SetGroupHeight(const Value: Integer);
procedure SetIndicatorColors(const Value: TX2MenuBarmCColors);
procedure SetItemColors(const Value: TX2MenuBarmCColors);
procedure SetItemHeight(const Value: Integer);
protected
procedure ColorChange(Sender: TObject);
function GetColor(AColors: TX2MenuBarmCColors; AState: TX2MenuBarDrawStates): TX2MenuBarmCColor;
procedure DrawBlended(ACanvas: TCanvas; AImageList: TCustomImageList; AX, AY, AImageIndex: Integer; AAlpha: Byte);
function GetGroupHeaderHeight(AGroup: TX2MenuBarGroup): Integer; override;
function GetGroupHeight(AGroup: TX2MenuBarGroup): Integer; override;
function GetItemHeight(AItem: TX2MenuBarItem): Integer; override;
procedure DrawBackground(ACanvas: TCanvas; const ABounds: TRect); override;
procedure DrawGroupHeader(ACanvas: TCanvas; AGroup: TX2MenuBarGroup; const ABounds: TRect; AState: TX2MenuBarDrawStates); override;
procedure DrawItem(ACanvas: TCanvas; AItem: TX2MenuBarItem; const ABounds: TRect; AState: TX2MenuBarDrawStates); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy(); override;
procedure ResetColors();
published
property AnimationStyle;
property AnimationTime;
property Color: TColor read FColor write SetColor stored False;
property GroupColors: TX2MenuBarmCColors read FGroupColors write SetGroupColors stored False;
property GroupHeight: Integer read FGroupHeight write SetGroupHeight stored False;
property IndicatorColors: TX2MenuBarmCColors read FIndicatorColors write SetIndicatorColors stored False;
property ItemColors: TX2MenuBarmCColors read FItemColors write SetItemColors stored False;
property ItemHeight: Integer read FItemHeight write SetItemHeight stored False;
end;
implementation
uses
SysUtils;
type
PRGBArray = ^TRGBArray;
TRGBArray = array[Word] of TRGBTriple;
{ TX2MenuBarmusikCubePainter }
constructor TX2MenuBarmusikCubePainter.Create(AOwner: TComponent);
begin
inherited;
FColor := clBtnFace;
FGroupColors := TX2MenuBarmCColors.Create();
FGroupHeight := 22;
FIndicatorColors := TX2MenuBarmCColors.Create();
FItemColors := TX2MenuBarmCColors.Create();
FItemHeight := 22;
FGroupColors.OnChange := ColorChange;
FIndicatorColors.OnChange := ColorChange;
FItemColors.OnChange := ColorChange;
ResetColors();
end;
destructor TX2MenuBarmusikCubePainter.Destroy();
begin
FreeAndNil(FItemColors);
FreeAndNil(FIndicatorColors);
FreeAndNil(FGroupColors);
inherited;
end;
procedure TX2MenuBarmusikCubePainter.ResetColors();
begin
{ Group buttons }
with GroupColors.Hot do
begin
BorderColor := clBtnShadow;
FillAlpha := 128;
FillColor := clBtnShadow;
end;
with GroupColors.Normal do
begin
BorderAlpha := 64;
BorderColor := clBtnShadow;
FillAlpha := 64;
FillColor := clBtnShadow;
end;
with GroupColors.Selected do
begin
BorderColor := clBtnShadow;
FillColor := clBtnHighlight;
end;
{ Indicator }
with IndicatorColors.Selected do
begin
BorderAlpha := 252;
BorderColor := clHighlight;
FillAlpha := 252;
FillColor := clHighlight;
end;
{ Item buttons }
with ItemColors.Hot do
begin
BorderColor := clBtnShadow;
FillAlpha := 114;
FillColor := clBtnHighlight;
end;
with ItemColors.Normal do
begin
BorderAlpha := 50;
BorderColor := clBtnHighlight;
FillAlpha := 50;
FillColor := clBtnHighlight;
end;
with ItemColors.Selected do
begin
BorderColor := clBtnShadow;
FillColor := clBtnHighlight;
end;
end;
function TX2MenuBarmusikCubePainter.GetColor(AColors: TX2MenuBarmCColors;
AState: TX2MenuBarDrawStates): TX2MenuBarmCColor;
begin
if mdsSelected in AState then
Result := AColors.Selected
else if mdsHot in AState then
Result := AColors.Hot
else
Result := AColors.Normal;
end;
procedure TX2MenuBarmusikCubePainter.DrawBlended(ACanvas: TCanvas;
AImageList: TCustomImageList;
AX, AY, AImageIndex: Integer;
AAlpha: Byte);
var
backBuffer: Graphics.TBitmap;
iconBuffer: Graphics.TBitmap;
sourceRect: TRect;
destRect: TRect;
sourceRow: PRGBArray;
destRow: PRGBArray;
xPos: Integer;
yPos: Integer;
backAlpha: Integer;
iconAlpha: Integer;
begin
backBuffer := Graphics.TBitmap.Create();
try
backBuffer.PixelFormat := pf24bit;
backBuffer.Width := AImageList.Width;
backBuffer.Height := AImageList.Height;
destRect := Rect(0, 0, backBuffer.Width, backBuffer.Height);
sourceRect := destRect;
OffsetRect(sourceRect, AX, AY);
backBuffer.Canvas.CopyRect(destRect, ACanvas, sourceRect);
iconBuffer := Graphics.TBitmap.Create();
try
iconBuffer.Assign(backBuffer);
AImageList.Draw(iconBuffer.Canvas, 0, 0, AImageIndex);
backAlpha := AAlpha;
iconAlpha := 256 - AAlpha;
for yPos := 0 to Pred(iconBuffer.Height) do
begin
sourceRow := iconBuffer.ScanLine[yPos];
destRow := backBuffer.ScanLine[yPos];
for xPos := 0 to Pred(iconBuffer.Width) do
with destRow^[xPos] do
begin
rgbtRed := ((rgbtRed * backAlpha) +
(sourceRow^[xPos].rgbtRed * iconAlpha)) shr 8;
rgbtGreen := ((rgbtGreen * backAlpha) +
(sourceRow^[xPos].rgbtGreen * iconAlpha)) shr 8;
rgbtBlue := ((rgbtBlue * backAlpha) +
(sourceRow^[xPos].rgbtBlue * iconAlpha)) shr 8;
end;
end;
finally
FreeAndNil(iconBuffer);
end;
ACanvas.Draw(AX, AY, backBuffer);
finally
FreeAndNil(backBuffer);
end;
end;
function TX2MenuBarmusikCubePainter.GetGroupHeaderHeight(AGroup: TX2MenuBarGroup): Integer;
begin
Result := FGroupHeight;
end;
function TX2MenuBarmusikCubePainter.GetGroupHeight(AGroup: TX2MenuBarGroup): Integer;
begin
Result := (AGroup.Items.Count * FGroupHeight);
end;
function TX2MenuBarmusikCubePainter.GetItemHeight(AItem: TX2MenuBarItem): Integer;
begin
Result := FItemHeight;
end;
procedure TX2MenuBarmusikCubePainter.DrawBackground(ACanvas: TCanvas;
const ABounds: TRect);
begin
with ACanvas do
begin
Brush.Color := FColor;
FillRect(ABounds);
end;
end;
procedure TX2MenuBarmusikCubePainter.DrawGroupHeader(ACanvas: TCanvas;
AGroup: TX2MenuBarGroup;
const ABounds: TRect;
AState: TX2MenuBarDrawStates);
var
groupColor: TX2MenuBarmCColor;
textBounds: TRect;
begin
with ACanvas do
begin
groupColor := GetColor(GroupColors, AState);
Brush.Color := groupColor.MixFill(Color);
Brush.Style := bsSolid;
Pen.Color := groupColor.MixBorder(Color);
Pen.Style := psSolid;
Rectangle(ABounds);
textBounds := ABounds;
Inc(textBounds.Left, 12); // #ToDo3 (MvR) 19-3-2006: GroupIndent property?
ACanvas.Font.Style := [fsBold];
DrawText(ACanvas, AGroup.Caption, textBounds);
end;
end;
procedure TX2MenuBarmusikCubePainter.DrawItem(ACanvas: TCanvas;
AItem: TX2MenuBarItem;
const ABounds: TRect;
AState: TX2MenuBarDrawStates);
var
itemColor: TX2MenuBarmCColor;
itemBounds: TRect;
indicatorBounds: TRect;
indicatorColor: TX2MenuBarmCColor;
textBounds: TRect;
imageList: TCustomImageList;
imgY: Integer;
begin
with ACanvas do
begin
itemColor := GetColor(ItemColors, AState);
indicatorColor := GetColor(IndicatorColors, AState);
itemBounds := ABounds;
indicatorBounds := itemBounds;
indicatorBounds.Right := indicatorBounds.Left + 6;
Brush.Color := indicatorColor.MixFill(Color);
Brush.Style := bsSolid;
Pen.Color := indicatorColor.MixBorder(Color);
Pen.Style := psSolid;
Rectangle(itemBounds);
itemBounds.Left := indicatorBounds.Right;
Brush.Color := itemColor.MixFill(Color);
Brush.Style := bsSolid;
Pen.Color := itemColor.MixBorder(Color);
Pen.Style := psSolid;
Rectangle(itemBounds);
textBounds := itemBounds;
Inc(textBounds.Left, 4);
imageList := MenuBar.ImageList;
if Assigned(imageList) then
begin
if AItem.ImageIndex > -1 then
begin
imgY := textBounds.Top + ((textBounds.Bottom - textBounds.Top -
imageList.Height) div 2);
if (mdsHot in AState) or (mdsSelected in AState) then
imageList.Draw(ACanvas, textBounds.Left, imgY, AItem.ImageIndex)
else
DrawBlended(ACanvas, imageList, textBounds.Left, imgY,
AItem.ImageIndex, 128);
end;
Inc(textBounds.Left, imageList.Width + 4);
end;
if mdsSelected in AState then
ACanvas.Font.Style := [fsBold]
else
ACanvas.Font.Style := [];
DrawText(ACanvas, AItem.Caption, textBounds);
end;
end;
procedure TX2MenuBarmusikCubePainter.ColorChange(Sender: TObject);
begin
NotifyObservers();
end;
procedure TX2MenuBarmusikCubePainter.SetIndicatorColors(const Value: TX2MenuBarmCColors);
begin
if Value <> FIndicatorColors then
begin
FIndicatorColors.Assign(Value);
NotifyObservers();
end;
end;
procedure TX2MenuBarmusikCubePainter.SetItemColors(const Value: TX2MenuBarmCColors);
begin
if Value <> FItemColors then
begin
FItemColors.Assign(Value);
NotifyObservers();
end;
end;
procedure TX2MenuBarmusikCubePainter.SetItemHeight(const Value: Integer);
begin
if Value <> FItemHeight then
begin
FItemHeight := Value;
NotifyObservers();
end;
end;
procedure TX2MenuBarmusikCubePainter.SetColor(const Value: TColor);
begin
if Value <> FColor then
begin
FColor := Value;
NotifyObservers();
end;
end;
procedure TX2MenuBarmusikCubePainter.SetGroupColors(const Value: TX2MenuBarmCColors);
begin
if Value <> FGroupColors then
begin
FGroupColors.Assign(Value);
NotifyObservers();
end;
end;
procedure TX2MenuBarmusikCubePainter.SetGroupHeight(const Value: Integer);
begin
if Value <> FGroupHeight then
begin
FGroupHeight := Value;
NotifyObservers();
end;
end;
{ TX2MenuBarmCColor }
constructor TX2MenuBarmCColor.Create();
begin
inherited;
FBorderAlpha := 255;
FBorderColor := clNone;
FFillAlpha := 255;
FFillColor := clNone;
end;
procedure TX2MenuBarmCColor.DoChange();
begin
if Assigned(FOnChange) then
FOnChange(Self);
end;
function TX2MenuBarmCColor.MixColors(ABackColor, AForeColor: TColor;
AAlpha: Byte): TColor;
var
cBack: Cardinal;
cFore: Cardinal;
bBack: Byte;
begin
{ Source: X2UtGraphics.BlendColors }
cBack := ColorToRGB(ABackColor);
cFore := ColorToRGB(AForeColor);
bBack := 255 - AAlpha;
Result := RGB(((GetRValue(cBack) * bBack) +
(GetRValue(cFore) * AAlpha)) shr 8,
((GetGValue(cBack) * bBack) +
(GetGValue(cFore) * AAlpha)) shr 8,
((GetBValue(cBack) * bBack) +
(GetBValue(cFore) * AAlpha)) shr 8);
end;
function TX2MenuBarmCColor.MixBorder(AColor: TColor): TColor;
begin
if BorderColor = clNone then
Result := AColor
else
Result := MixColors(AColor, BorderColor, BorderAlpha);
end;
function TX2MenuBarmCColor.MixFill(AColor: TColor): TColor;
begin
if FillColor = clNone then
Result := AColor
else
Result := MixColors(AColor, FillColor, FillAlpha);
end;
procedure TX2MenuBarmCColor.SetBorderAlpha(const Value: Byte);
begin
if Value <> FBorderAlpha then
begin
FBorderAlpha := Value;
DoChange();
end;
end;
procedure TX2MenuBarmCColor.SetBorderColor(const Value: TColor);
begin
if Value <> FBorderColor then
begin
FBorderColor := Value;
DoChange();
end;
end;
procedure TX2MenuBarmCColor.SetFillAlpha(const Value: Byte);
begin
if Value <> FFillAlpha then
begin
FFillAlpha := Value;
DoChange();
end;
end;
procedure TX2MenuBarmCColor.SetFillColor(const Value: TColor);
begin
if Value <> FFillColor then
begin
FFillColor := Value;
DoChange();
end;
end;
{ TX2MenuBarmCColors }
constructor TX2MenuBarmCColors.Create();
begin
inherited;
FHot := TX2MenuBarmCColor.Create();
FNormal := TX2MenuBarmCColor.Create();
FSelected := TX2MenuBarmCColor.Create();
FHot.OnChange := ColorChange;
FNormal.OnChange := ColorChange;
FSelected.OnChange := ColorChange;
end;
destructor TX2MenuBarmCColors.Destroy();
begin
FreeAndNil(FSelected);
FreeAndNil(FNormal);
FreeAndNil(FHot);
inherited;
end;
procedure TX2MenuBarmCColors.DoChange();
begin
if Assigned(FOnChange) then
FOnChange(Self);
end;
procedure TX2MenuBarmCColors.ColorChange(Sender: TObject);
begin
DoChange();
end;
procedure TX2MenuBarmCColors.SetHot(const Value: TX2MenuBarmCColor);
begin
if FHot <> Value then
begin
FHot.Assign(Value);
DoChange();
end;
end;
procedure TX2MenuBarmCColors.SetNormal(const Value: TX2MenuBarmCColor);
begin
if FNormal <> Value then
begin
FNormal.Assign(Value);
DoChange();
end;
end;
procedure TX2MenuBarmCColors.SetSelected(const Value: TX2MenuBarmCColor);
begin
if FNormal <> Value then
begin
FSelected.Assign(Value);
DoChange();
end;
end;
end.

278
Test/MenuBar/MainForm.dfm Normal file
View File

@ -0,0 +1,278 @@
object frmMain: TfrmMain
Left = 300
Top = 219
Caption = 'X2MenuBar Test'
ClientHeight = 360
ClientWidth = 550
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
Position = poScreenCenter
PixelsPerInch = 96
TextHeight = 13
object bvlMenu: TBevel
Left = 137
Top = 0
Width = 8
Height = 360
Align = alLeft
Shape = bsLeftLine
ExplicitLeft = 141
end
object lblAnimationTime: TLabel
Left = 364
Top = 32
Width = 98
Height = 13
Caption = 'Animation time (ms):'
end
object mbTest: TX2MenuBar
Left = 0
Top = 0
Width = 137
Height = 360
Align = alLeft
Groups = <
item
Caption = 'Share'
Expanded = True
Items = <
item
Caption = 'File'
ImageIndex = 0
end
item
Caption = 'Folder'
ImageIndex = 1
end
item
Caption = 'Photo'
ImageIndex = 2
end
item
Caption = 'Video'
ImageIndex = 3
end>
end
item
Caption = 'Group'
Expanded = False
Items = <
item
Caption = 'Menu Item'
ImageIndex = -1
end
item
Caption = 'Menu Item'
ImageIndex = -1
end
item
Caption = 'Menu Item'
ImageIndex = -1
end>
end
item
Caption = 'Group without items'
Expanded = False
Items = <>
end>
ImageList = glMenu
Painter = mbPainter
end
object seAnimationTime: TJvSpinEdit
Left = 364
Top = 48
Width = 81
Height = 21
CheckMinValue = True
ButtonKind = bkStandard
Value = 250.000000000000000000
TabOrder = 1
OnChange = seAnimationTimeChange
end
object Panel1: TPanel
Left = 220
Top = 80
Width = 133
Height = 153
BevelOuter = bvNone
TabOrder = 2
object rbmusikCube: TRadioButton
Left = 0
Top = 0
Width = 113
Height = 17
Caption = 'musikCube style'
Checked = True
TabOrder = 0
TabStop = True
end
object rbUnameIT: TRadioButton
Left = 0
Top = 20
Width = 113
Height = 17
Caption = 'Uname-IT style'
Enabled = False
TabOrder = 1
end
end
object Panel2: TPanel
Left = 364
Top = 80
Width = 129
Height = 153
BevelOuter = bvNone
TabOrder = 3
object rbSliding: TRadioButton
Left = 0
Top = 20
Width = 113
Height = 17
Caption = 'Sliding animation'
Checked = True
TabOrder = 0
TabStop = True
OnClick = AnimationClick
end
object rbNoAnimation: TRadioButton
Left = 0
Top = 0
Width = 113
Height = 17
Caption = 'No animation'
TabOrder = 1
OnClick = AnimationClick
end
object rbFade: TRadioButton
Left = 0
Top = 40
Width = 113
Height = 17
Caption = 'Fading animation'
Enabled = False
TabOrder = 2
end
end
object gcMenu: TX2GraphicContainer
Graphics = <
item
Name = 'ShareFile'
Picture.Data = {
0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001000
00001008060000001FF3FF61000001844944415478DAA5D2CD4B02411400F0B7
DB2DA27FAB4EE22102A1A0C0FCA0837A4989683734C7A072A12C45502902FB00
E95487FEA20E1D24337777E635B33BBB389B5E6A60F6ED1EDE6FDE9BB71AFC73
69C14BADF98A223A8EEB7DDB41B4FD38B11D1112D661A23F1728A657E69E5428
F761796911869F5F0A32174044102551E6BF17C90364B76270F7F4A6202140AE
5FB09459554E1589942B8CF9C0F4E280A600A6F58C462E3613A01C70F9B61DCA
4F1F83D51CA0656EEB2A501FA0918FAB2D88646FA3D74A108D6A0F2E2A496D26
20127D80972E93998208A00B97951D1530CE076816E2E052FFF238E125B228C4
1F06E941230AEC9F3CE2F1DE1A7CBB2CAC00652B4CB6C2E49D1C912E07522A50
22F7484AEB30B2250018224C2607509974A0719C5681BC798B75630386131AA9
80274B2C68A5C22BB8AA46809C71C347B3091F631ACC414564152E8FD55A079A
24A302A9621B5BB524BC8F9CA951AA80F72FF07D76DA8516C9AAC0EE411B755D
0790339045841719DC8BA86241D37F4FE1AFEB07F8392D2050E7313500000000
49454E44AE426082}
end
item
Name = 'ShareFolder'
Picture.Data = {
0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001000
00001008060000001FF3FF610000025B4944415478DAAD936D48535118C7FF77
775BEAD8ACA123CB2834EC9B2DB2B0328CCC284B461192146A48040505D36A05
154826A64D53A490303F6510C528421B6B2CC4C0E5170317ABA859099ACEBBF7
B6BBFBD2F172433F680875E0CF797BFE3FCE79CE7928FC63A3961B38D201BB3F
82524100E6140AA0A7D28ADA65039C2D88159DF3A7AA52F5D2FCF90D0AA60650
4B02BCBDD8C504512288284CB23088EA0C63F18569FACFFE92007727BCB47E4B
9E5A9385F4753B9091530EB5D6009AD690DD28519C2813B66B5A1CB9B908C075
0762B139042EEE412CF01D51BF0789F04F4064C1712C36EEAE275119787A350B
C79A64C0609B2209958E5E633C4FF9DE36A0B07610D1D97EA8523448D56AB122
2D8D642E8EC98FA3D0E79442AD31E289250F15CD32C0D942058ACE0EA7ABD236
C1D19C8E7D973F93D521804B4A4649624292CFF3151B0AEAF1F8E26654B6CA00
C76DA53BFF68DFB6CCDC9DB037ADC5FE2BA3C4F41AE009804BCC03F8047E787D
C8DE5E8547751538619501F62674AF5A5F525350D9AD1A68CCC5018B8BE4AA5F
324060E57EEE041CC4A40026A6C3CBAE07A8BA2B03061A5141F1F4BDBD752FF4
AF5ACB70E8928D24FC1931B20B00736312ACA010F42760EB79839ACE05AF3070
2BC5A6CBDA6A9AF10DA1DCFC1008F649999704228508669605331E86776C06D3
939189EA0E6453F31F0367D49AD55DF1F0246D32B713402F3125C04C45C8BD43
98188F89D15032405E72F8781B0E2E5A0BCEAE7C8E99784F97551FC627B70BDF
BEFCE2E3117E4AE031625809CB9EEBF8F0D7627A77BFE0D4D8D88855A9440022
1C27DB71FABF55E352ED373075032024CD24170000000049454E44AE426082}
end
item
Name = 'ShareWebcam'
Picture.Data = {
0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001000
00001008060000001FF3FF61000002C14944415478DABD935D48935118C7FF9B
DB9CD38913155CB586D008C30F9A95A8217927A14157DE441FE88521A4828108
0A8992621745A80C477AB3A048D44A08A18589BA959AE0D4A09CBAE936F7E55E
759B7BDFB91EDF20E82E283A70381CCE797EFFE739E7FF08F09743F04F00D5D5
BA94C4C4E47A954AA171BB0F6452292B92CB25C24824088E63A32C1BE658F630
B2BFBF175E5B5B5B0F0643AF8DC6E79F7F011A1B87DE3435555C0D8582181F37
637BFB3BEAEA6ED28918BBBB3EC4C589F8AB1C071C1C846136CFC52626DE0D8D
8E0EDEE6011D1D2F772A2B0BD2392E0A936915878711C46231088502582C6FB1
B4B44CC0079899998048C48132A1A8D42D9DAEEB240F686919F017179F4D6118
8ED4BD9048E22016FF9C16CB14525353A056E7C26AB5109C4166A692A0566F6F
EFC3341ED0DDFDC25759A9552C2CAC8061F6715C7B2C968868D405AD36076EB7
874A0990BA020A453A8145181B1BF1F7F575A7F280F6F621574D4D4586DDEE81
D7CBC066B3D2EA446E6E16BABA9E906A0C39392AE4E79F874A758E32946078F8
95BBBFBF278307B4B50D6CD6D65E3FB5B9E982CFC7606BCB4EEA3EACAE2E2110
5042A3C9C6E4A40EA5A525042A444282140683C1A6D33D56F180E6E6A75F1B1A
6E683636B649790F3B3B0E04832EACAF7F83D13887B4B44CC8E52C0A0B8B9097
7701F1F1F1D0EBF52B7A7D6F360FA8AFEFFAD4DA7AB7C06ADD86C7B34BC10C1C
0E3BA4D2E35F311F7B014AE50994945C21F544242727D1BB3D9A32189E5DE601
55558D239D9DF7AE310C4BEA7EAA5100A7D3857098A1E010EDC5C8CA3A43CA32
BACD61717131363030747F76F6430F0F282FBF73A9ACACE47D51915666B3B9C8
386421B11432593C418294CD163DAC2DE2743AE697972DC66834326A327D34FD
D60BE5E5B72EAAD5A7079392E41AB2AE9BCC6275B91CCB3E5FE08B40C0CE1F1D
F917A6A767427FD24C429A47FFAD1B7F00ED1B51200D4AE2740000000049454E
44AE426082}
end
item
Name = 'ShareWebcamVideo'
Picture.Data = {
0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001000
00001008060000001FF3FF61000002EA4944415478DAA5935D48935118C7FFF3
DDAB6BCEF9FDED44DC4CA15E8761412A1296A121285ED595DD7521298C125341
E9622B584CE6BCF122454891AE9424432B3FC8A4FC203F32D1E9FCAA95D36DCD
B5BDAF7BB78E2B040BA2E8DC9CAFE7FC9EE7FCCFF90BF09F4DF0EB82CFE713E8
F5FA149AA6198FC7C3884422262C2C8C118BC5A91CC7EDBBDDAE75ABD5BAC4B2
9C4EA5524D1E03747777574B2492A688888830D2432A952238580C9AA6C82E8F
830316DBDB7632077A7B7B5FD7D737E41C017A7A7A8A939393FB188611DA6C36
2426268265DDB05A2D9899716373D30BA39187CD7608FA86ADCD06D7E0D0A0D8
0F50ABD585342D7CEA703828A55289E8E818242424203C5C82AE2E0789909183
FB70BB59389D2E02F66274F4BA6361615CEA075455DD1C11894EE43FEC7C8C2B
C59791794A8EA2A26212ECC4F47436380EE430878D8D31D8ED6FC93A199BDEAC
4FCD0CA4F801776A6B9D731F56C553CB1C3EED72A82C4FC2A5C2622814C99898
9061656519F3F3F7B1B7B785A8A818040444212DEDCCAC56AB52FA013535B7ED
E65D56FA688405EF0DC5D59CAF60329290937B0E7373720C0CA840511C76763E
FB01F1F1371014343B6B3034FE005456560E9D4C935FACD6AF03541CCAB35791
9A1082D34C3A9697F33035A5267A444128CC464848162C163BD1A97FB2B5557D
F667053525F0F17D2C1527E81B36212B6E1D79F917E0724988FAB9100804F078
78A2C5A1802EA2831B1919CFFB753A6DC9D133D6D5D5DD22719AF434B9D0E9E2
488981E4B942313C1C47EECCC3EBF591B9070E871B4AA58FC09E7536371B2A8E
7DA4F6F6F677A5A5A59966B39964B1C164B2A0A34388C04090CC3C2223BD2828
A0C978D16B327D2CD56A1F3C3906D0E974E3656565E7799EF7976DB57E415BDB
26C46211C94A932A8CBEA5A5B5171415D8A8D1685EFDE605F2A1AE51146590C9
64110A8582F8C2EBBFF7E2E27B9FD1B8F6322040D8A4D1DC1BFBA39988418288
894A481515B1B1B185168BE51531D8DD969696D1BF72E3BFB6EF2C065120000A
A5C30000000049454E44AE426082}
end>
Left = 180
Top = 8
end
object glMenu: TX2GraphicList
Container = gcMenu
Left = 208
Top = 8
end
object mbPainter: TX2MenuBarmusikCubePainter
Left = 152
Top = 8
end
end

52
Test/MenuBar/MainForm.pas Normal file
View File

@ -0,0 +1,52 @@
unit MainForm;
interface
uses
Classes,
Controls,
Forms,
ImgList,
PNGImage,
X2CLGraphicList,
X2CLMenuBar,
X2CLmusikCubePainter, StdCtrls, ExtCtrls, Mask, JvExMask, JvSpin;
type
TfrmMain = class(TForm)
mbTest: TX2MenuBar;
mbPainter: TX2MenuBarmusikCubePainter;
gcMenu: TX2GraphicContainer;
glMenu: TX2GraphicList;
bvlMenu: TBevel;
rbmusikCube: TRadioButton;
rbSliding: TRadioButton;
lblAnimationTime: TLabel;
seAnimationTime: TJvSpinEdit;
Panel1: TPanel;
Panel2: TPanel;
rbNoAnimation: TRadioButton;
rbFade: TRadioButton;
rbUnameIT: TRadioButton;
procedure AnimationClick(Sender: TObject);
procedure seAnimationTimeChange(Sender: TObject);
end;
implementation
{$R *.dfm}
procedure TfrmMain.AnimationClick(Sender: TObject);
begin
if rbSliding.Checked then
mbPainter.AnimationStyle := asSlide
else
mbPainter.AnimationStyle := asNone;
end;
procedure TfrmMain.seAnimationTimeChange(Sender: TObject);
begin
mbPainter.AnimationTime := seAnimationTime.AsInteger;
end;
end.

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<BorlandProject>
<PersonalityInfo>
<Option>
<Option Name="Personality">Default.Personality</Option>
<Option Name="ProjectType"></Option>
<Option Name="Version">1.0</Option>
<Option Name="GUID">{899F97C0-66A5-4324-BD71-C5E037D59CA1}</Option>
</Option>
</PersonalityInfo>
<Default.Personality> <Projects>
<Projects Name="MenuBarTest.exe">MenuBarTest.bdsproj</Projects>
<Projects Name="X2CLMB.bpl">..\..\Packages\D2006\X2CLMB.bdsproj</Projects>
<Projects Name="X2CLMBD.bpl">..\..\Packages\D2006\X2CLMBD.bdsproj</Projects>
<Projects Name="ColorBlender.exe">..\..\..\..\Archive\Tests\2006\ColorBlender\ColorBlender.bdsproj</Projects>
<Projects Name="Targets">MenuBarTest.exe X2CLMB.bpl X2CLMBD.bpl ColorBlender.exe</Projects>
</Projects>
<Dependencies/>
</Default.Personality>
</BorlandProject>

View File

@ -0,0 +1,172 @@
<?xml version="1.0" encoding="utf-8"?>
<BorlandProject>
<PersonalityInfo>
<Option>
<Option Name="Personality">Delphi.Personality</Option>
<Option Name="ProjectType"></Option>
<Option Name="Version">1.0</Option>
<Option Name="GUID">{57D3D6EE-4412-43CE-90E0-02395E34B5E4}</Option>
</Option>
</PersonalityInfo>
<Delphi.Personality>
<Source>
<Source Name="MainSource">MenuBarTest.dpr</Source>
</Source>
<FileVersion>
<FileVersion Name="Version">7.0</FileVersion>
</FileVersion>
<Compiler>
<Compiler Name="A">8</Compiler>
<Compiler Name="B">0</Compiler>
<Compiler Name="C">1</Compiler>
<Compiler Name="D">1</Compiler>
<Compiler Name="E">0</Compiler>
<Compiler Name="F">0</Compiler>
<Compiler Name="G">1</Compiler>
<Compiler Name="H">1</Compiler>
<Compiler Name="I">1</Compiler>
<Compiler Name="J">0</Compiler>
<Compiler Name="K">0</Compiler>
<Compiler Name="L">1</Compiler>
<Compiler Name="M">0</Compiler>
<Compiler Name="N">1</Compiler>
<Compiler Name="O">1</Compiler>
<Compiler Name="P">1</Compiler>
<Compiler Name="Q">0</Compiler>
<Compiler Name="R">0</Compiler>
<Compiler Name="S">0</Compiler>
<Compiler Name="T">0</Compiler>
<Compiler Name="U">0</Compiler>
<Compiler Name="V">1</Compiler>
<Compiler Name="W">0</Compiler>
<Compiler Name="X">1</Compiler>
<Compiler Name="Y">1</Compiler>
<Compiler Name="Z">1</Compiler>
<Compiler Name="ShowHints">True</Compiler>
<Compiler Name="ShowWarnings">True</Compiler>
<Compiler Name="UnitAliases">WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;</Compiler>
<Compiler Name="NamespacePrefix"></Compiler>
<Compiler Name="GenerateDocumentation">False</Compiler>
<Compiler Name="DefaultNamespace"></Compiler>
<Compiler Name="SymbolDeprecated">True</Compiler>
<Compiler Name="SymbolLibrary">True</Compiler>
<Compiler Name="SymbolPlatform">True</Compiler>
<Compiler Name="SymbolExperimental">True</Compiler>
<Compiler Name="UnitLibrary">True</Compiler>
<Compiler Name="UnitPlatform">True</Compiler>
<Compiler Name="UnitDeprecated">True</Compiler>
<Compiler Name="UnitExperimental">True</Compiler>
<Compiler Name="HResultCompat">True</Compiler>
<Compiler Name="HidingMember">True</Compiler>
<Compiler Name="HiddenVirtual">True</Compiler>
<Compiler Name="Garbage">True</Compiler>
<Compiler Name="BoundsError">True</Compiler>
<Compiler Name="ZeroNilCompat">True</Compiler>
<Compiler Name="StringConstTruncated">True</Compiler>
<Compiler Name="ForLoopVarVarPar">True</Compiler>
<Compiler Name="TypedConstVarPar">True</Compiler>
<Compiler Name="AsgToTypedConst">True</Compiler>
<Compiler Name="CaseLabelRange">True</Compiler>
<Compiler Name="ForVariable">True</Compiler>
<Compiler Name="ConstructingAbstract">True</Compiler>
<Compiler Name="ComparisonFalse">True</Compiler>
<Compiler Name="ComparisonTrue">True</Compiler>
<Compiler Name="ComparingSignedUnsigned">True</Compiler>
<Compiler Name="CombiningSignedUnsigned">True</Compiler>
<Compiler Name="UnsupportedConstruct">True</Compiler>
<Compiler Name="FileOpen">True</Compiler>
<Compiler Name="FileOpenUnitSrc">True</Compiler>
<Compiler Name="BadGlobalSymbol">True</Compiler>
<Compiler Name="DuplicateConstructorDestructor">True</Compiler>
<Compiler Name="InvalidDirective">True</Compiler>
<Compiler Name="PackageNoLink">True</Compiler>
<Compiler Name="PackageThreadVar">True</Compiler>
<Compiler Name="ImplicitImport">True</Compiler>
<Compiler Name="HPPEMITIgnored">True</Compiler>
<Compiler Name="NoRetVal">True</Compiler>
<Compiler Name="UseBeforeDef">True</Compiler>
<Compiler Name="ForLoopVarUndef">True</Compiler>
<Compiler Name="UnitNameMismatch">True</Compiler>
<Compiler Name="NoCFGFileFound">True</Compiler>
<Compiler Name="ImplicitVariants">True</Compiler>
<Compiler Name="UnicodeToLocale">True</Compiler>
<Compiler Name="LocaleToUnicode">True</Compiler>
<Compiler Name="ImagebaseMultiple">True</Compiler>
<Compiler Name="SuspiciousTypecast">True</Compiler>
<Compiler Name="PrivatePropAccessor">True</Compiler>
<Compiler Name="UnsafeType">False</Compiler>
<Compiler Name="UnsafeCode">False</Compiler>
<Compiler Name="UnsafeCast">False</Compiler>
<Compiler Name="OptionTruncated">True</Compiler>
<Compiler Name="WideCharReduced">True</Compiler>
<Compiler Name="DuplicatesIgnored">True</Compiler>
<Compiler Name="UnitInitSeq">True</Compiler>
<Compiler Name="LocalPInvoke">True</Compiler>
<Compiler Name="MessageDirective">True</Compiler>
<Compiler Name="CodePage"></Compiler>
</Compiler>
<Linker>
<Linker Name="MapFile">0</Linker>
<Linker Name="OutputObjs">0</Linker>
<Linker Name="GenerateHpps">False</Linker>
<Linker Name="ConsoleApp">1</Linker>
<Linker Name="DebugInfo">False</Linker>
<Linker Name="RemoteSymbols">False</Linker>
<Linker Name="GenerateDRC">False</Linker>
<Linker Name="MinStackSize">16384</Linker>
<Linker Name="MaxStackSize">1048576</Linker>
<Linker Name="ImageBase">4194304</Linker>
<Linker Name="ExeDescription"></Linker>
</Linker>
<Directories>
<Directories Name="OutputDir"></Directories>
<Directories Name="UnitOutputDir"></Directories>
<Directories Name="PackageDLLOutputDir"></Directories>
<Directories Name="PackageDCPOutputDir"></Directories>
<Directories Name="SearchPath">..\..\Source</Directories>
<Directories Name="Packages"></Directories>
<Directories Name="Conditionals"></Directories>
<Directories Name="DebugSourceDirs"></Directories>
<Directories Name="UsePackages">False</Directories>
</Directories>
<Parameters>
<Parameters Name="RunParams"></Parameters>
<Parameters Name="HostApplication"></Parameters>
<Parameters Name="Launcher"></Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="DebugCWD"></Parameters>
<Parameters Name="Debug Symbols Search Path"></Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1043</VersionInfo>
<VersionInfo Name="CodePage">1252</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"></VersionInfoKeys>
<VersionInfoKeys Name="FileDescription"></VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"></VersionInfoKeys>
<VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys>
<VersionInfoKeys Name="ProductName"></VersionInfoKeys>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"></VersionInfoKeys>
</VersionInfoKeys>
</Delphi.Personality>
<StarTeamAssociation></StarTeamAssociation>
<StarTeamNonRelativeFiles></StarTeamNonRelativeFiles>
</BorlandProject>

View File

@ -0,0 +1,42 @@
-$A8
-$B-
-$C+
-$D+
-$E-
-$F-
-$G+
-$H+
-$I+
-$J-
-$K-
-$L+
-$M-
-$N+
-$O+
-$P+
-$Q-
-$R-
-$S-
-$T-
-$U-
-$V+
-$W-
-$X+
-$YD
-$Z1
-cg
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+
-W+
-M
-$M16384,1048576
-K$00400000
-LE"C:\Documents and Settings\PsychoMark\My Documents\Borland Studio Projects\Bpl"
-LN"C:\Documents and Settings\PsychoMark\My Documents\Borland Studio Projects\Bpl"
-U"..\..\Source"
-O"..\..\Source"
-I"..\..\Source"
-R"..\..\Source"
-w-UNSAFE_TYPE
-w-UNSAFE_CODE
-w-UNSAFE_CAST

View File

@ -0,0 +1,16 @@
program MenuBarTest;
uses
Forms,
MainForm in 'MainForm.pas' {frmMain};
{$R *.res}
var
frmMain: TfrmMain;
begin
Application.Initialize;
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
end.

Binary file not shown.