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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объект TdrawGrid 
:(
    Опции темы
svarogik
Дата 19.7.2006, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

 procedure TCanvas.Draw(X, Y: Integer; Graphic: TGraphic);

 
 



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


и можно ли как нибудь сделать вроде imagelist тоесть в зависимости от условий загружается определенная картинка

чтото вроде

Код

Canvas.Draw(X, Y: Integer; image[1]);
или
Canvas.Draw(X, Y: Integer; image[2]);



Добавлено @ 21:36 
Разумеется все в объекте TdrawGrid 
Код

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];
  DrawGrid1.Canvas.Draw(ACol,ARow, Graphic: TGraphic);
  {DrawGrid1.Canvas.FillRect(r);}


end;


сначало было то что в фигурных скобках 
PM MAIL   Вверх
Alexeis
Дата 19.7.2006, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



метод draw рисует любые изображения, на любом канвасе, поэтому в качестве параметра принимает TGraphic - т.е. предка всех изображений.
В VCL существуют 4 стандартных класса изображения
1) TBitmap
2) TIcon
4) TJpegImage
5) TMetaFile 

обычно сначала создают изображение.
Код

var
  bmp : TBitmap;
Begin
  bmp := TBitmap.Create;


Затем его грузят либо из файла
Код

  bmp.loadfromFile('my.bmp');

либо из потока
Код

  bmp.loadfromstream(<любой поток>);

либо рисуют на канве битмапа
Код

  bmp.width := 100;
  bmp.height := 100;
  bmp.canvas.lineto(50, 50);

Чтобы нарисовать изображение (картинку) на канве вызываем
Код

 canvas.Draw(10, 10, bmp);

В результате на канве появится изображение левый верхний угол которого будет иметь координаты 
X = 10, Y = 10

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


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

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

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


Бывалый
*


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

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



а что такое поток, это сетевой чтоли? 
PM MAIL   Вверх
Alexeis
Дата 19.7.2006, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Компонент TImageList находится на палитре Win32
Код

  ImageList1.ImageType := itImage; //используем изображения без маски
  ImageList1.Height := 16; //указывем высоту изображений
  ImageList1.Width := 16;  //указывем ширину изображений
  ImageList1.Add(<bitmap>); //добавление в колекцию 
  ImageList1.AddIcon(<icon>);

для отрисовки любого изображения из колекции достаточно вызвать метод Draw ImageList
Код

 ImageList1.Draw(DrawGrid1.Canvas, 10, 10, index)
 
где index - номер картинки в колекции. 

Это сообщение отредактировал(а) alexeis1 - 19.7.2006, 22:35


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

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

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


Бывалый
*


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

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



к чему обращается эти методы  DrawGrid1.Canvas.brush.color, что вообще это делает 
PM MAIL   Вверх
Alexeis
Дата 19.7.2006, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(svarogik @  19.7.2006,  22:25 Найти цитируемый пост)
а что такое поток,

Потоком назывют класс инкапсулирующий в себе данные и методы их обработки
Например:
TFileStream
TMemoryStream
TResourceStream
Потоки черезвычайно удобны для загрузки и передачи данных.

Добавлено @ 22:41 
Цитата(svarogik @  19.7.2006,  22:33 Найти цитируемый пост)
к чему обращается эти методы  DrawGrid1.Canvas.brush.color, что вообще это делает 

Это свойство устанавливает цвет кисти
Кисть в Windows используется для закраски различных поверхностей.
Устанавливая ее параметры мы меняем свойства заливки (цвет, текстура)

Добавлено @ 22:42 
Код

DrawGrid1.Canvas.FillRect(r);

например заливает прямоугольник используя кисть - т.е. ее цвет и т.д.  

Это сообщение отредактировал(а) alexeis1 - 19.7.2006, 22:44


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

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

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


Бывалый
*


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

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



 а мне чем imagelist поможет, как мне отрисовывать с помощью него в каждой клетке
Код

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

  DrawGrid1.Canvas.brush.color := matrix[ACol, ARow];
  case matrix[Acol,Arow] of
  1:DrawGrid1.Canvas.Draw(ACol,ARow,trava);

  end;


я вот так пробовал как ты мне советовал, но он почемуто в левой верхней ячейке рисует, вместо выбранной ячейки 
PM MAIL   Вверх
Alexeis
Дата 19.7.2006, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(svarogik @  19.7.2006,  22:45 Найти цитируемый пост)
1:DrawGrid1.Canvas.Draw(ACol,ARow,trava);

