Форум » Clipper » Shadow » Ответить

Shadow

fil: Всем, привет ! Нет ли у кого файла Shadow.obj (Пришлось, тут, вспомнить DOS ) ? почта filnet (at) mail.ru

Ответов - 4

Григорьев Владимир: У меня нет, но в книге Спенсера по программированию на Clipper приведен код подобной функции. Если у вас есть доступ к этой книге, то вы можете взять оттуда. По крайней мере воспользоваться идеей. Если память не изменняет, то просто читается экран в области будущей тени, заменяется цвет на какой-нибудь темно-белый на сером или черном фоне и затем снова записывается на свое место.

wad1: ***************************** function shadow(v,l,n,p) //Реализация тени ***************************** local qq1,qq2,j,co:=setcolor() setcolor('+n/n') qq1:=savescreen(v+1,p+1,n+1,p+1) qq2:=savescreen(n+1,l+1,n+1,p) if p<79 for j=1 to n-v+1 @ v+j,p+1 say substr(qq1,j*2-1,1) next endif if n<24 for j=1 to p-l+1 @ n+1,l+j say substr(qq2,j*2-1,1) next endif setcolor(co) return nil

Григорьев Владимир: Мне представляется, что приведенный метод будет работать медленно. Правда на новых компьютерах это будет незаметно, а вот для старых компьютерпов я бы его не стал использовать. Приведенный wad1 код навел меня на мысль, что вместо цикла с командой SAY, лучше использовать следующий прием. С помощью SAVESCREEN() вы читаете область экрана, где будет распологоаться тень. Понадобится два раза применить эту функцию для тени справа от прямоугольника и для тени снизу от прямоугольника. Строка, которая будет содержать образ экрана, состоит из символов текста и символов атрибута цвета. Вот именно в этой строке вы все символы цвета заменяете на конкретный атрибут цвета тени (например, белый на сером). А затем вызываете функцию RESTSCREEN() с изменненой строкой.


fil: Спасибо. Нашел я уже этот shadow.obj Знакомые попросили исправить в древней DOS проге какую-то ерунду. Из исходников только .rmk файл. Там этот .obj и упоминался. В общем все заработало



полная версия страницы