Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка в StringGrid, По содержанию одной ячейки 
:(
    Опции темы
RN3QGA
Дата 2.12.2005, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 28.11.2005
Где: Воронежская обл.

Репутация: нет
Всего: нет



Здравствуйте!
Вопрос таков.
Есть String Grid с занесенными данными.
Нужно, что бы по выбору ячейки её данные сравнивались с остальными ячейками таблицы
и если есть совпадения, то выделялись цветом.
Я решил через событие OnSelectCell, и использовал для сравнения IndexOff.
Получилось, что при клике на ячею, если данные совпадают, то к примеру beep если нет, то ничего. Но вот как подкрасить остальные содержащие одинаковую инфу, тут у меня загвоздочка....
Спасибо!
PM MAIL   Вверх
FRAGNATIC
Дата 2.12.2005, 03:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


Профиль
Группа: Участник
Сообщений: 901
Регистрация: 17.10.2004
Где: ICQ

Репутация: нет
Всего: 11



а подкрашивать надо на OnDrawCell =)
Добавлено @ 03:16
Код

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  if (gdFocused in State) then
  begin
    StringGrid1.Canvas.Brush.Color := clBlack;
    StringGrid1.Canvas.Font.Color := clWhite;
  end
  else
    if ACol = 2 then 
      StringGrid1.Canvas.Brush.color := clGreen
    else
      StringGrid1.canvas.brush.Color := clRed;

  if (ACol > 0) and (ARow > 0) then
  begin
    StringGrid1.Canvas.FillRect(Rect);
    StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
  end;
{
if StringGrid1.Cells[ACol, ARow] = 'highlight it' then
  StringGrid1.Canvas.Brush.color := clred
else
  StringGrid1.canvas.brush.Color := clWhite;
}
end; 


PM MAIL   Вверх
RN3QGA
Дата 2.12.2005, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 28.11.2005
Где: Воронежская обл.

Репутация: нет
Всего: нет



Добрый день!
Да, я пробывал по OnDrawCell доже код похожий, получалось только
при клике подкрашивать ячейку которая в фокусе, а мне нужно,
чтобы все ячейки подкрашивались с одинаковыми значениями.
Вот уже второй день пытаюся но, что-то не выходит, если есть какието мысли то будте так добры помогите.
Спасибо .


PM MAIL   Вверх
Демо
Дата 2.12.2005, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 2
Всего: 50



Так в OnSelectCell создай динамический массив номеров ячеек, который нужно закрасить, а в OnDrawCell проверяй содержимое массива и закрашивай нужные ячейки.


--------------------
    
PM MAIL ICQ Skype   Вверх
RN3QGA
Дата 2.12.2005, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 28.11.2005
Где: Воронежская обл.

Репутация: нет
Всего: нет



А, если данные постоянно меняются (изменяется содержимое, удаляются или прибавляются строки???

PM MAIL   Вверх
_hunter
Дата 2.12.2005, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: нет
Всего: 98



ну так данные ж не сами-по себе меняются. после смены данных пересоздавай тот массив...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
RN3QGA
Дата 2.12.2005, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 28.11.2005
Где: Воронежская обл.

Репутация: нет
Всего: нет



Да, кажется понял! Сасибо !
PM MAIL   Вверх
RN3QGA
Дата 2.12.2005, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 28.11.2005
Где: Воронежская обл.

Репутация: нет
Всего: нет



Нет, видимо "недорос" я еще.
Если можно пример скодом, а то в конец запутался!
Спасибо . smile
PM MAIL   Вверх
FRAGNATIC
Дата 2.12.2005, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


Профиль
Группа: Участник
Сообщений: 901
Регистрация: 17.10.2004
Где: ICQ

Репутация: нет
Всего: 11



ну тип так
Код

 if (ACol = 3) and (ARow = 5) then    //тута значения из масива подставляй(номер крлонки и ряда) или ещё чё ну там типа  in[] 
  begin    
    StringGrid1.Canvas.FillRect(Rect);    
    StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);    
  end;    
//а можешь тут сразу уже значение которое надо подкрасить тоест highlight it если это в поле то тогда оно будет подкрашено )    
if StringGrid1.Cells[ACol, ARow] = 'highlight it' then    
  StringGrid1.Canvas.Brush.color := clred    
else    
  StringGrid1.canvas.brush.Color := clWhite;    



