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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Модуль имитации текста с тенью, Программирование на Delphi 
:(
    Опции темы
Оля
Дата 7.11.2004, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пропадаю, сроки сдачи курсовой душат, а я не понимаю в Delphi, помогите пожайлуста.
Тема: Разработать модуль имитации текста с тенью. smile
PM MAIL   Вверх
Pakshin A. S.
Дата 7.11.2004, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Как сделать, чтобы компоненты отбрасывали тень?


Код

procedure ShadeIt(f: TForm; c: TControl; Width: Integer; Color: TColor);  
var  
 rect: TRect;  
 old: TColor;  
begin  
 if (c.Visible) then  
 begin  
   rect := c.BoundsRect;  
   rect.Left := rect.Left + Width;  
   rect.Top := rect.Top + Width;  
   rect.Right := rect.Right + Width;  
   rect.Bottom := rect.Bottom + Width;  
   old := f.Canvas.Brush.Color;  
   f.Canvas.Brush.Color := Color;  
   f.Canvas.fillrect(rect);  
   f.Canvas.Brush.Color := old;  
 end;  
end;  

procedure TForm1.FormPaint(Sender: TObject);  
var  
 i: Integer;  
begin  
 for i := 0 to Self.ControlCount - 1 do  
   ShadeIt(Self, Self.Controls[i], 3, clBlack);  
end;  


Как быстро нарисовать тень в заданном регионе?

Код

procedure TForm2.DrawShadows(WDepth, HDepth : Integer);  
var  
 Dst, RgnBox  : TRect;  
 hOldDC         : HDC;  
 OffScreen      : TBitmap;  
 Pattern          : TBitmap;  
 Bits               : array[0..7] of WORD;  
begin  
 Bits[0]:=$0055;  
 Bits[1]:=$00aa;  
 Bits[2]:=$0055;  
 Bits[3]:=$00aa;  
 Bits[4]:=$0055;  
 Bits[5]:=$00aa;  
 Bits[6]:=$0055;  
 Bits[7]:=$00aa;  
 
 hOldDC:=Canvas.Handle;  
 Canvas.Handle:=GetWindowDC(Form1.Handle);  
 
 
 OffsetRgn(ShadeRgn, WDepth, HDepth);  
 GetRgnBox(ShadeRgn, RgnBox);  
 
 Pattern:=TBitmap.Create;  
 Pattern.ReleaseHandle;  
 Pattern.Handle:=CreateBitmap(8, 8, 1, 1, @(Bits[0]));  
 Canvas.Brush.Bitmap:=Pattern;  
 
 OffScreen:=TBitmap.Create;  
 OffScreen.Width:=RgnBox.Right-RgnBox.Left;  
 OffScreen.Height:=RgnBox.Bottom-RgnBox.Top;  
 Dst:=Rect(0, 0, OffScreen.Width, OffScreen.Height);  
 
 OffsetRgn(ShadeRgn, 0, -RgnBox.Top);  
 FillRgn(OffScreen.Canvas.Handle, ShadeRgn, Canvas.Brush.Handle);  
 
 OffsetRgn(ShadeRgn, 0, RgnBox.Top);  
 
//  BitBlt работает быстрее CopyRect  
 BitBlt(OffScreen.Canvas.Handle, 0, 0, OffScreen.Width, OffScreen.Height,  
        Canvas.Handle, RgnBox.Left, RgnBox.Top, SRCAND);  
 
 Canvas.Brush.Color:=clBlack;  
 FillRgn(Canvas.Handle, ShadeRgn, Canvas.Brush.Handle);  
 
 BitBlt(Canvas.Handle, RgnBox.Left, RgnBox.Top, OffScreen.Width,  
  OffScreen.Height, OffScreen.Canvas.Handle, 0, 0, SRCPAINT);  
 
 OffScreen.Free;  
 Pattern.Free;  
 
 OffsetRgn(ShadeRgn, -WDepth, -HDepth);  
 
 ReleaseDC(Form1.Handle, Canvas.Handle);  
 Canvas.Handle:=hOldDC;  
end;  


Комментарии :
Функция рисует тень сложной формы на форме Form2.
Для определения формы тени используется регион ShadeRgn, который был создан где-то раньше (например в OnCreate). Относительно регионов см. Win32 API.

Вот парочка статей из DRKB... может помогут... smile

А вообще никто здесь не горит желанием писать за вас весь проект...
PM   Вверх
Zero
Дата 7.11.2004, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



Цитата
Пропадаю, сроки сдачи курсовой душат

Выпей таблетку асперина, мож поможет... smile

Это сообщение отредактировал(а) Zero - 28.12.2005, 16:07

Присоединённый файл ( Кол-во скачиваний: 56 )
Присоединённый файл  EepSpr.zip 40,62 Kb
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 7.11.2004, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Попрошу без флейма и флуда!!!! smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

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

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

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

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


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

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


 




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


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

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