diff --git a/components/jvcllaz/examples/JvFullColorCircleDialog/JvFullColorCircleDialogMainForm.lfm b/components/jvcllaz/examples/JvFullColorCircleDialog/JvFullColorCircleDialogMainForm.lfm
new file mode 100644
index 000000000..5a623ae71
--- /dev/null
+++ b/components/jvcllaz/examples/JvFullColorCircleDialog/JvFullColorCircleDialogMainForm.lfm
@@ -0,0 +1,72 @@
+object JvFullColorCircleDlgMainFrm: TJvFullColorCircleDlgMainFrm
+ Left = 498
+ Height = 394
+ Top = 236
+ Width = 343
+ BorderStyle = bsDialog
+ Caption = 'JvFullColorCircleDlgMainFrm'
+ ClientHeight = 394
+ ClientWidth = 343
+ Color = clBtnFace
+ Font.Color = clWindowText
+ KeyPreview = True
+ OnCreate = FormCreate
+ Position = poScreenCenter
+ LCLVersion = '2.1.0.0'
+ object Bevel: TBevel
+ Left = 16
+ Height = 108
+ Top = 48
+ Width = 108
+ Style = bsRaised
+ end
+ object Image: TImage
+ Left = 20
+ Height = 100
+ Top = 52
+ Width = 100
+ Center = True
+ end
+ object LabelImage: TLabel
+ Left = 24
+ Height = 15
+ Top = 16
+ Width = 39
+ Caption = 'Image :'
+ Layout = tlCenter
+ ParentColor = False
+ end
+ object Memo: TMemo
+ Left = 8
+ Height = 65
+ Top = 160
+ Width = 129
+ Alignment = taCenter
+ BorderStyle = bsNone
+ Lines.Strings = (
+ 'Original image'
+ )
+ OnKeyDown = MemoKeyDown
+ OnKeyPress = MemoKeyPress
+ ParentColor = True
+ TabOrder = 0
+ end
+ object ComboBoxFileName: TComboBox
+ Left = 72
+ Height = 23
+ Top = 16
+ Width = 257
+ DropDownCount = 24
+ ItemHeight = 15
+ OnClick = ComboBoxFileNameSelect
+ OnSelect = ComboBoxFileNameSelect
+ Style = csDropDownList
+ TabOrder = 1
+ end
+ object JvFullColorCircleDialog: TJvFullColorCircleDialog
+ HelpContext = 0
+ OnApply = JvFullColorCircleDialogApply
+ left = 184
+ top = 80
+ end
+end
diff --git a/components/jvcllaz/examples/JvFullColorCircleDialog/JvFullColorCircleDialogMainForm.pas b/components/jvcllaz/examples/JvFullColorCircleDialog/JvFullColorCircleDialogMainForm.pas
new file mode 100644
index 000000000..e9f331e88
--- /dev/null
+++ b/components/jvcllaz/examples/JvFullColorCircleDialog/JvFullColorCircleDialogMainForm.pas
@@ -0,0 +1,382 @@
+{******************************************************************
+
+ JEDI-VCL Demo
+
+ Copyright (C) 2004 Project JEDI
+
+ Original author: Florent Ouchet [ouchet dott florent att laposte dott net]
+
+ Contributor(s):
+
+ You may retrieve the latest version of this file at the JEDI-JVCL
+ home page, located at http://jvcl.delphi-jedi.org
+
+ The contents of this file are used with permission, subject to
+ the Mozilla Public License Version 1.1 (the "License"); you may
+ not use this file except in compliance with the License. You may
+ obtain a copy of the License at
+ http://www.mozilla.org/MPL/MPL-1_1Final.html
+
+ Software distributed under the License is distributed on an
+ "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ implied. See the License for the specific language governing
+ rights and limitations under the License.
+
+******************************************************************}
+
+unit JvFullColorCircleDialogMainForm;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, ExtCtrls, StdCtrls, JvFullColorSpaces, JvFullColorCircleForm,
+ JvFullColorDialogs, JvFullColorRotate;
+
+type
+
+ { TJvFullColorCircleDlgMainFrm }
+
+ TJvFullColorCircleDlgMainFrm = class(TForm)
+ Image: TImage;
+ Bevel: TBevel;
+ Memo: TMemo;
+ LabelImage: TLabel;
+ ComboBoxFileName: TComboBox;
+ JvFullColorCircleDialog: TJvFullColorCircleDialog;
+ procedure FormCreate(Sender: TObject);
+ procedure MemoKeyDown(Sender: TObject; var Key: Word;
+ Shift: TShiftState);
+ procedure MemoKeyPress(Sender: TObject; var Key: Char);
+ procedure ComboBoxFileNameSelect(Sender: TObject);
+ procedure JvFullColorCircleDialogApply(Sender: TObject);
+ public
+ Images: array [0..6] of TImage;
+ Memos: array [0..6] of TMemo;
+ procedure CustomizeDblClick(Sender: TObject);
+ procedure RotateCustomValues;
+ procedure FormatMemo(AMemo: TMemo; const Delta: TJvColorDelta);
+ end;
+
+var
+ JvFullColorCircleDlgMainFrm: TJvFullColorCircleDlgMainFrm;
+
+implementation
+
+{$R *.lfm}
+
+uses Contnrs;
+
+resourcestring
+ RsCustomize = 'Dbl-click to customize';
+
+var
+ ImgDir: String = '';
+
+type
+ TJvColorDeltaList = class (TObjectList)
+ private
+ function GetItems(Index: Integer): TJvColorDelta;
+ procedure SetItems(Index: Integer; const Value: TJvColorDelta);
+ public
+ property Items[Index: Integer]: TJvColorDelta read GetItems write SetItems; default;
+ end;
+
+var
+ ColorDeltas: TJvColorDeltaList;
+
+procedure TJvFullColorCircleDlgMainFrm.FormCreate(Sender: TObject);
+var
+ X, Y: Integer;
+ PitchX, PitchY: Integer;
+ LImage: TImage;
+ LMemo: TMemo;
+ LBevel: TBevel;
+ Index: Integer;
+ LSearchRec: TSearchRec;
+begin
+ ImgDir := IncludeTrailingPathDelimiter(GetCurrentDir) + '..\..\design\JvCtrls\images\';
+ if FindFirst(ImgDir + '*.png', faAnyFile, LSearchRec) = 0 then
+ repeat
+ ComboBoxFileName.Items.Add(LSearchRec.Name);
+ until FindNext(LSearchRec) <> 0;
+ FindClose(LSearchRec);
+
+ PitchX := Memo.Width + 32;
+ PitchY := Memo.Top + Memo.Height - Image.Top + 31;
+ Index := 0;
+ Image.Picture.Bitmap := TBitmap.Create;
+ for X := 0 to 3 do
+ for Y := 0 to 1 do
+ if (X <> 0) or (Y <> 0) then
+ begin
+ LBevel := TBevel.Create(Self);
+ LBevel.Parent := Self;
+ LBevel.Style := bsRaised;
+ LBevel.SetBounds(Bevel.Left+X*PitchX, Bevel.Top+Y*PitchY, Bevel.Width, Bevel.Height);
+ LImage := TImage.Create(Self);
+ LImage.Parent := Self;
+ LImage.Stretch := False;
+ LImage.Center := true;
+ LImage.Picture.Bitmap := TBitmap.Create;
+ LImage.SetBounds(Image.Left+X*PitchX, Image.Top+Y*PitchY, Image.Width, Image.Height);
+ LMemo := TMemo.Create(Self);
+ LMemo.Parent := Self;
+ LMemo.BorderStyle := bsNone;
+ LMemo.ParentColor := True;
+ LMemo.OnKeyDown := @MemoKeyDown;
+ LMemo.OnKeyPress := @MemoKeyPress;
+ LMemo.SetBounds(Memo.Left+X*PitchX, Memo.Top+Y*PitchY, Memo.Width, Memo.Height);
+ LMemo.Alignment := taCenter;
+ if (X = 3) and (Y = 1) then
+ begin
+ LImage.OnDblClick := @CustomizeDblClick;
+ LMemo.OnDblClick := @CustomizeDblClick;
+ ClientWidth := LMemo.Left+LMemo.Width-1+Memo.Left;
+ ClientHeight := LMemo.Top+LMemo.Height-1+Image.Top;
+ end;
+ Memos[Index] := LMemo;
+ Images[Index] := LImage;
+ Inc(Index);
+ end;
+ ComboBoxFileName.ItemIndex := 0;
+ ComboBoxFileNameSelect(ComboBoxFileName);
+end;
+
+procedure TJvFullColorCircleDlgMainFrm.CustomizeDblClick(Sender: TObject);
+begin
+ if JvFullColorCircleDialog.Execute then
+ RotateCustomValues;
+end;
+
+procedure TJvFullColorCircleDlgMainFrm.MemoKeyDown(Sender: TObject; var Key: Word;
+ Shift: TShiftState);
+begin
+ Key := 0; // discard any key but Enabled=False affects the text rendering
+end;
+
+procedure TJvFullColorCircleDlgMainFrm.MemoKeyPress(Sender: TObject; var Key: Char);
+begin
+ Key := #0; // discard any key but Enabled=False affects the text rendering
+end;
+
+procedure TJvFullColorCircleDlgMainFrm.ComboBoxFileNameSelect(Sender: TObject);
+var
+ Index: Integer;
+ fn: String;
+begin
+ if ComboboxFileName.ItemIndex = -1 then
+ exit;
+
+ if Image.Picture.Bitmap <> nil then begin
+ fn := ImgDir + ComboboxFileName.Items[ComboboxFileName.ItemIndex];
+ if FileExists(fn) then
+ Image.Picture.LoadFromFile(fn)
+ else
+ MessageDlg(Format('File "%s" not found.', [fn]), mtError, [mbOK], 0);
+ end;
+
+ // Image.Picture.Bitmap := TBitmap.Create;
+// Image.Picture.Bitmap.LoadFromFile(ComboBoxFileName.Items[ComboBoxFileName.ItemIndex]);
+ with Memos[6].Lines do
+ begin
+ Clear;
+ Add(RsCustomize);
+ end;
+ Images[6].Picture.Bitmap.FreeImage;
+ for Index := Low(Images) to High(Images)-1 do
+ begin
+ Images[Index].Picture.Bitmap.FreeImage;
+ RotateBitmap(Image.Picture.Bitmap,Images[Index].Picture.Bitmap,ColorDeltas[Index]);
+ FormatMemo(Memos[Index],ColorDeltas[Index]);
+ end;
+ RotateCustomValues;
+end;
+
+procedure TJvFullColorCircleDlgMainFrm.RotateCustomValues;
+begin
+ RotateBitmap(Image.Picture.Bitmap,Images[6].Picture.Bitmap,JvFullColorCircleDialog.Delta);
+ FormatMemo(Memos[6],JvFullColorCircleDialog.Delta);
+end;
+
+procedure TJvFullColorCircleDlgMainFrm.FormatMemo(AMemo: TMemo; const Delta: TJvColorDelta);
+var
+ Index: TJvAxisIndex;
+begin
+ AMemo.Lines.Clear;
+ with ColorSpaceManager, ColorSpace[Delta.ColorID], AMemo.Lines do
+ begin
+ Add(Format('%s (%s)',[Name, ShortName]));
+ for Index := Low(TJvAxisIndex) to High(TJvAxisIndex) do
+ Add(Format('%s : %d, %d, %d',[AxisName[Index],Delta.AxisRed[Index].Value,
+ Delta.AxisGreen[Index].Value,Delta.AxisBlue[Index].Value]));
+ if AMemo = Memos[6] then
+ Add(RsCustomize);
+ end;
+end;
+
+{ TJvColorDeltaList }
+
+function TJvColorDeltaList.GetItems(Index: Integer): TJvColorDelta;
+begin
+ Result := TJvColorDelta(TObjectList(Self).Items[Index]);
+end;
+
+procedure TJvColorDeltaList.SetItems(Index: Integer;
+ const Value: TJvColorDelta);
+begin
+ TObjectList(Self).Items[Index] := Value;
+end;
+
+procedure FillColorDeltas;
+var
+ Delta : TJvColorDelta;
+begin
+ Delta := TJvColorDelta.Create;
+ Delta.ColorID := csRGB;
+ Delta.AxisRed[axIndex0].Value := 100;
+ Delta.AxisRed[axIndex0].SaturationMethod := smRange;
+ Delta.AxisRed[axIndex1].Value := 0;
+ Delta.AxisRed[axIndex1].SaturationMethod := smRange;
+ Delta.AxisRed[axIndex2].Value := 0;
+ Delta.AxisRed[axIndex2].SaturationMethod := smRange;
+ Delta.AxisGreen[axIndex0].Value := 0;
+ Delta.AxisGreen[axIndex0].SaturationMethod := smRange;
+ Delta.AxisGreen[axIndex1].Value := 0;
+ Delta.AxisGreen[axIndex1].SaturationMethod := smRange;
+ Delta.AxisGreen[axIndex2].Value := 0;
+ Delta.AxisGreen[axIndex2].SaturationMethod := smRange;
+ Delta.AxisBlue[axIndex0].Value := 0;
+ Delta.AxisBlue[axIndex0].SaturationMethod := smRange;
+ Delta.AxisBlue[axIndex1].Value := 0;
+ Delta.AxisBlue[axIndex1].SaturationMethod := smRange;
+ Delta.AxisBlue[axIndex2].Value := 50;
+ Delta.AxisBlue[axIndex2].SaturationMethod := smRange;
+ ColorDeltas.Add(Delta);
+
+ Delta := TJvColorDelta.Create;
+ Delta.ColorID := csHLS;
+ Delta.AxisRed[axIndex0].Value := 0;
+ Delta.AxisRed[axIndex0].SaturationMethod := smRange;
+ Delta.AxisRed[axIndex1].Value := 0;
+ Delta.AxisRed[axIndex1].SaturationMethod := smRange;
+ Delta.AxisRed[axIndex2].Value := 0;
+ Delta.AxisRed[axIndex2].SaturationMethod := smRange;
+ Delta.AxisGreen[axIndex0].Value := 40;
+ Delta.AxisGreen[axIndex0].SaturationMethod := smRange;
+ Delta.AxisGreen[axIndex1].Value := 0;
+ Delta.AxisGreen[axIndex1].SaturationMethod := smRange;
+ Delta.AxisGreen[axIndex2].Value := 0;
+ Delta.AxisGreen[axIndex2].SaturationMethod := smRange;
+ Delta.AxisBlue[axIndex0].Value := 0;
+ Delta.AxisBlue[axIndex0].SaturationMethod := smRange;
+ Delta.AxisBlue[axIndex1].Value := 0;
+ Delta.AxisBlue[axIndex1].SaturationMethod := smRange;
+ Delta.AxisBlue[axIndex2].Value := 0;
+ Delta.AxisBlue[axIndex2].SaturationMethod := smRange;
+ ColorDeltas.Add(Delta);
+
+ Delta := TJvColorDelta.Create;
+ Delta.ColorID := csHSV;
+ Delta.AxisRed[axIndex0].Value := 0;
+ Delta.AxisRed[axIndex0].SaturationMethod := smRange;
+ Delta.AxisRed[axIndex1].Value := -176;
+ Delta.AxisRed[axIndex1].SaturationMethod := smRange;
+ Delta.AxisRed[axIndex2].Value := -180;
+ Delta.AxisRed[axIndex2].SaturationMethod := smRange;
+ Delta.AxisGreen[axIndex0].Value := 0;
+ Delta.AxisGreen[axIndex0].SaturationMethod := smRange;
+ Delta.AxisGreen[axIndex1].Value := 0;
+ Delta.AxisGreen[axIndex1].SaturationMethod := smRange;
+ Delta.AxisGreen[axIndex2].Value := 0;
+ Delta.AxisGreen[axIndex2].SaturationMethod := smRange;
+ Delta.AxisBlue[axIndex0].Value := 0;
+ Delta.AxisBlue[axIndex0].SaturationMethod := smRange;
+ Delta.AxisBlue[axIndex1].Value := 0;
+ Delta.AxisBlue[axIndex1].SaturationMethod := smRange;
+ Delta.AxisBlue[axIndex2].Value := 0;
+ Delta.AxisBlue[axIndex2].SaturationMethod := smRange;
+ ColorDeltas.Add(Delta);
+
+ Delta := TJvColorDelta.Create;
+ Delta.ColorID := csYUV;
+ Delta.AxisRed[axIndex0].Value := 0;
+ Delta.AxisRed[axIndex0].SaturationMethod := smRange;
+ Delta.AxisRed[axIndex1].Value := 38;
+ Delta.AxisRed[axIndex1].SaturationMethod := smRange;
+ Delta.AxisRed[axIndex2].Value := 0;
+ Delta.AxisRed[axIndex2].SaturationMethod := smRange;
+ Delta.AxisGreen[axIndex0].Value := 0;
+ Delta.AxisGreen[axIndex0].SaturationMethod := smRange;
+ Delta.AxisGreen[axIndex1].Value := 68;
+ Delta.AxisGreen[axIndex1].SaturationMethod := smRange;
+ Delta.AxisGreen[axIndex2].Value := 0;
+ Delta.AxisGreen[axIndex2].SaturationMethod := smRange;
+ Delta.AxisBlue[axIndex0].Value := 0;
+ Delta.AxisBlue[axIndex0].SaturationMethod := smRange;
+ Delta.AxisBlue[axIndex1].Value := 0;
+ Delta.AxisBlue[axIndex1].SaturationMethod := smRange;
+ Delta.AxisBlue[axIndex2].Value := 0;
+ Delta.AxisBlue[axIndex2].SaturationMethod := smRange;
+ ColorDeltas.Add(Delta);
+
+ Delta := TJvColorDelta.Create;
+ Delta.ColorID := csHLS;
+ Delta.AxisRed[axIndex0].Value := 0;
+ Delta.AxisRed[axIndex0].SaturationMethod := smRange;
+ Delta.AxisRed[axIndex1].Value := -30;
+ Delta.AxisRed[axIndex1].SaturationMethod := smRange;
+ Delta.AxisRed[axIndex2].Value := 0;
+ Delta.AxisRed[axIndex2].SaturationMethod := smRange;
+ Delta.AxisGreen[axIndex0].Value := 0;
+ Delta.AxisGreen[axIndex0].SaturationMethod := smRange;
+ Delta.AxisGreen[axIndex1].Value := -30;
+ Delta.AxisGreen[axIndex1].SaturationMethod := smRange;
+ Delta.AxisGreen[axIndex2].Value := 0;
+ Delta.AxisGreen[axIndex2].SaturationMethod := smRange;
+ Delta.AxisBlue[axIndex0].Value := 0;
+ Delta.AxisBlue[axIndex0].SaturationMethod := smRange;
+ Delta.AxisBlue[axIndex1].Value := -30;
+ Delta.AxisBlue[axIndex1].SaturationMethod := smRange;
+ Delta.AxisBlue[axIndex2].Value := 0;
+ Delta.AxisBlue[axIndex2].SaturationMethod := smRange;
+ ColorDeltas.Add(Delta);
+
+ Delta := TJvColorDelta.Create;
+ Delta.ColorID := csXYZ;
+ Delta.AxisRed[axIndex0].Value := 0;
+ Delta.AxisRed[axIndex0].SaturationMethod := smRange;
+ Delta.AxisRed[axIndex1].Value := 0;
+ Delta.AxisRed[axIndex1].SaturationMethod := smRange;
+ Delta.AxisRed[axIndex2].Value := 0;
+ Delta.AxisRed[axIndex2].SaturationMethod := smRange;
+ Delta.AxisGreen[axIndex0].Value := 0;
+ Delta.AxisGreen[axIndex0].SaturationMethod := smRange;
+ Delta.AxisGreen[axIndex1].Value := 0;
+ Delta.AxisGreen[axIndex1].SaturationMethod := smRange;
+ Delta.AxisGreen[axIndex2].Value := 0;
+ Delta.AxisGreen[axIndex2].SaturationMethod := smRange;
+ Delta.AxisBlue[axIndex0].Value := 80;
+ Delta.AxisBlue[axIndex0].SaturationMethod := smRange;
+ Delta.AxisBlue[axIndex1].Value := 0;
+ Delta.AxisBlue[axIndex1].SaturationMethod := smRange;
+ Delta.AxisBlue[axIndex2].Value := 0;
+ Delta.AxisBlue[axIndex2].SaturationMethod := smRange;
+ ColorDeltas.Add(Delta);
+end;
+
+procedure TJvFullColorCircleDlgMainFrm.JvFullColorCircleDialogApply(Sender: TObject);
+begin
+ RotateCustomValues;
+end;
+
+initialization
+ ColorDeltas := TJvColorDeltaList.Create;
+ FillColorDeltas;
+
+finalization
+ ColorDeltas.Free;
+
+end.
diff --git a/components/jvcllaz/examples/JvFullColorCircleDialog/JvFullColorCircleDialogPrj.lpi b/components/jvcllaz/examples/JvFullColorCircleDialog/JvFullColorCircleDialogPrj.lpi
new file mode 100644
index 000000000..2380fa59c
--- /dev/null
+++ b/components/jvcllaz/examples/JvFullColorCircleDialog/JvFullColorCircleDialogPrj.lpi
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/jvcllaz/examples/JvFullColorCircleDialog/JvFullColorCircleDialogPrj.lpr b/components/jvcllaz/examples/JvFullColorCircleDialog/JvFullColorCircleDialogPrj.lpr
new file mode 100644
index 000000000..0feb4712e
--- /dev/null
+++ b/components/jvcllaz/examples/JvFullColorCircleDialog/JvFullColorCircleDialogPrj.lpr
@@ -0,0 +1,15 @@
+program JvFullColorCircleDialogPrj;
+
+{$mode objfpc}{$H+}
+
+uses
+ Interfaces, Forms,
+ JvFullColorCircleDialogMainForm in 'JvFullColorCircleDialogMainForm.pas' {JvFullColorCircleDlgMainFrm};
+
+{$R *.res}
+
+begin
+ Application.Initialize;
+ Application.CreateForm(TJvFullColorCircleDlgMainFrm, JvFullColorCircleDlgMainFrm);
+ Application.Run;
+end.
diff --git a/components/jvcllaz/examples/JvFullColorDialog/JvFullColorDialogMainForm.lfm b/components/jvcllaz/examples/JvFullColorDialog/JvFullColorDialogMainForm.lfm
new file mode 100644
index 000000000..c345850c8
--- /dev/null
+++ b/components/jvcllaz/examples/JvFullColorDialog/JvFullColorDialogMainForm.lfm
@@ -0,0 +1,42 @@
+object JvFullColorDialogMainFrm: TJvFullColorDialogMainFrm
+ Left = 419
+ Height = 295
+ Top = 367
+ Width = 723
+ Caption = 'TJvFullColorDialog example'
+ ClientHeight = 295
+ ClientWidth = 723
+ Color = clBtnFace
+ Font.Color = clWindowText
+ OnCreate = FormCreate
+ OnShow = FormShow
+ Position = poScreenCenter
+ LCLVersion = '2.1.0.0'
+ Visible = True
+ object JvFullColorLabel: TJvFullColorLabel
+ Left = 16
+ Height = 17
+ Top = 32
+ Width = 257
+ LabelColor = 67108864
+ Brush.Color = clBlack
+ Caption = 'JvFullColorLabel'
+ Font.Color = clWindowText
+ ParentFont = False
+ OnDblClick = JvFullColorLabelDblClick
+ end
+ object LabelInfo: TLabel
+ Left = 16
+ Height = 15
+ Top = 8
+ Width = 192
+ Caption = 'Double-click on a label to customize'
+ ParentColor = False
+ end
+ object JvFullColorDialog: TJvFullColorDialog
+ FullColor = 83886079
+ OnApply = JvFullColorDialogApply
+ left = 232
+ top = 128
+ end
+end
diff --git a/components/jvcllaz/examples/JvFullColorDialog/JvFullColorDialogMainForm.pas b/components/jvcllaz/examples/JvFullColorDialog/JvFullColorDialogMainForm.pas
new file mode 100644
index 000000000..941c1a7dc
--- /dev/null
+++ b/components/jvcllaz/examples/JvFullColorDialog/JvFullColorDialogMainForm.pas
@@ -0,0 +1,187 @@
+{******************************************************************
+
+ JEDI-VCL Demo
+
+ Copyright (C) 2004 Project JEDI
+
+ Original author: Florent Ouchet [ouchet dott florent att laposte dott net]
+
+ Contributor(s):
+
+ You may retrieve the latest version of this file at the JEDI-JVCL
+ home page, located at http://jvcl.delphi-jedi.org
+
+ The contents of this file are used with permission, subject to
+ the Mozilla Public License Version 1.1 (the "License"); you may
+ not use this file except in compliance with the License. You may
+ obtain a copy of the License at
+ http://www.mozilla.org/MPL/MPL-1_1Final.html
+
+ Software distributed under the License is distributed on an
+ "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ implied. See the License for the specific language governing
+ rights and limitations under the License.
+
+******************************************************************}
+
+unit JvFullColorDialogMainForm;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ //Windows, Messages,
+ SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, JvFullColorSpaces, JvFullColorCtrls, StdCtrls, JvFullColorForm,
+ JvFullColorDialogs;
+
+type
+
+ { TJvFullColorDialogMainFrm }
+
+ TJvFullColorDialogMainFrm = class(TForm)
+ JvFullColorLabel: TJvFullColorLabel;
+ LabelInfo: TLabel;
+ JvFullColorDialog: TJvFullColorDialog;
+ procedure Button1Click(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure JvFullColorLabelDblClick(Sender: TObject);
+ procedure JvFullColorDialogApply(Sender: TObject; AFullColor: TJvFullColor);
+ public
+ procedure UpdateCaption (ALabel: TJvFullColorLabel);
+ procedure UpdateAllCaptions;
+ end;
+
+var
+ JvFullColorDialogMainFrm: TJvFullColorDialogMainFrm;
+
+implementation
+
+{$R *.lfm}
+
+uses
+ Math;
+
+procedure TJvFullColorDialogMainFrm.Button1Click(Sender: TObject);
+begin
+ JvFullColorLabel.Caption := 'test';
+end;
+
+procedure TJvFullColorDialogMainFrm.FormCreate(Sender: TObject);
+var
+ Index: Integer;
+ LDEFColorSpace: TJvDEFColorSpace;
+ LColorLabel: TJvFullColorLabel;
+ X, Y: Integer;
+
+ procedure CreateLabel(AFullColor: TJvFullColor);
+ begin
+ Inc(Y,JvFullColorLabel.Height+10);
+ if Y > ClientHeight then
+ begin
+ Y := JvFullColorLabel.Top;
+ Inc(X,JvFullColorLabel.Width+10);
+ end;
+ LColorLabel := TJvFullColorLabel.Create(Self);
+ LColorLabel.Parent := Self;
+ LColorLabel.SetBounds(X,Y,JvFullColorLabel.Width,JvFullColorLabel.Height);
+ LColorLabel.LabelColor := AFullColor;
+ LColorLabel.AutoSize := true;
+ LColorLabel.BorderSpacing.Around := 8;
+ LColorLabel.OnDblClick := @JvFullColorLabelDblClick;
+ end;
+
+begin
+ X := JvFullColorLabel.Left;
+ Y := JvFullColorLabel.Top;
+ with ColorSpaceManager do
+ begin
+ LDEFColorSpace := TJvDEFColorSpace(ColorSpace[csDEF]);
+ for Index := 1 to Min(LDEFColorSpace.ColorCount-1,9) do
+ CreateLabel(ConvertFromColor(LDEFColorSpace.ColorValue[Index]));
+ with ColorSpace[csHLS] do
+ begin
+ CreateLabel(ConvertFromColor(clRed));
+ CreateLabel(ConvertFromColor(clLime));
+ CreateLabel(ConvertFromColor(clBlue));
+ CreateLabel(ConvertFromColor(clYellow));
+ end;
+ CreateLabel(ColorSpace[csYUV].ConvertFromColor(clWhite));
+ CreateLabel(ColorSpace[csYCC].ConvertFromColor(clPurple));
+ CreateLabel(ColorSpace[csHSV].ConvertFromColor(clAqua));
+ CreateLabel(ColorSpace[csYIQ].ConvertFromColor(clOlive));
+ CreateLabel(ColorSpace[csLAB].ConvertFromColor(clMaroon));
+ CreateLabel(ColorSpace[csDEF].ConvertFromColor(clAppWorkSpace));
+ end;
+ UpdateAllCaptions;
+end;
+
+procedure TJvFullColorDialogMainFrm.FormShow(Sender: TObject);
+begin
+ AutoSize := true;
+end;
+
+procedure TJvFullColorDialogMainFrm.UpdateAllCaptions;
+var
+ Index: Integer;
+begin
+ for Index := 0 to ControlCount-1 do
+ if Controls[Index] is TJvFullColorLabel then
+ UpdateCaption(TJvFullColorLabel(Controls[Index]));
+end;
+
+procedure TJvFullColorDialogMainFrm.UpdateCaption(ALabel: TJvFullColorLabel);
+var
+ Index: Cardinal;
+ LColor: TColor;
+begin
+ with ColorSpaceManager, ColorSpace[GetColorSpaceID(ALabel.LabelColor)] do
+ if ID = csDEF then
+ begin
+ with TJvDEFColorSpace(ColorSpace[csDEF]) do
+ begin
+ LColor := ConvertToColor(ALabel.LabelColor);
+ for Index:=0 to ColorCount-1 do
+ if ColorValue[Index]=LColor then
+ begin
+ ALabel.Caption := Format('%s : %s',[ShortName,ColorPrettyName[Index]]);
+ Break;
+ end;
+ if Index = ColorCount then
+ ALabel.Caption := ShortName+' : Invalid color';
+ end;
+ end
+ else
+ ALabel.Caption := Format('%s : %s=%d ; %s=%d ; %s=%d',[ShortName,
+ AxisName[axIndex0],GetAxisValue(ALabel.LabelColor,axIndex0),
+ AxisName[axIndex1],GetAxisValue(ALabel.LabelColor,axIndex1),
+ AxisName[axIndex2],GetAxisValue(ALabel.LabelColor,axIndex2)]);
+end;
+
+procedure TJvFullColorDialogMainFrm.JvFullColorLabelDblClick(Sender: TObject);
+begin
+ with TJvFullColorLabel(Sender) do
+ begin
+ JvFullColorDialog.FullColor := LabelColor;
+ JvFullColorDialog.Tag := Integer(Sender);
+ if JvFullColorDialog.Execute then
+ begin
+ LabelColor := JvFullColorDialog.FullColor;
+ UpdateCaption(TJvFullColorLabel(Sender));
+ end;
+ end;
+end;
+
+procedure TJvFullColorDialogMainFrm.JvFullColorDialogApply(Sender: TObject;
+ AFullColor: TJvFullColor);
+begin
+ with TJvFullColorDialog(Sender) do
+ begin
+ TJvFullColorLabel(Tag).LabelColor := FullColor;
+ UpdateCaption(TJvFullColorLabel(Tag));
+ end;
+end;
+
+end.
diff --git a/components/jvcllaz/examples/JvFullColorDialog/JvFullColorDialogPrj.lpi b/components/jvcllaz/examples/JvFullColorDialog/JvFullColorDialogPrj.lpi
new file mode 100644
index 000000000..04b6d8edf
--- /dev/null
+++ b/components/jvcllaz/examples/JvFullColorDialog/JvFullColorDialogPrj.lpi
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/jvcllaz/examples/JvFullColorDialog/JvFullColorDialogPrj.lpr b/components/jvcllaz/examples/JvFullColorDialog/JvFullColorDialogPrj.lpr
new file mode 100644
index 000000000..1a1185553
--- /dev/null
+++ b/components/jvcllaz/examples/JvFullColorDialog/JvFullColorDialogPrj.lpr
@@ -0,0 +1,16 @@
+program JvFullColorDialogPrj;
+
+{$mode objfpc}{$H+}
+
+uses
+ Interfaces,
+ Forms,
+ JvFullColorDialogMainForm in 'JvFullColorDialogMainForm.pas' {JvFullColorDialogMainFrm};
+
+{$R *.res}
+
+begin
+ Application.Initialize;
+ Application.CreateForm(TJvFullColorDialogMainFrm, JvFullColorDialogMainFrm);
+ Application.Run;
+end.