![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите плз как убрать выделение ячейки у StringGrid
smartleds © (2007-12-07 18:32:00)Автоматически синим цветом выделяется элемнт таблицы StringGrid[0,0]
Если потом кликнуть мышкой на таблицу , то выделение синим цветом пропадает.
Как убрать выделение синим цветом при запуске Stringgrid?
smartleds (2007-12-08 01:52:00) [1]Этот массив наполняется при нажатии кнопки insert DMX Channel , элементы этого массива либо 0 либо 1, если 1 то каналы считаются занятыми, и на Гриде эти каналы должны быть выделены красным, чтобы юзер знал что у него занято , а что нет.
Массив содержит 256 байт по количеству ячеек.
{RASkov} (2007-12-08 01:43:00) [2]> [30] smartleds (08.12.07 01:34)
У тебя везде проверка элементов этого(onezero512) массива, но нигде нет его наполнения, т.е. все элементы массива содержат 0.
Отсюда в TForm2.StringGrid1DrawCell, проверка элемента массива с любым индексом, провалена и код "стирания синего выделения" - не выполняется :(
smartleds (2007-12-08 01:34:00) [3]Огромное спасибо!
{RASkov} (2007-12-08 01:32:00) [4]> [27] smartleds (08.12.07 01:17)
А вот теперь сделай как в [15] и все работает....) Я не шучу)
У тебя не срабатывает условие
if (onezero512[index]>0) then
begin
.....
end;
Почему? Сам разбирайся.... :)
Ну и соответственно тот кусок кода из [15] который находится в then begin .... end "в пролете"..... отсюда и все твои беды)
Почему бы сразу не проверить код на новом пустом проекте без лишних строк кода??? Давно бы сообразил в чем дело...)
Удачи)
{RASkov} (2007-12-08 01:18:00) [5]> [27] smartleds (08.12.07 01:17)
Ок. Сейчас гляну)
smartleds (2007-12-08 01:17:00) [6]Отправил.
{RASkov} (2007-12-08 01:02:00) [7]> [24, 25] smartleds (08.12.07 00:50)
Ну не знаю.... у меня все ОК)
Можешь тестовый проект с "проблемой" кинуть на почту cemvol2005(c)smtp.ru (c) - собака, гляну.... только код - без экзешника.
smartleds (2007-12-08 00:57:00) [8]Что интересно, нарисовал грид вижу нулевая ячейка выделена в рамку, жму кнопку
procedure TForm2.Button3Click(Sender: TObject);
var i:integer;
begin
i:=0;
end;
Она становиться синей , жму мышкой на ячейку , синева пропадает , но остается выделена в рамку, жму на соседнюю ячеку , она становимться выделенной в рамку , жму на кнопку , теперь эта соседняя ячейка становиться синей. Как избавиться от этого, чтобы этот грид стал только способом отображения инфы , и не на какие дейчтвия мышкой не реагировал?
smartleds (2007-12-08 00:50:00) [9]Не все правильно, выделения ячеек нет, только синим автоматически выделяется ячейка которая предварительно выделенна мышкой в рамке.
А те ячейки хоторые я хотел выделить красным не выделяются.
Может как то запретить выделять ячейки в рамку мышкой? Потому что потом при нажатии любой кнопки эта выделенная в рамку ячейка становится синей. Код [15] проверял два раза не выделяется только те ячейки которые я сам хочу выделить.
{RASkov} (2007-12-08 00:36:00) [10]> [22] smartleds (08.12.07 00:22)
> Вставил StringGrid1.DefaultDrawing:=false;
DefaultDrawing - это не просто так..... это говорит о том, что полностью(!) вывод грида лежит на совести программиста
Т.е. тут уже нужно учитывать все и вся за исключением самой сетки, она помоему рисуется гридом....
Так вот выставив данное свойство в ложь, ты теперь должен сам рисовать и фон ячейки и содержимое (текст)...
учитывая состояние ячейки, в этом поможет параметр State....Это хорошо у тебя нет фиксированных ячеек, а то и их пришлось бы рисовать "вручную"...
Еще раз... проверь код в [15]... возможно ты не подключил обработчик ОнДравКэлл...
smartleds (2007-12-08 00:22:00) [11]Вставил StringGrid1.DefaultDrawing:=false;
в инициализацию и текст пропал.
procedure TForm1.FormCreate(Sender: TObject);
var i,j,k: Integer;
begin
StringGrid1.ColCount:=32;
StringGrid1.RowCount:=8;
StringGrid1.DefaultColWidth:=20;
StringGrid1.DefaultRowHeight:=20;
StringGrid1.FixedCols:=0;
StringGrid1.FixedRows:=0;
k:=1;
StringGrid1.DefaultDrawing:=false;<<<<<<<<<<<<< Сюда вставил
for i:=0 to 7 do
For j:=0 to 31 do
begin
StringGrid1.Cells[j,i]:=inttostr(k);
k:=k+1;
end;
end;
Грид пустой текстом не заполнился
{RASkov} (2007-12-08 00:15:00) [12]> [19] smartleds (08.12.07 00:11)
Или тебе и ФокусРект тоже мешает???
Тогда StringGrid.DefaultDrawing = False и рисуюй грид так как тебе заблагорассудится....
{RASkov} (2007-12-08 00:13:00) [13]> [19] smartleds (08.12.07 00:11)
> Что то не работает , все равно выделенная ячейка синим выделяется
> при нажатии любой кнопки
Не может быть!!! В данном примере я вообще выделение убрал.....
smartleds (2007-12-08 00:11:00) [14]Что то не работает , все равно выделенная ячейка синим выделяется при нажатии любой кнопки.
Может вообще запретить выделение мышкой какой либо ячейки?
{RASkov} (2007-12-08 00:09:00) [15]> TextRect(Rect, Rect.Left+2, Rect.Top+2, TStringGrid(Sender).Cells[ACol, ARow]);
В общем понятно :) TextRect - это метод канвы грида)
т.е.
TStringGrid(Sender).Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, TStringGrid(Sender).Cells[ACol, ARow]);
все ж с with это компактнее :)
{RASkov} (2007-12-08 00:05:00) [16]> TStringGrid(Sender).Canvas.Brush.Color:=Color;
Ну конечно же
TStringGrid(Sender).Canvas.Brush.Color:=TStringGrid(Sender).Color;
Я уже сам запутался :)
{RASkov} (2007-12-08 00:04:00) [17]> Brush.Color:=clWhite;
Эту строку лучше замени на:
Brush.Color:=Color;
Если запутался с with то вот без него:
if not Sender is TStringGrid then Exit; //но и с with тоже нужно проверку делать
if gdSelected in State then begin
TStringGrid(Sender).Canvas.Brush.Color:=Color;
TStringGrid(Sender).Canvas.FillRect(Rect);
TextRect(Rect, Rect.Left+2, Rect.Top+2, TStringGrid(Sender).Cells[ACol, ARow]);
end;
{RASkov} (2007-12-07 23:59:00) [18]> [13] smartleds (07.12.07 23:45)
> [14] smartleds (07.12.07 23:45)
procedure TForm1.FormCreate(Sender: TObject);
var i,j,k: Integer;
begin
StringGrid1.ColCount:=32;
StringGrid1.RowCount:=8;
StringGrid1.DefaultColWidth:=20;
StringGrid1.DefaultRowHeight:=20;
StringGrid1.FixedCols:=0;
StringGrid1.FixedRows:=0;
k:=1;
for i:=0 to 7 do
For j:=0 to 31 do
begin
StringGrid1.Cells[j,i]:=inttostr(k);
k:=k+1;
end;
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if gdSelected in State then
with TStringGrid(Sender), TStringGrid(Sender).Canvas do begin
Brush.Color:=clWhite;
FillRect(Rect);
TextRect(Rect, Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
end;
end;
smartleds (2007-12-07 23:45:00) [19]Да использую D7
smartleds (2007-12-07 23:45:00) [20]Cпасибо, но к сожалению не помогло.
А проблема такая , более детально.
Действительно когда рисуется Грид все ячейки белые,и ячейка с координатами [0,0] выделенна в еле заметную рамку, но как только я нажимаю на любую кнопку на форме выделенная в рамку ячейка автоматически закрашивается в синий цвет. Причем выделить я могу мышкой любую ячейку или даже несколько, и все они окрашиваются в синий цвет. А ао кнопке ничего не делаю , даже создал пустую кнопку все равно она влияет.
procedure TForm2.Button3Click(Sender: TObject);
var i:integer;
begin
i:=0;
end;
А Грид проинициализирован так:
StringGrid1.ColCount:=32;
StringGrid1.RowCount:=8;
StringGrid1.DefaultColWidth:=20;
StringGrid1.DefaultRowHeight:=20;
StringGrid1.FixedCols:=0;
StringGrid1.FixedRows:=0;
form2.StringGrid1.TabOrder:=0;
StringGrid1.Options:=StringGrid1.Options-[goDrawFocusSelected];
k:=1;
for i:=0 to 7 do
For j:=0 to 31 do
begin
StringGrid1.Cells[j,i]:=inttostr(k);
k:=k+1;
end;