Это сообщение отредактировал(а) FRAGNATIC - 2.12.2005, 15:12
PM MAIL   Вверх
RN3QGA
Дата 2.12.2005, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 28.11.2005
Где: Воронежская обл.

Репутация: нет
Всего: нет



Спасибо огромное буду разбираться!
PM MAIL   Вверх
RN3QGA
Дата 3.12.2005, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 28.11.2005
Где: Воронежская обл.

Репутация: нет
Всего: нет



Добрый день или ночь.
Ну я в конец запутался с массивами,
Уважвемые профессионалы, будте уж так любезны если не затруднит
ну пришилите рабочий пример кода если можно, а то никак ...
Простите уж...
smile smile smile
PM MAIL   Вверх
FRAGNATIC
Дата 3.12.2005, 04:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


Профиль
Группа: Участник
Сообщений: 901
Регистрация: 17.10.2004
Где: ICQ

Репутация: нет
Всего: 11



RN3QGA
а те как нужно
1 - тока одно выделение
тоесть по клику выделяются все ячеки у которых тоже значение что и у той по кторой ты кликнул (тогда покатит
Код

if StringGrid1.Cells[ACol, ARow] = 'highlight it' then     
  StringGrid1.Canvas.Brush.color := clred    

2 - по клику выделяются все ячеки у которых тоже значение что и у той по кторой ты кликнул , но при этом когда кликаешь по другой ячейке выделяются все ячеки у которых тоже значение что и у той по кторой ты кликнул при том что выделения от прошлого клика остаются =)
???

PM MAIL   Вверх
RN3QGA
Дата 3.12.2005, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 28.11.2005
Где: Воронежская обл.

Репутация: нет
Всего: нет



Добрый день.
Ну я наверное уже замучил своими как мне кажется уже самому глупыми вопросами.
В общем попробую описать поподробней, что мне нужно.
У меня в проге Грид который стринг.
В него заносятся позывные радиостанция, сохраняются если надо удаляются, редактируются.
Так вот хочу ввести режим выборки, то есть
кликаем по позывному занесенному в 3-ю колонку независимо от местоположения (ну в начале или в конце талицы) и во всей таблице если есть совпадения - аннологичные подкрашиваются.
Я добился, что подкрашивается только та ячейка в которой собственноговоря и кликаю, дальше застрял. И уже не знаю, может както по другому пути пойти, ну например вводить сначала в Едит илитам еще куда нибудь, а потом искать по таблице и сравнивать, но этот вариант не совсем удобен для практического использования при работе. Вот такая ситуация Посоветуйте, подскажите и извините за назойливость, только начинаю , ну думаю должно получиться.
Спасибо всем.
PM MAIL   Вверх
FRAGNATIC
Дата 3.12.2005, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


Профиль
Группа: Участник
Сообщений: 901
Регистрация: 17.10.2004
Где: ICQ

Репутация: нет
Всего: 11



RN3QGA
да уже слышал это
и код давал
если не работает и не выходит
то может код выложишь которым ты пытаешся подкрасить?
PM MAIL   Вверх
RN3QGA
Дата 4.12.2005, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 28.11.2005
Где: Воронежская обл.

Репутация: нет
Всего: нет



Добрый день ночь или что там уже!
Я мучал , мучал и вот, что придумал, так все работает, но я хотел, что бы по клику на ячее
но впрочем вы все уже читали выше !
Посмотрите вам как профи я думаю, тут пояснения не нужны ( сравниваю С ComboBox.Text) smile .

var
Gr:TGridRect;
begin
if (Form1.SpeedButton6.Caption='Закончить выборку')AND(Form1.ComboBox4.Text<>'') then
if StringGrid1.Cells[Acol,Arow]=Form1.ComboBox4.Text then
begin
StringGrid1.Canvas.Brush.color :=clGreen ;
StringGrid1.Canvas.Font.Color := clWhite ;
StringGrid1.Canvas.FillRect(Rect);
StringGrid1.canvas.TextOut(Rect.Left,Rect.Top,StringGrid1.Cells[ACol,ARow]);
Gr.Left:=2;
Gr.Top:=1;
Gr.Right:=2;
Gr.Bottom:=StringGrid1.RowCount;
StringGrid1.Selection:=Gr;
end
else
begin
StringGrid1.Canvas.Brush.color := clBlack ;
end;
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0530 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.