Главная страница
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
3-1129003870
k2
2005-10-11 08:11
2005.11.20
Oracle9. ORA-03113


2-1130857904
md
2005-11-01 18:11
2005.11.20
типы extended и integer


2-1129298643
Zaletchik
2005-10-14 18:04
2005.11.20
Помогите с бинарными файлами.


2-1130862793
KorvinOE
2005-11-01 19:33
2005.11.20
Кодировка


4-1126897036
Dot
2005-09-16 22:57
2005.11.20
слушать порт WinSocks