![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Градиент кругленький
Сергей Бушин © (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