Нужен визуальный компонент Delphi, аналог отображения дефрагментации диска в старых версиях Windows

Требования

Описание: Нужен визуальный компонент, который отображает в окне упорядоченное количество элементов в виде цветных прямоугольников

Количество элементов: 1024 макс, линейное с лева на право заполнение до конца видимой области, далее с новой строки

У каждого элемента: программно возможность изменения позиции в списке и цвета, всплывающая подсказка, popup меню

Как бонус: масштабирование и прокрутка видимой области отображения

Вид: Аналог отображения дефрагментации

введите сюда описание изображения

Вопрос: Таких компонентов не знаю, может подскажете если есть? А если нет, то посоветуйте как написать?

= Windows 10 Ent 1607, Embarcadero Delphi 10.3


Ответы (1 шт):

Автор решения: MBo

TDrawGrid + простенькое хранилище информации в списке

введите сюда описание изображения

procedure TForm1.DrawGrid1ContextPopup(Sender: TObject; MousePos: TPoint;
  var Handled: Boolean);
var
  ar, ac: Integer;
begin
  TDrawGrid(Sender).MouseToCell(MousePos.X, MousePos.Y, ac, ar);
  PopupMenu1.Items[0].Caption := Format('%d %d', [ar, ac]);
end;

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  c: TCanvas;
begin
  c := TDrawGrid(Sender).Canvas;
  if ARow > 3 then
    c.Brush.Color := clWindow
  else
    c.Brush.Color := Random($1000000);
  Rect.Inflate(-2, -2);
  c.FillRect(Rect);
end;
→ Ссылка