![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Бешеный StringGrid [D5, Win95/98, NT4]
NeVIP © (2004-08-19 22:42:00)Бодрый день мастера!
Появился такой баг : есть Грид, у него первая
колонка отведена под чекбоксы,
если значение грида в ячейке = 1
тогда рисуется отмеченный чекбокс,
если = 0, ессесно неотмеченный.
Так вот, при клике на любую ячейку из первой
колонны, присваивается инверсное значение и
рисуется чекбокс, это при StringGridOnClick,
вот код :
// Обработка нажатия на чекбох грида
if StringGrid.Col=1 then
begin
if StringGrid.Cells[1,StringGrid.Row]='1' then
StringGrid.Cells[1,StringGrid.Row]:='0'
else
StringGrid.Cells[1,StringGrid.Row]:='1';
end;
Код прорисовки чекбокса: StringGridDrawCell
// Прорисовка чекбохов
if ACol = 1 then
begin
if StringGrid.Cells[ ACol , ARow ] = '1' then
DrawFrameControl(TStringGrid(Sender).Canvas.Handle,Rect,DFC_BUTTON,DFCS_CHECKED);
if StringGrid.Cells[ ACol , ARow ] = '0' then
DrawFrameControl(TStringGrid(Sender).Canvas.Handle,Rect,DFC_BUTTON,DFCS_BUTTONCHECK);
end;
Проблема в том, что если я перемещаюсь по гриду ("выделенная ячейка"),
когда перемещаюсь по первому столбцу клавишами курсора, или колесом
прокрутки то енти долбанные чекбоксы инвертируються!!!! т.е. где
был отмеченный - "отметка" снимается и наоборот, т.е. происходит.
событие OnClick что-ли?!?!?! - брахмапутра какая-то!
Проверил с отключённой прорисовкой - тоже самое : Y=N, N=Y...
Как это лечить? перехватывать событие что мы крутим скролл или
жемём клавиши - незнаю :(
С уважением.
Алхимик (2004-08-19 23:17:00) [1]Вместо StringGridClick попробуй:
procedure TForm1.StringGridMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
ACol,ARow : integer;
begin
StringGrid.MouseToCell(x,y,ACol,ARow);
if ACol=1 then begin
if StringGrid.Cells[1,ARow]='1' then
StringGrid.Cells[1,ARow]:='0'
else
StringGrid.Cells[1,ARow]:='1';
end;
end;