TStringGrid'ы

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
krab
постоялец
Сообщения: 108
Зарегистрирован: 17.02.2010 17:23:08

TStringGrid'ы

Сообщение krab »

На форме есть несколько TStringGrid. При переходе от одного к другому подсветка выделения в предыдущем исчезает. Нужно, чтобы текущие выбранные строки во всех TStringGrid подсвечивались одновременно.

Как это можно сделать?
Vladimir_Ivanov
незнакомец
Сообщения: 6
Зарегистрирован: 13.03.2010 17:10:47

Сообщение Vladimir_Ivanov »

мне кажеться нельзя иметь выделения сразу у всех (хотя я могу ошибаться) ведь фокус ввода может иметь только один элемент. но можно сделать так, закрашивать выбранные ранее строки определенным цветом (можно и синим как цвет выделения)

Код: Выделить всё

unit Unit1; 

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  Grids, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    procedure StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
      aRect: TRect; aState: TGridDrawState);
    procedure StringGrid1SelectCell(Sender: TObject; aCol, aRow: Integer;
      var CanSelect: Boolean);
    procedure StringGrid2DrawCell(Sender: TObject; aCol, aRow: Integer;
      aRect: TRect; aState: TGridDrawState);
    procedure StringGrid2SelectCell(Sender: TObject; aCol, aRow: Integer;
      var CanSelect: Boolean);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  a,b:Integer;
implementation

{ TForm1 }

procedure TForm1.StringGrid1SelectCell(Sender: TObject; aCol, aRow: Integer;
  var CanSelect: Boolean);
begin
  a:=aRow; //запоминаем выделенную строку
end;

procedure TForm1.StringGrid2DrawCell(Sender: TObject; aCol, aRow: Integer;
  aRect: TRect; aState: TGridDrawState);
begin
   if  StringGrid2.Focused then
  exit;
  if (arow=b) and (Acol<>0) then
    begin
      StringGrid2.canvas.Brush.Color:=clBlue;
      StringGrid2.canvas.fillRect(aRect);
    end;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
  aRect: TRect; aState: TGridDrawState);
begin
 if  StringGrid1.Focused then
  exit;
  if (arow=a) and (Acol<>0) then
    begin
      StringGrid1.canvas.Brush.Color:=clBlue;
      StringGrid1.canvas.fillRect(aRect);
    end;
end;

procedure TForm1.StringGrid2SelectCell(Sender: TObject; aCol, aRow: Integer;
  var CanSelect: Boolean);
begin
   b:=aRow; //запоминаем выделенную строку
end;

initialization
  {$I unit1.lrs}

end.

Аватара пользователя
Light13
постоялец
Сообщения: 127
Зарегистрирован: 17.07.2009 07:50:10
Откуда: Челябинск

Сообщение Light13 »

Выставить у StringGrid Options->goDrawFocusSelected
Ответить