Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

рисование на StringGrid [D6]


Dush ©   (2005-11-01 12:23:00) 

Доброго времени суток!
при движении мыши у меня закрашиваютсь ячейки над которыми проходит курсор. Но при быстром движении курсора некоторые ячейки не закрашиваются. Как сдлеать так чтоб они закрашивались?


Dush   (2005-11-02 10:35:00) [1]

Спасибо большое SaF22 за ответы! но так как ничего не получилось (все равно прорисовывает с пропусками), решил попробовать с отрисовкой на канве формы. Еще раз большое спасибо :)


SaF22   (2005-11-01 14:51:00) [2]

Тогда попбробуй сделать следующее:
procedure TMDIChild.Draw(Sender: TObject; ACol, ARow: Longint; Rect: TRect; State:TGridDrawState);

begin
stringgrid1.Canvas.Brush.Color:=clRed;
if (gdselected in state) or (CrossArr[ARow,ACol]=1)
   then
      begin
          StringGrid1.Canvas.FillRect(rect);
          CrossArr[ARow,ACol]=1;
      end;
end;

В коде могут быть ошибки, не проверял.
Короче  идея такая: при первом выделении ячеек у тебя заполняется массив, приследующем закрашиваются новые ячейки плюс те которые в массиве. Идея понятна?
Просто я хотел тебе показать другой способ заполнения массива, в самой процедуре прорисовки Грида.


Dush   (2005-11-01 14:37:00) [3]

Не совсем так. когда я нажимаю левую кнопку мыши то в массив CrossArr в место, которое соответствует ячейке грида где нажата кнопка, заносится 1.
При перерисовке грида (OnDrawCell) берется значение из массива и если 1 то закрашиваем.
видимо при быстром перемещении курсора в нажатом состоянии числа не успевают заносится. в сзвязи с этим получаются пробела при закрашивании ячейки.
От этого мне и надо избавится :(


SaF22   (2005-11-01 14:02:00) [4]

Короче, насколько я понял ты хочешь чтобы выделенные ячейки закрашивались красным цветом? тогда вот:

Unit...

interface

uses
....

type
 TDrawCellEvent=procedure (Sender: TObject; ACol, ARow: Longint; Rect: TRect; State: TGridDrawState) of object;
....
procedure Draw(Sender: TObject; ACol, ARow: Longint; Rect: TRect; State:TGridDrawState);
....
implementation  
{$R *.dfm}
.....
procedure TMDIChild.Draw(Sender: TObject; ACol, ARow: Longint; Rect: TRect; State:TGridDrawState);

begin
 stringgrid1.Canvas.Brush.Color:=clRed;
 if gdselected in state then StringGrid1.Canvas.FillRect(rect);
end;

и эту процедуру назначешь на событие OnDrawCell  в свойствах stringGrid

Если что не так, то пиши


Dush   (2005-11-01 13:53:00) [5]

С нажатой. А это принципиально?


Dush   (2005-11-01 13:46:00) [6]

Прошу прощения что сразу не показал ее. Вот она:
Procedure DrawArr(X,Y:integer);
var CellCoord:TGridCoord;
begin
 try
   CellCoord:=SgCross.MouseCoord(X,Y);
   MyCol:=CellCoord.X;
   MyRow:=CellCoord.Y;
   if (Pressed) then
   begin
     if MButton=mbLeft then CrossArr[MyRow,MyCol]:=1
     else CrossArr[MyRow,MyCol]:=0;
   end;
   SgCross.Col:=CellCoord.x;
   SgCross.Row:=CellCoord.y;
   SgCross.Invalidate;
 except
 end;
end;


SaF22   (2005-11-01 13:43:00) [7]

Так ты с нажатой кнопкой мыши закрашиваешь или без?


Dush   (2005-11-01 13:41:00) [8]

CrossArr - масив размерностью [0..RowCount-1,0..ColCount-1] в который заносятся "1" если нажата левая кнопка мыши.


SaF22   (2005-11-01 13:41:00) [9]

Я так понимаю, что есть еще и процедура вычисляющая полет курсора над стрингом?


Dush   (2005-11-01 13:34:00) [10]

Пожалуйста:
procedure TMDIChild.sgCrossDrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
{Заливка ячеек}
 if (ACol>=0) and (ARow>=0) then
 begin
   IF (CrossArr[ARow,ACol]=1) Then sgCross.Canvas.Brush.Color:= clRed;
   sgCross.Canvas.FillRect(Rect);
 end;
end;


SaF22   (2005-11-01 13:30:00) [11]

Покажи код процедуры в которой ты закрашиваешь ячейки.


Наверх

Титульная страница Поиск, карта сайта Написать письмо