Читаем Советы по Delphi. Версия 1.4.3 от 1.1.2001 полностью

 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. 

Как рисовать на органе управления, например, на TPanel?

Nomadic советует:

У всех компонентов, порожденных от TCustomControl, имеется свойство Canvas типа TCanvas.

Если свойство Canvas недоступно, Вы можете достучаться до него созданием потомка и переносом этого свойства в раздел Public.

{ Example. We recommend You to create this component through Component Wizard.

 In Delphi 1 it can be found as 'File|New Component…', and can be found

 as 'Component|New Component…' in Delphi 2 or above. }

type

 TcPanel = class(TPanel)

public

 property Canvas;

end;

У меня есть маленькое замечание.

Если у объекта нет свойства Canvas (у TDBEdit вроде-бы нет), то, по крайней меpе в D3, можно использовать класс TControlCanvas. Примерное использование:

var

 cc: TControlCanvas;

 …

 cc := TControlCanvas.Create;

 cc.Control := yourControl;

 …

и далее как обычно можно использовать методы Canvas.

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

Nomadic советует:

Вот кусок одного моего класса, в котором есть две интересные вещицы — проецирование файлов в память и работа с битмэпом в памяти через указатель.

Сразу оговорюсь, что все это работает только под Win95/NT.

type

 TarrRGBTriple=array[byte] of TRGBTriple;

 ParrRGBTriple=^TarrRGBTriple;


{организует битмэп размером SX,SY;true_color}

procedure TMBitmap.Allocate(SX,SY:integer);

var DC:HDC;

begin

 if BM<>0 then DeleteObject(BM); {удаляем старый битмэп, если был}

 BM:=0;

 PB:=nil;

 fillchar(BI,sizeof(BI),0);

 with BI.bmiHeader do {заполняем структуру с параметрами битмэпа}

 begin

Перейти на страницу:

Похожие книги

Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript

Данная книга посвящена программированию игр с помощью ActionScript. Здесь вы найдете подробные указания, необходимые для создания самых разных игр – аркад, головоломок, загадок и даже игровых автоматов. В тексте приведены исходные коды программ и детальные, доступно изложенные инструкции. Базовые принципы программирования ActionScript рассматриваются на примере игр, однако вы без труда сможете применить полученные знания и для разработки неигровых проектов, таких как Web-дизайн и реклама. Рекомендации Гэри Розенцвейга помогут вам не только придумывать занимательные игры и размещать их на Web-сайте, но и оптимизировать скорость их работы, а также защищать свои творения от несанкционированного копирования. Представленный в книге код несложно изменить для использования в других программах.Книга предназначена для широкого круга читателей – создателей анимационных роликов, художников-оформителей, программистов и разработчиков Web-сайтов. Издание может также выступать в качестве практического пособия по изучению ActionScript.

Гэри Розенцвейг

Программирование, программы, базы данных / Программирование / Книги по IT
Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT