В статье рассмотрим проблему, с которой сталкиваются разработчики, использующие компонент TColorListBox в среде Delphi 10.4.2. Речь пойдет о добавлении групп стандартных цветов в TColorListBox во время выполнения программы, не затрагивая при этом пользовательские цвета, которые уже были добавлены.
Проблема
Разработчик имеет TColorListBox в приложении VCL, где уже добавлены некоторые пользовательские цвета. При попытке добавить стандартные цвета через изменение свойства Style компонента, происходит перезапись существующих пользовательских цветов. Это нежелательное поведение, так как требуется сохранить пользовательские цвета, а добавить только стандартные.
Решение проблемы
Чтобы решить эту проблему, необходимо сохранить список существующих цветов в временный список, а затем, после добавления стандартных цветов, восстановить пользовательские цвета, не изменяя их порядок.
procedure TForm1.btnAddGroupClick(Sender: TObject);
var
CL: TStringList;
begin
CL := TStringList.Create;
try
CL.Assign(ColorListBox1.Items); // Сохраняем существующие цвета в временный список
ColorListBox1.Style := ColorListBox1.Style + [cbStandardColors]; // Добавляем стандартные цвета
ColorListBox1.Items.AddStrings(CL); // Восстанавливаем пользовательские цвета
finally
CL.Free;
end;
end;
Также, если необходимо сохранить пользовательские цвета в начале списка, следует вставлять их обратно по одному, начиная с последнего:
procedure TForm1.btnAddGroupClick(Sender: TObject);
begin
if not (cbStandardColors in ColorListBox1.Style) then
AddColorGroup([cbStandardColors]);
end;
procedure TForm1.AddColorGroup(AColorGroup: TColorBoxStyle);
var
CL: TStringList;
i: Integer;
begin
CL := TStringList.Create;
try
CL.Assign(ColorListBox1.Items); // Сохраняем существующие цвета в временный список
ColorListBox1.Items.BeginUpdate;
try
ColorListBox1.Style := ColorListBox1.Style + AColorGroup;
// Добавляем существующие цвета обратно в начало списка по одному
for i := CL.Count - 1 downto 0 do
ColorListBox1.Items.InsertObject(0, CL[i], CL.Objects[i]);
finally
ColorListBox1.Items.EndUpdate;
end;
finally
CL.Free;
end;
end;
Заключение
При работе с TColorListBox в Delphi 10.4.2 важно правильно управлять добавлением групп стандартных цветов, чтобы не потерять пользовательские цвета, добавленные ранее. Представленные выше методы позволяют избежать перезаписи пользовательских цветов и добавлять стандартные цвета без потерь.
Разработчики в Delphi 10.4.2 сталкиваются с проблемой добавления стандартных цветов в TColorListBox, не перезаписывая при этом уже добавленные пользовательские цвета.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.