Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2012, 21:59   #1
oleg_498
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 11
По умолчанию Добавление иконок в StringGrid

Имеется StringGrid, так же есть 4 иконки (.ico), помещенные в ImageList.
Необходимо заполнить иконками StringGrid, а так же в дальнейшем суметь понять какая из иконок находится в определенной ячейке.
oleg_498 вне форума Ответить с цитированием
Старый 21.09.2012, 22:05   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Необходимо заполнить иконками StringGrid
Рисуй их в событии OnDrawCell грида. Там для каждой ячейки будет и номера колонки строки и область отрисовки.
Примеры на форуме есть.
Цитата:
понять какая из иконок находится в определенной ячейке.
А каков критерий их отрисовки?
Можешь помещать в свойство Object[колонка, строка] указатель на отрисованную иконку. Тогда можно будет узнать какая иконка отрисована на канве ячейки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.09.2012, 22:08   #3
oleg_498
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 11
По умолчанию

Stilet, можно по подробнее? Bitmap у меня получается загружать, но с иконками по какой-то причине не выходит...
oleg_498 вне форума Ответить с цитированием
Старый 21.09.2012, 22:40   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А ты показывай как пробовал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.09.2012, 22:53   #5
oleg_498
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 11
По умолчанию

Код:
     
//...
  StringGrid1.Objects[aCol,aRow]:=TIcon.Create;
  ImageList1.GetIcon(i,(StringGrid1.Objects[aCol,aRow] as TIcon));
//...

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  If StringGrid1.Objects[ACol,ARow] is TIcon then
    with StringGrid1.Canvas do
    begin
      FillRect(Rect);
      Draw(Rect.Left,Rect.Top,TIcon(StringGrid1.Objects[ACol,ARow]));
    end;
end;
Быть может кто-нибудь хотя бы покажет как поместить в ячейку указатель на иконку?

Последний раз редактировалось Stilet; 22.09.2012 в 09:24.
oleg_498 вне форума Ответить с цитированием
Старый 22.09.2012, 08:28   #6
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Засунь все иконки в ImageList и рисуй им на канве ячейки Грида:

Код:
StringGrid1.Canvas.FillRect(Rect);
Imagelist.Draw(StringGrid1.Canvas,Rect.Left+(Rect.Right-Rect.Left-20) div 2,Rect.Top+(Rect.Bottom-Rect.Top-20) div 2,0);
Жирным я выделил номер иконки в имейджлисте - начинается с нуля.
На +,-, div - не обращай внимание, взял из одной свое проги, так я вычислял середину ячейки, чтоб не выводить иконку в углу.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 22.09.2012, 09:29   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Быть может кто-нибудь хотя бы покажет как поместить в ячейку указатель на иконку?
Где-то в программе ты назначаешь каждой ячейке номер иконки:
К примеру случайным образом разместить иконки:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var i,j:integer;
begin
Randomize;
with StringGrid1 do
 for i:=0 to RowCount-1 do
  for j:=0 to ColCount-1 do
   StringGrid1.Objects[i,j]:=TObject(Round(ImageList1.Count-1));
end;
Далее отрисовка
Код:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
 ImageList1.Draw(StringGrid1.Canvas,rect.Left,rect.Top,integer(StringGrid1.Objects[acol,arow]));
end;
Таким образом конструкция:integer(StringGrid1.Obj ects[acol,arow]) указывает номер иконки в списке.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.09.2012, 00:08   #8
oleg_498
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 11
По умолчанию

Всем спасибо! Попробую, отпишусь.
oleg_498 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
добавление в StringGrid Delphi mishel7916 Помощь студентам 2 13.12.2010 16:38
Добавление строк в StringGrid Asblue Помощь студентам 2 22.10.2010 23:21
Добавление строк в StringGrid Asblue Софт 4 22.10.2010 23:08
Добавление в StringGrid Andreyka Общие вопросы Delphi 5 20.01.2009 12:10
добавление строк StringGrid Alex_76 Помощь студентам 7 10.06.2008 15:17