TStringGrid'ы

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

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

TStringGrid'ы

Сообщение krab » 20.03.2010 20:12:04

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

Как это можно сделать?
krab
постоялец
 
Сообщения: 108
Зарегистрирован: 17.02.2010 18:23:08

Re: TStringGrid'ы

Сообщение Vladimir_Ivanov » 20.03.2010 20:43:33

мне кажеться нельзя иметь выделения сразу у всех (хотя я могу ошибаться) ведь фокус ввода может иметь только один элемент. но можно сделать так, закрашивать выбранные ранее строки определенным цветом (можно и синим как цвет выделения)
Код: Выделить всё
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.

Vladimir_Ivanov
незнакомец
 
Сообщения: 6
Зарегистрирован: 13.03.2010 18:10:47

Re: TStringGrid'ы

Сообщение Light13 » 22.03.2010 07:26:14

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


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: MailRu[bot] и гости: 55

Рейтинг@Mail.ru