Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2011, 12:35   #1
Os_Mary
Новичок
Джуниор
 
Регистрация: 21.01.2011
Сообщений: 3
Вопрос Выбрать ВСЕ выделенные ячейки в StringGrid

Подскажите, плз, как, пройдя в цикле по строкам StringGrid, выбрать все
выделенные строки (или ячейки), в случае, когда выделено множество строк...
Os_Mary вне форума Ответить с цитированием
Старый 21.01.2011, 15:04   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

попробуйте так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i, j : integer;
begin
  for i:=StringGrid1.Selection.Left to StringGrid1.Selection.Right do
    for j:=StringGrid1.Selection.Top to StringGrid1.Selection.Bottom do
      ShowMessage('Col '+IntToStr(i)+' Row: '+IntToStr(j)+'  value = '+StringGrid1.Cells[i,j]);
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.01.2011, 19:00   #3
Os_Mary
Новичок
Джуниор
 
Регистрация: 21.01.2011
Сообщений: 3
По умолчанию

Спасибо! Получилось.
Еще одна просьба: можно ли организовать Multiselect в StringGrid?
С Shift позволяет выделить несколько строк, но только подряд.
Можо ли с Ctrl выделять произвольные строки?
Os_Mary вне форума Ответить с цитированием
Старый 22.01.2011, 20:55   #4
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

В стандартном - нет (Д7). Только область. Свойство goRangeSelect.

Последний раз редактировалось asmodey1; 22.01.2011 в 21:11.
asmodey1 вне форума Ответить с цитированием
Старый 22.01.2011, 20:57   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Можо ли с Ctrl выделять произвольные строки?
Не припомню там такую возможность, но ты всегда можешь либо использовать вместо грида ListView, либо написать на основе Грида новый компонент, или донавернуть этот грид примерно так:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids;

type
  TStringGrid=class(Grids.TStringGrid)
  private
   SelectedRows:TList;
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
  end;
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TStringGrid }

constructor TStringGrid.Create(AOwner: TComponent);
begin
  inherited;
  SelectedRows:=TList.Create;
end;

destructor TStringGrid.Destroy;
begin
  SelectedRows.Free;
  inherited;
end;

procedure TForm1.StringGrid1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var r,i:integer;
begin
 if ssctrl in Shift then begin
  with TStringGrid(Sender) do begin
   r:=MouseCoord(x,y).y;
   i:=SelectedRows.IndexOf(Pointer(r));
   if i=-1 then SelectedRows.Add(pointer(r))
   else SelectedRows.Delete(i);
   Repaint;
  end;
 end;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
 with TStringGrid(Sender) do begin
  if SelectedRows.IndexOf(Pointer(Arow))<>-1 then begin
   Canvas.Brush.Color:=clSilver;
   Canvas.FillRect(Rect);
   Canvas.TextOut(rect.Left,Rect.Top,Cells[acol,arow]);
  end;
 end;
end;

end.
Что в принципе не так уж и сложно
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.01.2011, 18:21   #6
Os_Mary
Новичок
Джуниор
 
Регистрация: 21.01.2011
Сообщений: 3
Радость

Большое спасибо всем за помошь!
Os_Mary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Менять местами выделенные ячейки Whitered Microsoft Office Excel 4 11.08.2010 14:59
Копировать только выделенные ячейки Kolpachog Microsoft Office Excel 2 10.06.2010 16:11
Выбрать ячейки по дате Aleksandr Microsoft Office Excel 1 13.11.2009 15:29
Как проверить все ли ячейки в StringGrid заполнены или нет ? Ветас Помощь студентам 4 11.11.2009 22:54
Выбрать все элементы из ветки дерева iankov SQL, базы данных 5 28.04.2009 09:22