работа с TCanvas
И еще один вопрос: в 6 билдере возникла проблема с рисованием на канвасе мышкой, я не вызываю команды прорисовки всей канвы, а рисую только в определенных местах, но канва начинает страшно мерцать, как будто она постоянно вся прорисовывается, хотя свойство OnPaint не обрабатывается вообще, может быть поэтому?
по второму вопросу - расскажи как рисуешь?
Цитата:
Originally posted by Relax
по первому вопросу - у объекта TImage должно стоять свойство Align = alClient - если объект растягивается на всю форму. Если не на всю, то тогда надо привязать его ко всем четырем углам с помощью свойства Anchors.
по второму вопросу - расскажи как рисуешь?
по первому вопросу - у объекта TImage должно стоять свойство Align = alClient - если объект растягивается на всю форму. Если не на всю, то тогда надо привязать его ко всем четырем углам с помощью свойства Anchors.
по второму вопросу - расскажи как рисуешь?
Обрабатываю событие OnMouseMove, в нем рисую прямоугольник на канве, размерыего зависяыт от полодения мыши, ну самое обычное выделение. Так почему-то Канва начинает все время прорисовываться, хотя в 5 билдере такого не было, очень раздражает, а как от этого избавиться - не знаю.
стандартно это делается так:
1. отловил событие
2. нарисовал прямоугольник по размеру области рисования, чтобы затереть старый
3. нарисовал прямоугольник, который рисуется мышой
и т.д. в цикле... если ты делаешь так, то мерцание естественно, на до использовать буфер, т.е. все то же самое делать, но не на экране, а в памяти, а потом копировать из памяти на экран, тогда мерцания не будет.
есть другой вариант, для твоего случая более подходящий:
1. отловил событие
2. нарисовал прямоугольник по старым координатам мыши в режиме XOR, таким образом он сотрется
3. нарисовал новый прямоугольник
и т.д. в цикле...
а по первому вопросу - получилось?
вот, на всякий случай, пример...
1. Отлавливаю событие мыши
2. Рисую прямоугольник (пока без стирания старого, просто хотя бы посмотреть)
и оно все мерцает, когда двигается мышь, как будто вся канва перерисовывается заново.
А как использовать буфер для вывода?
По поводу первого - я использую привязку к клиентской области, разворачиваю на весь экран, но если, допустим, вытащить одну и toolbar, то размер канвы увеличивается, но так как на ней уже что-то нарисовано, то она не хочет использовать дополнительно открывшуюся область, это какой-то старый глюк с канвой, я в одной книге видел как от этого избаляться, но это не помогло. Там было что-то, связанное с ClipRect
вот еще примерчик
Цитата:
Originally posted by Relax
вот еще примерчик
вот еще примерчик
Как все-таки использовать буфер?
сначала суть проблемы:
когда нужно рисовать что-то динамическое на канве, например, ползущий по экрану прямоугольник, то если просто рисовать его изменяя координаты, то за ним поползет шлейф предыдущих прорисовок - это плохо :( решение естественно - надо сначала затереть старую картинку и нарисовать все заново, но! - есть такой момент, когда пространство картинки представляет собой просто прямоугольник заполненный цветом фона - этот момент короткий, но изображение из-за этого мерцает, т.е. последлвательносьт такая: картинкас прямоугольником, пустая картинка, картинка с прямоугольником по новым координатам. выход такой - делать все это манипуляции в памяти, а не на экране, а на экран выводить только результат. тогда получится: картинка с прямоугольником, картинка с прямоугольником по новым координатам и мерцания не будет :)
обласьт памяти или буфер в которую производится рисование представляет собой объект класса TBitmap, хотя конечно можно юзать API, но это более трудоемко, хотя и менее ресурсоемко...
есть один пример - мой курсовой по компьютерной графике - там правильные многогранники (Тела Платона) движутся по прямолинейным траекториям, отталкиваясь от стен объемного куба. вот ссылка - посмотрите, если кому понравится, могу выслать полные (!) исходники.
Цитата:
Originally posted by Relax
вот ссылка - посмотрите, если кому понравится, могу выслать полные (!) исходники.
вот ссылка - посмотрите, если кому понравится, могу выслать полные (!) исходники.
Если не затруднит, пошли на [email]post_office@pochtamt.ru[/email].
(Надеюсь написано на С++)
Заранее спасибо.
написано на С++ в среде ВСВ 6.0 :)
(Паскаль я не люблю за кривизну синтаксиса)
Мой e-mail: [email]pasechnikk@mail.ru[/email]
Мне тоже, если можно. :)
Цитата:
Originally posted by corneo
Мне тоже, если можно. :)
Мне тоже, если можно. :)
а адрес у тебя какой?
ну ладно - уговорили :) - выложу на сайт...