Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Tdrawgrid 
V
    Опции темы
svarogik
Дата 25.7.2006, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



у меня в с помощью объекта TdrawGrid и матрицы прорисовывается карта, но при прокрутке объекта начинает глючить, и не рисует то что за экраном, вместо нужных картинок вообще ничего не прорисовывает. прорисовка на событии onDrawcell

Добавлено @ 22:15 
 alexeis1 надеюсь на твою помощь, ты помнишь, что ты мне советовал?

Добавлено @ 22:16 
вот первый том 

Присоединённый файл ( Кол-во скачиваний: 39 )
Присоединённый файл  Map_Editor.part1.rar 117,19 Kb
PM MAIL   Вверх
svarogik
Дата 25.7.2006, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



вот второй, прокручивайте и увидите ошибку 

Присоединённый файл ( Кол-во скачиваний: 39 )
Присоединённый файл  Map_Editor.part2.rar 108,71 Kb
PM MAIL   Вверх
Snowy
Дата 25.7.2006, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



А он и не должен рисовать "за экраном"
Рисуется только видимая в данный момент область. 
PM MAIL   Вверх
svarogik
Дата 25.7.2006, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ты скачай и посмотри, я понимаю что за экраном не должен, но когда я прокручиваю в область которая невидима, она становится видимой, но на ней все равно ничего не рисуется 
PM MAIL   Вверх
Snowy
Дата 25.7.2006, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Код отрисовки давай.
Видимо что-то напутано с координатами. 
PM MAIL   Вверх
svarogik
Дата 26.7.2006, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

procedure TEditor.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
  var r : Trect;
begin
  {r := DrawGrid1.CellRect(ACol, ARow);}

  {DrawGrid1.Canvas.brush.color := matrix[ACol, ARow];}

   if netprs then
   begin;
   p1:=ACol;
   p2:=ARow;
   end else
   begin
   p1:=0;
   p2:=0;
   END;

   if not zoom then
   ImageList2.Draw(DrawGrid1.Canvas,(ACol*drawgrid1.DefaultColWidth+p1), ARow*drawgrid1.DefaultRowHeight+p2,matrix[Acol,Arow])
   else
     ImageList3.Draw(DrawGrid1.Canvas,(ACol*drawgrid1.DefaultColWidth+p1), ARow*drawgrid1.DefaultRowHeight+p2,matrix[Acol,Arow]);


   {DrawGrid1.Canvas.FillRect(r);}


  {DrawGrid1.Canvas.FillRect(r);}


end;


во, переменные netprs,p1,p2 нужны для того чтоб при прорисовке учитывалась ширина и длина сетки

Добавлено @ 10:20 
Код

procedure TEditor.DrawGrid1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);

  begin
if mousepressed {and(}  then
begin
  if ((x<  DrawGrid1.ColCount*drawgrid1.DefaultColWidth+p1)and (x>0)){DrawGrid1.left)} and
 ((y<DrawGrid1.rowCount*drawgrid1.DefaultrowHeight+p2) and (y>0)){DrawGrid1.top)} then
 begin
  drawgrid1.MouseToCell(X, Y, Col, Row);
  matrix[Col, Row] := brusch;
  end;


  end;

  
end;

еще вот 
PM MAIL   Вверх
Alexeis
Дата 26.7.2006, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



svarogik, я и без кода вижу, что не возникает события onDrawCell
при прокрутке, а это уже какой-то баг в компоненте. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
svarogik
Дата 26.7.2006, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



я это тоже вижу, но мне бы хотелось чтоб возникал, что нибудь сделать можно? 
PM MAIL   Вверх
Alexeis
Дата 26.7.2006, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Я ошибся это ошибка где-то в коде прорисовки smile 
Вот простой пример, который отлично работает при прокрутке, и при этом ничего не стирается, а прокрученные ячейки нормально обновляются
Код

procedure TForm1.drwgrd1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
  var r : Trect;
begin
  r := drwgrd1.CellRect(ACol, ARow);
  drwgrd1.Canvas.brush.color := clGreen;
  drwgrd1.Canvas.FillRect(drwgrd1.CellRect(ACol, ARow));
end;


Добавлено @ 10:47 
В чем смысл?
Код

  if netprs then
   begin;
   p1:=ACol;
   p2:=ARow;
   end else
   begin
   p1:=0;
   p2:=0;
   END;


Добавлено @ 10:49 
Цитата(svarogik @  26.7.2006,  10:14 Найти цитируемый пост)
(ACol*drawgrid1.DefaultColWidth+p1)

Зачем таким жутким образом считать координаты точки! Есть же значения r.Top и значение r.Left?
 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
svarogik
Дата 26.7.2006, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



я знаю про все это, пока просто не исправил, тут дело в другом, у тебя рисуются просто квадратики цветные, а у меня картинки

Добавлено @ 10:55 
Код

drwgrd1.Canvas.FillRect(drwgrd1.CellRect(ACol, ARow));


Зачем?
Код

drwgrd1.Canvas.FillRect(r);



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


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Не имеет значения, что рисовать.
Ты просто неправильно считаешь координаты.
И не так считаешь.
И незачем их вообще считать - тебе уже всё дано. 
PM MAIL   Вверх
svarogik
Дата 26.7.2006, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

r := drwgrd1.CellRect(ACol, ARow);


а можно чтоб было так, и в этот квадратик рисовалась картинка из ImageList?

Добавлено @ 11:09 
Код

ImageList2.Draw(DrawGrid1.Canvas,(r.left+p1), r.top+p2,matrix[Acol,Arow]);

я вот так сделал, но из-за того что сеточка обладает собственной шириной у меня чем дальше от верхнего левого угла, тем дальше в каждой клеточке рисуется картинка  
PM MAIL   Вверх
Alexeis
Дата 26.7.2006, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Вот и с рисунком
Код

procedure TForm1.drwgrd1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
  var r : Trect;
begin
  r := drwgrd1.CellRect(ACol, ARow);
  iL1.Draw(drwgrd1.Canvas, r.Left, r.Top,0);
end;
 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
svarogik
Дата 26.7.2006, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



круто, спасибо 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


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

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


 




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


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

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