Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.20;
Скачать: CL | DM;

Вниз

рисование на StringGrid   Найти похожие ветки 

 
Dush   (2005-11-01 12:23) [0]

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


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

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


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

Пожалуйста:
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;


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

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


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

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


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

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


 
Dush   (2005-11-01 13:46) [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;


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

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


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

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

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 14:37) [9]

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


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

Тогда попбробуй сделать следующее:
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-02 10:35) [11]

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



Страницы: 1 вся ветка

Текущий архив: 2005.11.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.04 c
6-1123011535
Михаил(Киров)
2005-08-02 23:38
2005.11.20
Socketы


2-1131200278
Dot
2005-11-05 17:17
2005.11.20
Поиск файлов


14-1130738720
Loginov Dmitry
2005-10-31 09:05
2005.11.20
Глюк


1-1130395821
VG
2005-10-27 10:50
2005.11.20
Диараммы в отчетах


2-1130606810
Del_programmer
2005-10-29 21:26
2005.11.20
canvas