Я пытаюсь создать пользовательский компонент контрольного списка с некоторыми дополнительными функциями из компонента Orpheus (TOvcCheckList) и некоторыми улучшениями пользовательского интерфейса.Мне нужна помощь в создании CheckList, который выглядит так, как на изображении,
Для достижения этого дизайна на данный момент мы не проектировали никаких пользовательских компонентов, но мы попытались поместить cxGroupBox и поверх группового блока.мы добавили cxCheckList и реализовали функциональность.Но теперь нас просят создать компонент, так что потребность в написании функциональности везде будет уменьшена.
Ниже приведен пример для получения проекта.![enter image description here](https://i.stack.imgur.com/48Igs.jpg)
unit DxSelectallGroupBox;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, cxContainer, cxEdit, cxCustomListBox,
cxCheckListBox, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters, cxPC, dxDockPanel, dxDockControl,
Vcl.StdCtrls, cxGroupBox, cxCheckBox, dxBevel, System.ImageList, Vcl.ImgList,
Vcl.CheckLst,Imagelistmodule;
type
TDxSelectallGroupBox = class(TcxCustomGroupBox)
private
{ Private declarations }
fGBSelectAll: TcxGroupBox;
fGBCheckList: TcxGroupBox;
fCxCheckList: TcxCheckListBox;
fDxBevel: TdxBevel;
fCxCheckSelectAll: TcxCheckListBox;
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Test Components', [TDxSelectallGroupBox]);
end;
{ TDxChecklistGroupBox }
constructor TDxSelectallGroupBox.Create(AOwner: TComponent);
begin
inherited;
SetBounds(Left, Top, 140, 120);
fGBSelectAll := TcxGroupBox.Create(self);
fGBSelectAll.Parent := Twincontrol(AOwner);
fGBSelectAll.SetBounds(10, 10, width, 185);
fGBSelectAll.Align := alNone;
fGBSelectAll.Alignment := alTopLeft;
fCxCheckSelectAll := TcxCheckListBox.Create(Self);
fCxCheckSelectAll.Parent := fGBSelectAll;
FdxBevel := Tdxbevel.Create(Self);
FdxBevel.Parent := fGBSelectAll;
FgbCheckList := TcxGroupBox.Create(Self);
FgbCheckList.Parent := fGBSelectAll;
fCxCheckList := TcxCheckListBox.Create(Self);
fCxCheckList.Parent := FgbCheckList;
with fGBSelectAll do begin
PanelStyle.Active := True;
ParentBackground := False;
ParentColor := False;
Style.BorderColor := 15065047;
Style.BorderStyle := ebsSingle;
Style.Color := clWhite;
Style.LookAndFeel.NativeStyle := False;
TabOrder := 0;
end;
with FdxBevel do begin
Left := 2;
Top := 38;
Width := 181;
Height := 1;
Align := alTop;
AutoSize := True;
LookAndFeel.NativeStyle := False;
end ;
with FgbCheckList do begin
Left := 2 ;
Top := 39;
Align := alClient;
PanelStyle.Active := True;
ParentBackground := False;
Style.BorderStyle := ebsNone;
Style.LookAndFeel.NativeStyle := False;
StyleDisabled.LookAndFeel.NativeStyle := False;
TabOrder := 0;
Height := 121;
Width := 181;
end;
with fCxCheckList do begin
Left := 2;
Top := 2;
Width := 177;
Height := 117;
Margins.Left := 5;
Margins.Top := 0;
Margins.Right := 0;
Margins.Bottom := 0;
Align := alClient;
ParentFont := False;
Style.BorderStyle := cbsNone;
Style.Color := clWhite;
Style.Font.Charset := ANSI_CHARSET;
Style.Font.Color := 7697781;
Style.Font.Height := -16;
Style.Font.Name := 'Noto Sans';
Style.Font.Style := [];
Style.HotTrack := True;
Style.LookAndFeel.NativeStyle := False;
TabOrder := 0;
additem('One');
additem('Two');
additem('Three');
showchecks:=true;
end;
with fCxCheckSelectAll do
begin
AlignWithMargins := True;
Left := 5;
Top := 5 ;
Width := 175 ;
Height := 30 ;
Align := alTop;
ParentFont := False ;
Style.BorderStyle := cbsNone;
Style.Font.Charset := ANSI_CHARSET;
Style.Font.Color := 7697781;
Style.Font.Height := -16 ;
Style.Font.Name := 'Noto Sans';
Style.Font.Style := [] ;
Style.LookAndFeel.NativeStyle := False;
StyleDisabled.BorderStyle := cbsNone;
TabOrder := 1 ;
additem('Select All');
Showchecks :=True;
end;
end;
end.
После установки компонента я получаю что-то вроде следующего: ![enter image description here](https://i.stack.imgur.com/rIfTB.jpg)
Может кто-нибудь помочь в исправлениимой источник и направить меня в правильном направлении?Спасибо.
ОБНОВЛЕНИЕ
Я нашел основную причину ошибки и исправил Control '' has no parent window
.Когда я устанавливаю и пытаюсь удалить компонент в форме, он выдает ошибку типа Access violation at address 1D405F2E in module 'cxLibraryRS25.bpl'. Write of
'адрес 00000090`