Підкажіть плз як прибрати виділення комірки у stringgrid

Підкажіть плз як прибрати виділення комірки у StringGrid

Автоматично синім кольором виділяється елемнтов таблиці StringGrid [0,0]
Якщо потім клікнути мишкою на таблицю. то виділення синім кольором пропадає.
Як прибрати виділення синім кольором при запуску Stringgrid?

Так забув сказати фіксованих елементів немає.

Ось нашед властивість goDrawFocusSelected поточна комірка позначається кольором. Колеги як прибрати це св-во?

Я так зрозумів цього св-ву потрібно присвоїти статус False
Який там синтаксис?
StringGrid1.Options: = [goDrawFocusSelected: = false];

StringGrid1.Options.goDrawFocusSelected: = false; так теж не виходить

Хоч би відповів котенята. що дурницю запитав?


> StringGrid1.Options: = [goDrawFocusSelected: = false];

І що за подібне компілятор тебе не вилаяв.
Options це безліч. Операції над множинами описані в довідці і відносяться до базових понять мови.


> smartleds # XA0; (07.12.07 18:32)
>
> Автоматично синім кольором виділяється елемнтов таблиці StringGrid [0,
> 0]
> Якщо потім клікнути мишкою на таблицю. то виділення синім
> Кольором пропадає.
> Як прибрати виділення синім кольором при запуску Stringgrid?
>
>

хз. Я простих способів не знайшов.


> # XA0; TabOrder = 0

Не допомагає. До речі кількість FixedXX не грає рояля.

ЗИ А TabOrder - я його не чіпав, він "випадково" в ДФМ потрапив, так як у цієї властивості дефолт -1, а в ІС воно змінюється (мінімум 0)

Дякуємо, але на жаль не допомогло.
А проблема така. більш детально.
Дійсно коли малюється Грід все осередки білі, і осередок з координатами [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
# XA0; For j: = 0 to 31 do
# XA0; begin
StringGrid1.Cells [j, i]: = inttostr (k);
# XA0; k: = k + 1;
# XA0; end;

Так використовую D7

> [13] smartleds # XA0; (07.12.07 23:45)
> [14] smartleds # XA0; (07.12.07 23:45)

procedure TForm1.FormCreate (Sender: TObject);
var i, j, k: Integer;
begin
# XA0; StringGrid1.ColCount: = 32;
# XA0; StringGrid1.RowCount: = 8;
# XA0; StringGrid1.DefaultColWidth: = 20;
# XA0; StringGrid1.DefaultRowHeight: = 20;
# XA0; StringGrid1.FixedCols: = 0;
# XA0; StringGrid1.FixedRows: = 0;
# XA0; k: = 1;
# XA0; for i: = 0 to 7 do
# XA0; # XA0; For j: = 0 to 31 do
# XA0; # XA0; begin
# XA0; StringGrid1.Cells [j, i]: = inttostr (k);
# XA0; # XA0; k: = k + 1;
# XA0; end;
end;

procedure TForm1.StringGrid1DrawCell (Sender: TObject; ACol, ARow: Integer;
# XA0; Rect: TRect; State: TGridDrawState);
begin
# XA0; if gdSelected in State then
# XA0; with TStringGrid (Sender), TStringGrid (Sender) .Canvas do begin
# XA0; # XA0; Brush.Color: = clWhite;
# XA0; # XA0; FillRect (Rect);
# XA0; # XA0; TextRect (Rect, Rect.Left + 2, Rect.Top + 2, Cells [ACol, ARow]);
# XA0; end;
end;

> Brush.Color: = clWhite;

Цей рядок краще заміни на:
Brush.Color: = Color;
Якщо заплутався з with то ось без нього:
if not Sender is TStringGrid then Exit; // але і з with теж потрібно перевірку робити
if gdSelected in State then begin
# XA0; TStringGrid (Sender) .Canvas.Brush.Color: = Color;
# XA0; TStringGrid (Sender) .Canvas.FillRect (Rect);
# XA0; TextRect (Rect, Rect.Left + 2, Rect.Top + 2, TStringGrid (Sender) .Cells [ACol, ARow]);
end;

> TStringGrid (Sender) .Canvas.Brush.Color: = Color;

Ну звичайно ж
TStringGrid (Sender) .Canvas.Brush.Color: = TStringGrid (Sender) .Color;
Я вже сам заплутався :)

> 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 це компактніше :)

