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

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

Подскажите плз как убрать выделение ячейки у StringGrid


Страницы:   1 2

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;


Страницы:   1 2

Наверх

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