Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Множественный выбор в TStringGrid

Delphi , Компоненты и Классы , TStringGrid и TDrawGrid

Множественный выбор в TStringGrid

То же самое я проделывал и с DBGrid. (Пока не реализован Shift-MouseDown, только Ctrl-MouseDown).

Для TStringGrid вам нужно выполнить следующие шаги:

  1. Заполните сетку, связывая Objects[0, ARow] с некоторым логическим объектом типа:

  2. TBooleanObject = class(TObject)
    public
      Flag: Boolean;
    end;
    

  3. В обработчике события OnMouseDown и OnKeyDown измените флаг, как того требует ситуация.
  4. В обработчике события OnDrawCell отрисуйте строку согласно флагу Objects[0,ARow].

Here is the translation of the provided text into Russian:

Пример реализации множественного выбора в TStringGrid:

type
  TBooleanObject  = class(TObject)
  public
    Flag: Boolean;
  end;

procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if (Button = mbLeft) and (Shift = [ssCtrl]) then
  begin
    ARow := StringGrid1.RowFromPoint(X, Y);
    if ARow >= 0 then
      Objects[0, ARow].Flag := not Objects[0, ARow].Flag;
  end;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  if (ACol = 0) and (ARow >= 0) then
  begin
    with Sender as TStringGrid do
      Canvas.Font.Color := if Objects[0, ARow].Flag then clRed else clBlack;
    Canvas.TextOut(Rect.Left + 5, Rect.Top + 2, 'Selected');
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  SetLength(Objects, StringGrid1.RowCount, 1);
  for ARow := 0 to StringGrid1.RowCount - 1 do
    Objects[0, ARow] := TBooleanObject.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
  i: Integer;
begin
  for ARow := 0 to StringGrid1.RowCount - 1 do
    FreeAndNil(Objects[0, ARow]);
end;

В этом примере мы создаем класс TBooleanObject с свойством Flag, которое представляет собой выбранность строки или нет. Когда пользователь кликнет на ячейку с нажатой клавишей Ctrl (т.е., Shift = [ssCtrl]), мы переключаем свойство Flag соответствующего экземпляра класса TBooleanObject. В обработчике события OnDrawCell, мы проверяем, является ли столбец первым и находится ли строка в пределах количества строк таблицы. Если это так, мы устанавливаем цвет текста в красный или черный в зависимости от выбранности строки или нет. Мы также рисуем простой текст "Selected" в верхнем левом углу ячейки. В обработчике события FormCreate, мы инициализируем массив Objects экземплярами класса TBooleanObject для каждой строки таблицы. В обработчике события FormDestroy, мы освобождаем и нулируем эти объекты, чтобы предотвратить утечки памяти. Обратите внимание, что это реализация только поддерживает выбор с помощью Ctrl-нажатия и не поддерживает выбор с помощью Shift-нажатия. Вы можете добавить дополнительную логику для обработки выбора с помощью Shift-нажатия, если вам нужно.

Статья описывает, как реализовать множественный выбор в TStringGrid, используя логический объект и обрабатывая события MouseDown, KeyDown и DrawCell.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: TStringGrid и TDrawGrid ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100

Время компиляции файла: 2024-05-19 17:53:24
2024-05-19 20:49:53/0.0050170421600342/2