Що то не працює. все одно виділена комірка синім виділяється при натисканні будь-якої кнопки.
Може взагалі заборонити виділення мишкою будь-якої комірки?

> [19] smartleds # XA0; (08.12.07 00:11)
> Що то не працює. все одно виділена комірка синім виділяється
> При натисканні будь-якої кнопки

Не може бути. В даному прикладі я взагалі виділення прибрав.

> [19] smartleds # XA0; (08.12.07 00:11)

Або тобі і ФокусРект теж заважає.
Тоді StringGrid.DefaultDrawing = False і малюю грід так як тобі заманеться.

Вставив 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
# XA0; For j: = 0 to 31 do
# XA0; begin
StringGrid1.Cells [j, i]: = inttostr (k);
# XA0; k: = k + 1;
# XA0; end;
end;
Грід порожній текстом не заповнений

> [22] smartleds # XA0; (08.12.07 00:22)
> Вставив StringGrid1.DefaultDrawing: = false;

DefaultDrawing - це не просто так. це говорить про те, що повністю (!) висновок гріда лежить на совісті програміста
Тобто тут вже потрібно враховувати всі і вся за винятком самої сітки, вона помоему малюється ґрідом.
Так ось виставивши ця властивість в брехню, ти тепер повинен сам малювати і фон комірки і вміст (текст).
враховуючи стан осередку, в цьому допоможе параметр State. Це добре у тебе немає фіксованих осередків, а то і їх довелося б малювати "вручну".
Ще раз. перевір код в [15]. можливо ти не підключив обробник ОнДравКелл.

Не всі правильно, виділення осередків немає, тільки синім автоматично виділяється осередок яка попередньо виділена мишкою в рамці.
А ті осередки хоторие я хотів виділити червоним не виділяються.
Може як то заборонити виділяти осередки в рамку мишкою? Тому що потім при натисканні будь-якої кнопки ця виділена в рамку осередок стає синьою. Код [15] перевіряв два рази не виділяється тільки ті осередки які я сам хочу виділити.

Що цікаво, намалював грід бачу нульова комірка виділена в рамку, тисну кнопку
procedure TForm2.Button3Click (Sender: TObject);
var i: integer;
begin
i: = 0;
end;
Вона ставати синьою. тисну мишкою на осередок. синява пропадає. але залишається виділена в рамку, тисну на сусідню ячеку. вона становімться виділеної в рамку. тисну на кнопку. тепер ця сусідня комірка ставати синьою. Як позбутися від цього, щоб цей грід став тільки способом відображення інформації. і не на якісь дейчтвія мишкою не реагував?

> [27] smartleds # XA0; (08.12.07 01:17)

А ось тепер зроби як в [15] і все працює. ) Я не шуткую)
У тебе не спрацьовує умова
if # XA0; (onezero512 [index]> 0) then
# XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; begin
.
end;
Чому? Сам розбирайся. )
Ну і відповідно той шматок коду з [15] який знаходиться в then begin. end "в прольоті". звідси і всі твої біди)
Чому б відразу не перевірити код на новому порожньому проект без зайвих рядків коду. Давно б зрозумів в чому справа. )
Хай щастить)

> [30] smartleds # XA0; (08.12.07 01:34)

У тебе всюди перевірка елементів цього (onezero512) масиву, але ніде немає його наповнення, тобто всі елементи масиву містять 0.
Звідси в TForm2.StringGrid1DrawCell, перевірка елемента масиву з будь-яким індексом, провалена і код "стирання синього виділення" - не виконується :(

Цей масив наповнюється при натисканні кнопки insert DMX Channel. елементи цього масиву або 0 або 1, якщо 1 то канали вважаються зайнятими, і на грід ці канали повинні бути виділені червоним, щоб юзер знав що у нього зайнято. а що немає.
Масив містить 256 байт за кількістю осередків.

Пам'ять: 0.79 MB
Час: 0.043 c

Схожі статті