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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как рисовать в координатах PaintBox'а, с использованием Windows GDI? 
:(
    Опции темы
S.A.G.
Дата 18.4.2007, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

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



Вот непомню что нужно сделать.. подскажите плиз буду очень признателен.


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
Snowy
Дата 18.4.2007, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Смотря что рисовать...
А вообще методы TCanvas - там всё написано.
PM MAIL   Вверх
S.A.G.
Дата 18.4.2007, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

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



Вообще будет ли оно рисовать? Что-то неполучаеться..
Код

dc:= GetDC(PaintBox1.Canvas.Handle)

Потом например:
Код

Rectangle(dc, 0, 0, PaintBox1.Width, PaintBox1.Height);

Ничего не рисует. Может на этом компоненте нельзя или я что-то не так делаю?

Добавлено через 8 минут и 17 секунд
В dc ничего нет.., 0..

Это сообщение отредактировал(а) S.A.G. - 18.4.2007, 17:04


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
Snowy
Дата 18.4.2007, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Canvas.Handle это и есть DC
Прям его и подставляй туда, где нужен DC, или так:
Код

  dc := PaintBox1.Canvas.Handle;
И дальше по сценарию...

Добавлено через 4 минуты и 37 секунд
Цитата(S.A.G. @  18.4.2007,  17:00 Найти цитируемый пост)
В dc ничего нет.., 0..
Естественно.
GetDC тут вообще не нужно - оно нужно, когда у тебя хэндл окна.
А в данном случае никакого хэндла окна нет. Потому GetDC и возвращает ошибку - ты скормил ему не окно.
Зато есть уже готовый DC. Его и юзать.
PM MAIL   Вверх
S.A.G.
Дата 18.4.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

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



Цитата
Потому GetDC и возвращает ошибку - ты скормил ему не окно.

 smile Оно схавало и не вернуло ошибку. Я помню что кормил что-то когда-то а что и кому непомню. Спасибо сейчас проверю.

Добавлено @ 17:24
Гм, я рисую квадрат в обработчике события - перерисовка пейнтбокса. Оно сразу не рисует а рисует буквально через раз или через два когда заставляю окно перерисоваться.. Незнаешь как с этим бороться?

Это сообщение отредактировал(а) S.A.G. - 18.4.2007, 17:25


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
Snowy
Дата 18.4.2007, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(S.A.G. @  18.4.2007,  17:20 Найти цитируемый пост)
Оно схавало и не вернуло ошибку.
0 - это и есть ошибка.
Расшифровка ошибки - GetLastError.

Цитата(S.A.G. @  18.4.2007,  17:20 Найти цитируемый пост)
Гм, я рисую квадрат в обработчике события - перерисовка пейнтбокса. Оно сразу не рисует а рисует буквально через раз или через два когда заставляю окно перерисоваться..
Естественно.
Ведь событие перерисовки происходит по необходимости, а не когда этого тебе хочется.
Если очень хочется раньше - вызывай Invalidate (Repaint). Но только не из кода метода перерисовки.

Добавлено через 7 минут и 9 секунд
Вот тестовый пример. Прекрасно работает:
Код

type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    procedure PaintBox1Paint(Sender: TObject);
  end;

var Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  RoundRect(PaintBox1.Canvas.Handle, 0, 0, PaintBox1.Width, PaintBox1.Height,
            PaintBox1.Width div 4, PaintBox1.Height div 4);
  RoundRect(PaintBox1.Canvas.Handle, PaintBox1.Width div 4, PaintBox1.Height div 4,
            PaintBox1.Width div 4 * 3, PaintBox1.Height div 4 * 3,
            PaintBox1.Width div 4, PaintBox1.Height div 4);
end;

PM MAIL   Вверх
S.A.G.
Дата 18.4.2007, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

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



Цитата
Ведь событие перерисовки происходит по необходимости, а не когда этого тебе хочется

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

Я разобрался в чем дело - ссылка в dc присваивалась при создании формы т.е. в событии OnCreate формы. Тогда наверное еще не был создан компонент пейнтбокс чтобы получить на него ссылку или что-то в этом духе. Вобщем при присвоении сразу перед рисованием все работает четко.

Это сообщение отредактировал(а) S.A.G. - 18.4.2007, 17:43


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
Snowy
Дата 18.4.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Просто DC может меняться.
Поэтому нужно брать его непосредственно перед отрисовкой.
PM MAIL   Вверх
S.A.G.
Дата 18.4.2007, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

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



А если я рисую из объекта который находиться в другом модуле я не имею возможности постоянно обновлять эту ссылку. Как же тогда быть? Или dc меняеться только когда перерисовываеться пейнтбокс?


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
Snowy
Дата 18.4.2007, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Когда он меняется? Неисповедимы пути VCL'я
Если рисуешь в другом модуле - передавай ему DC параметром процедуры.
PM MAIL   Вверх
S.A.G.
Дата 18.4.2007, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

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



в классе рисуют private методы


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
Snowy
Дата 18.4.2007, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ну дай ему не DC, а сам Canvas.
Пусть из него DC достаёт.
PM MAIL   Вверх
S.A.G.
Дата 18.4.2007, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

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



Попробую


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

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

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

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

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


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

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


 




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


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

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