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 @@ + + + + + + + + + + + + + <Scaled Value="True"/> + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + <XPManifest> + <DpiAware Value="True"/> + </XPManifest> + <Icon Value="0"/> + </General> + <BuildModes Count="1"> + <Item1 Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <UseFileFilters Value="True"/> + </PublishOptions> + <RunParams> + <FormatVersion Value="2"/> + <Modes Count="0"/> + </RunParams> + <RequiredPackages Count="2"> + <Item1> + <PackageName Value="JvMMLazR"/> + </Item1> + <Item2> + <PackageName Value="LCL"/> + </Item2> + </RequiredPackages> + <Units Count="2"> + <Unit0> + <Filename Value="JvFullColorCircleDialogPrj.lpr"/> + <IsPartOfProject Value="True"/> + </Unit0> + <Unit1> + <Filename Value="JvFullColorCircleDialogMainForm.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="JvFullColorCircleDlgMainFrm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + </Unit1> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="JvFullColorCircleDialogPrj"/> + </Target> + <SearchPaths> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Linking> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + </CompilerOptions> + <Debugging> + <Exceptions Count="3"> + <Item1> + <Name Value="EAbort"/> + </Item1> + <Item2> + <Name Value="ECodetoolError"/> + </Item2> + <Item3> + <Name Value="EFOpenError"/> + </Item3> + </Exceptions> + </Debugging> +</CONFIG> 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 @@ +<?xml version="1.0" encoding="UTF-8"?> +<CONFIG> + <ProjectOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <General> + <Flags> + <UseDefaultCompilerOptions Value="True"/> + </Flags> + <SessionStorage Value="InProjectDir"/> + <MainUnit Value="0"/> + <Title Value="JvFullColorDialogPrj"/> + <Scaled Value="True"/> + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + <XPManifest> + <DpiAware Value="True"/> + </XPManifest> + <Icon Value="0"/> + </General> + <BuildModes Count="1"> + <Item1 Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <UseFileFilters Value="True"/> + </PublishOptions> + <RunParams> + <FormatVersion Value="2"/> + <Modes Count="0"/> + </RunParams> + <RequiredPackages Count="2"> + <Item1> + <PackageName Value="JvMMLazR"/> + </Item1> + <Item2> + <PackageName Value="LCL"/> + </Item2> + </RequiredPackages> + <Units Count="2"> + <Unit0> + <Filename Value="JvFullColorDialogPrj.lpr"/> + <IsPartOfProject Value="True"/> + </Unit0> + <Unit1> + <Filename Value="JvFullColorDialogMainForm.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="JvFullColorDialogMainFrm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + </Unit1> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="JvFullColorDialogPrj"/> + </Target> + <SearchPaths> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Linking> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + </CompilerOptions> + <Debugging> + <Exceptions Count="3"> + <Item1> + <Name Value="EAbort"/> + </Item1> + <Item2> + <Name Value="ECodetoolError"/> + </Item2> + <Item3> + <Name Value="EFOpenError"/> + </Item3> + </Exceptions> + </Debugging> +</CONFIG> 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.