Форум: "WinAPI";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
Внизреализация функции GradientFill Найти похожие ветки
← →
Cunning (2005-12-16 18:13) [0]Уважаемые мастера!
Помогите реализовать функцию GradientFill из API Windows.
В MSDN вторым параметром этой функции идет указатель на массив структур TRIVERTEX.
А в Delphi7 в этой функции второй параматр указан как Record,
т.е. можно описать только одну вершину.
Я ее описал но функция рисует градиент только от синего к зеленому, а если нужны другие цвета.
← →
Набережных С. © (2005-12-16 19:13) [1]
> Cunning (16.12.05 18:13)
> В MSDN вторым параметром этой функции идет указатель на
> массив структур TRIVERTEX.
> А в Delphi7 в этой функции второй параматр указан как Record
Просто этот указатель при вызове должен указывать на первый элемент массива структур. Т.е. нужно создать так или иначе линейный массив структур, и адрес первого элемента передать в функцию. И там еще должен быть параметр, принимающий количество элементов массива, в него нужно передать длину массива
← →
MBo © (2005-12-16 20:42) [2]Еще проверь, как в Delphi 7 описан тип Color16, используемый в структурах этой функции. В ранных версиях была ошибка в Windows.pas
← →
Игорь Шевченко © (2005-12-17 00:03) [3]Я так делал:
{
Модуль: HSMsImg
Описание: Интерфейс к функциям 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.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.017 c