Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Градиент кругленький


Сергей Бушин ©   (2003-01-25 22:01:00) 

Как мне сделать градиент, чтобы он изменялся от центра окружности к краям, ну или наоборот.


MBo   (2003-01-27 14:09:00) [1]

Вариант без реимпорта функции



type
TTRIVERTEXNew = packed record
X,Y:Integer;
R,G,B,Alpha: Word;
end;

var v:array [0..1] of TTriVertexNew;

Gradientfill(image1.canvas.handle,PTriVertex(@v)^, 2,@m, 1,Gradient_Fill_Rect_H);


Игорь Шевченко   (2003-01-27 12:02:00) [2]

REA © (27.01.03 11:54)

Кстати, да.
{
Модуль: HSGdi

Описание: Интерфейс к функциям MSIMG32

Автор: Игорь Шевченко

Дата создания: 18.10.2002

История изменений:
}
unit HSMsImg;

interface
uses
Windows;

type
THSTriVertex = packed record
x : LongInt;
y : LongInt;
Red : Word;
Green : Word;
Blue : Word;
Alpha : Word;
end;
PHSTriVertex = ^THSTriVertex;

function HSGradientFill(DC: HDC; Vertex: PHSTriVertex; NumVertex: ULONG;
Mesh: Pointer; NumMesh, Mode: ULONG): BOOL; stdcall;
const
{ gradient drawing modes }
GRADIENT_FILL_RECT_H = $00000000;
GRADIENT_FILL_RECT_V = $00000001;
GRADIENT_FILL_TRIANGLE = $00000002;
GRADIENT_FILL_OP_FLAG = $000000ff;

implementation

type
THSGradientFill = function (DC: HDC; Vertex: PHSTriVertex; NumVertex: ULONG;
Mesh: Pointer; NumMesh, Mode: ULONG): BOOL; stdcall;
var
_HSGradientFill : THSGradientFill;
DllHandle: THandle;

const
Dllname = "msimg32.dll";

function InitLib : Boolean;
begin
if DllHandle = 0 then begin
DllHandle := LoadLibrary(Dllname);
if DllHandle <> 0 then begin
@_HSGradientFill := GetProcAddress(DllHandle, "GradientFill");
end;
end;
Result := (DllHandle <> 0);
end;

function HSGradientFill(DC: HDC; Vertex: PHSTriVertex; NumVertex: ULONG;
Mesh: Pointer; NumMesh, Mode: ULONG): BOOL; stdcall;
begin
if InitLib AND Assigned(_HSGradientFill) then
Result := _HSGradientFill(DC, Vertex, NumVertex, Mesh, NumMesh, Mode)
else begin
Result := false;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
end;
end;

initialization
finalization
if DllHandle <> 0 then
FreeLibrary(DllHandle);
end.


REA   (2003-01-27 11:54:00) [3]

Кстати там баг в дельфовом описании записи. По крайней мере в D6 был.


Игорь Шевченко   (2003-01-27 11:44:00) [4]

MSDN: GradientFill


Наверх

Титульная страница Поиск, карта сайта Написать письмо