Сейчас в мерод Draw передаются номер строки и номер столбца, а надо координаты его левого верхнего угла.

Добавлено @ 23:00 
Цитата(svarogik @  19.7.2006,  22:45 Найти цитируемый пост)
 как мне отрисовывать с помощью него в каждой клетке

Для начала в него надо загрузить изображение (в одном могут быть сразу много - в этом случае они должны распологаются слева направо, сверху вниз)


Уже писал
Цитата(alexeis1 @  19.7.2006,  22:32 Найти цитируемый пост)

 ImageList1.Draw(DrawGrid1.Canvas, 10, 10, index)

где вместо 10, 10 нужно писать координаты левого верхнего угла
index - номер изображения 


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

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

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


Бывалый
*


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

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



не хочу показаться совсем уж чайником, я ведь сам знал, не знаю почему спросил, все таки я не совсем безнадежен

Добавлено @ 23:06 
да вот еще, почему когда я в пустоту щелкаю, у меня ошибка вылезает, как бы это исправить?, тоесть когда я щелкаю туда, где нет сеточек компонента TdrawGrid он обрабатывает событие OnMouseDown и пытается присвоить matrix непонятно с какими индексами, непонятно какие цифры, Тоеть вопрос в том что сделать, чтоб он не возникал когда щелкаю в пустоту на объекте TdrawGrid 
PM MAIL   Вверх
Alexeis
Дата 19.7.2006, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Вставиить в начало обработчика строку
Код

if (x > DrawGrid1.GridWidth) or  (x < 0) or (y > DrawGrid1.GridHeight)  or  (y < 0)
then
  exit;

Если мышью кликнули в вне зоны сетки, то exit - осуществит выход из обработчика 


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

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

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


Бывалый
*


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

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



нет ты не понял, не вне обьекта а внутри него, но там где нет сетки, тоесть в том случае если размер объекта на форме, превышает внутренние размеры объекта

Добавлено @ 23:25 
но в любом случае это ерунда, он не так уж сильно возникает, не трудись, спасибо тебе. ЛУчше ответь на вопрос, ты вцелом помнишь, что прога делает и мне надо чтоб я нажал кнопку мыши и мог водить и врисовывать в клеточки рисунки, пока кнопку мыши не отпустил, а когда отпустил перестать, тоеть едакий затяжной клик

Добавлено @ 23:27 
alexeis1 послушай я могу тебя както отблагодарить, там репутацию поднять, или еще чтото? 
PM MAIL   Вверх
Alexeis
Дата 19.7.2006, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(svarogik @  19.7.2006,  23:21 Найти цитируемый пост)
нет ты не понял, не вне обьекта а внутри него, но там где нет сетки, тоесть в том случае если размер объекта на форме, превышает внутренние размеры объекта

Так вроде DrawGrid1.GridWidth - и есть размер только сетки.
DrawGrid1.Width - это размер всего грида с полями.

Если не работает, надо поискать что-то типа ClientRect, т.е. только рабочая область.

Цитата(svarogik @  19.7.2006,  23:21 Найти цитируемый пост)
там репутацию поднять, или еще чтото? 

только когда будет 100 постов smile 

 


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

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

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


Бывалый
*


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

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



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


Амеба
Group Icon


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

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



можно использовать событие  OnMouseMove
В него также передаются кооодинаты мыши.
Однако необходимо проверить была ли нажата левая кнопка мыши
для этого в обработчике onMousedown, надо какой нибудь глобальной переменной (напимер var fl : boolean = false;) присвоить true, а в обработчике onMouseUp присвоить false.
В этом случае надо в OnMouseMove поставить условие
Код

if fl
then
  Begin
    ...........
  end;

 


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

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

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


Бывалый
*


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

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



Ага понятно., смотри я в обьект вставляю картинки, из имайж листа, все прикольно, только картинки, несмотря на свой размер всегда меньше ожидаемого в 4-5 раз, картинка клетку заполняет всегда не полностью, сначала я сделал картинку 40Х40, она не заняла весь обьем клетки объекта, потом сделал 100Х100, она заняла тот же объем, не понимаю  почему рисуемые картинки всегда одного размера??

Добавлено @ 12:53 
ив кнопках тоже самое, вместо больших картинок втавляются мелкие 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

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

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

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

FAQ раздела лежит здесь!


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

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


 




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


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

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