Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.47 MB
Время: 0.021 c
2-1140975612
Volkodav
2006-02-26 20:40
2006.03.12
Полоса перемотки для MediaPlayer1


15-1140342027
Nic
2006-02-19 12:40
2006.03.12
Геоинформационные системы (ГИСы)


15-1139905285
Думкин
2006-02-14 11:21
2006.03.12
Про Асю.


15-1140099215
Loginov Dmitry
2006-02-16 17:13
2006.03.12
Синхронизация таблиц БД


1-1139388998
Дмитрий_Б
2006-02-08 11:56
2006.03.12
Текст в QR под углом 90 градусов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский