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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2011, 15:34   #1
kostghost
Пользователь
 
Аватар для kostghost
 
Регистрация: 28.08.2009
Сообщений: 18
По умолчанию StringGrid-закрашивание ячейки по клику

Целый день сижу с вопросом, Как можно(если, конечно, можно) закрасить определенную ячейку в StringGrid по её координатам?
Координаты определяю
Код:
xx:=StringGrid1.Selection.Left;
yy:=StringGrid1.Selection.Top;
Как же закрашивать по этим координатам, никак не пойму.

Помогите пожалуйста непосвященному!
kostghost вне форума Ответить с цитированием
Старый 18.09.2011, 15:59   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Никак. Закраска делается в событии OnDrawCell, туда система передает координаты квадрата ячейки и ее порядковые номера по вертикали и горизонтали. Вот там и описывай отрисовку закраски
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.09.2011, 17:16   #3
kostghost
Пользователь
 
Аватар для kostghost
 
Регистрация: 28.08.2009
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Никак. Закраска делается в событии OnDrawCell, туда система передает координаты квадрата ячейки и ее порядковые номера по вертикали и горизонтали. Вот там и описывай отрисовку закраски
Спасибо,но сложно это. Лично у меня через это событие получалось закрашивать только по заранее заложенному алгоритму.

Ладно. Тогда еще вопрос, как вставить текст(либо цифру) в нужную ячейку по координатам? Помню, что такая штука была...
Нашел способ,
Код:
StringGrid1.Cells[xx,yy]:=('1');

Последний раз редактировалось kostghost; 18.09.2011 в 17:22.
kostghost вне форума Ответить с цитированием
Старый 18.09.2011, 17:25   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Опять таки же в том же событии
Если конечно речь идет именно о экранных координатах а не о координатах ячейки.
И кстати - не вставить а отрисовать.
А если именно вставить то:
Код:
var tgc:TGridCoord;
begin
 with StringGrid1 do begin
  tgc:=MouseCoord(50,50);
  Cells[tgc.X,tgc.Y]:='Текст';
 end;
end;
Где 50, 50 - координаты "пикселя" в гриде.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.09.2011, 19:33   #5
kostghost
Пользователь
 
Аватар для kostghost
 
Регистрация: 28.08.2009
Сообщений: 18
По умолчанию

Прогулялся, мозги освежил. Вообщем запилил) Выложу, мб кому что-нибудь отсюда понадобится.
Код:
***
var
  Form1: TForm1;                            //x-кол-во клеток по X, y, по Y.
  x,y,i,j:integer;                          // i и j исп для очистки табл.
  arr:array[1..20,1..20] of integer;        // Основной массив 20 на 20 (Coming Soon)
  xx,yy:integer;                            // Координаты x и y выд. клетки

***
procedure TForm1.Button1Click(Sender: TObject);
begin
x:=StrToInt(Edit1.Text);                                   //создаем табл
y:=StrToInt(Edit2.Text);
StringGrid1.RowCount:=x;
StringGrid1.ColCount:=y;
Button2Click(Self);                                      //вызываем 'чистильщика'

end;

procedure TForm1.Button2Click(Sender: TObject);        //чистильщик
begin
with StringGrid1 do
  for i:=FixedCols to ColCount-1 do
  for j:=FixedRows to RowCount-1 do
    Cells[i, j]:=('0');

end;


procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
if StringGrid1.Cells[Acol,Arow]='1' then                  //Черный (1)
 begin
    rect := StringGrid1.CellRect(ACol,ARow);
    StringGrid1.Canvas.Brush.Color := clBlack;
    StringGrid1.Canvas.FillRect(rect);
 end;

 if StringGrid1.Cells[Acol,Arow]='0' then                  //Белый (0)
 begin
    rect := StringGrid1.CellRect(ACol,ARow);
    StringGrid1.Canvas.Brush.Color := clWhite;
    StringGrid1.Canvas.FillRect(rect);
 end;

 if StringGrid1.Cells[Acol,Arow]='2' then                  //Зеленый (2)
 begin
    rect := StringGrid1.CellRect(ACol,ARow);
    StringGrid1.Canvas.Brush.Color := clGreen;
    StringGrid1.Canvas.FillRect(rect);
 end;


end;

procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
xx:=StringGrid1.Selection.Left;
yy:=StringGrid1.Selection.Top;
 label1.Caption:=('x='+IntToStr(xx)+'     y='+IntToStr(yy));
  if ListBox1.ItemIndex=-1 then else
StringGrid1.Cells[xx,yy]:=(IntToStr(ListBox1.ItemIndex));      //берем 'кисть' из ItemBox
end;

end.
kostghost вне форума Ответить с цитированием
Старый 18.09.2011, 20:50   #6
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Код:
var x,y:integer;
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
 CanSelect:=false;
randomize;
 form1.StringGrid1.Canvas.Brush.Color:=random($FFFF);
 form1.StringGrid1.Canvas.FillRect(StringGrid1.CellRect(ACol, ARow));
end;
SERG1980 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Закрашивание в StringGrid StudentMarat Помощь студентам 11 28.03.2010 17:36
Как правильно изменить содержимое ячейки по клику в нее? Stilet JavaScript, Ajax 3 12.08.2009 17:03
Закрашивание ячеек в StringGrid ИВэТэшка Помощь студентам 7 12.04.2009 11:09
Закрашивание столбцов в Stringgrid ertar Общие вопросы Delphi 3 19.02.2009 00:31
StringGrid: Выделение и закрашивание mazdakilla Общие вопросы Delphi 1 14.05.2008 22:55