Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2008, 23:22   #1
Roberto
Пользователь
 
Регистрация: 02.04.2008
Сообщений: 32
По умолчанию Градиентная заливка APi функция GradientFillRect в Delphi

Привет всем начинающим и опытным программистам! Подскажите пожалуйста, как использовать APi функцию GradientFillRect в Delphi, а то никак не могу понять, не получается, не то что надо выходит, если можно примерчик закинте пожалуйста.. Заранее благодарен!
Roberto вне форума Ответить с цитированием
Старый 07.04.2008, 23:36   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Roberto Посмотреть сообщение
Привет всем начинающим и опытным программистам! Подскажите пожалуйста, как использовать APi функцию GradientFillRect в Delphi, а то никак не могу понять, не получается, не то что надо выходит, если можно примерчик закинте пожалуйста.. Заранее благодарен!
Что значит "не получается"? Нет такой функции GradientFillRect, есть GradientFill
В MSDN есть вполне исчерпывающие вопрос примеры:

http://msdn2.microsoft.com/en-us/lib...12(VS.85).aspx
http://msdn2.microsoft.com/en-us/lib...38(VS.85).aspx
B_N вне форума Ответить с цитированием
Старый 09.04.2008, 16:39   #3
Roberto
Пользователь
 
Регистрация: 02.04.2008
Сообщений: 32
По умолчанию

Цитата:
Сообщение от B_N Посмотреть сообщение
Что значит "не получается"? Нет такой функции GradientFillRect, есть GradientFill
В MSDN есть вполне исчерпывающие вопрос примеры:

http://msdn2.microsoft.com/en-us/lib...12(VS.85).aspx
http://msdn2.microsoft.com/en-us/lib...38(VS.85).aspx
У меня не выходит, с цветами вот этими что то не ладное, в MSDN написано так:
vertex[0].Red = 0x0000;
vertex[0].Green = 0x8000;
vertex[0].Blue = 0x8000;
но этот вариант не подходит, ошибку показывает.. Какие значения должны быть там???
Roberto вне форума Ответить с цитированием
Старый 10.04.2008, 00:00   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Roberto Посмотреть сообщение
У меня не выходит, с цветами вот этими что то не ладное, в MSDN написано так:
vertex[0].Red = 0x0000;
vertex[0].Green = 0x8000;
vertex[0].Blue = 0x8000;
но этот вариант не подходит, ошибку показывает.. Какие значения должны быть там???
Какую ошибку? Покажите код. Что Вы всё загадками-то...
B_N вне форума Ответить с цитированием
Старый 10.04.2008, 10:15   #5
Roberto
Пользователь
 
Регистрация: 02.04.2008
Сообщений: 32
По умолчанию

Цитата:
Сообщение от B_N Посмотреть сообщение
Какую ошибку? Покажите код. Что Вы всё загадками-то...
Вот код, написал как в MSDN:
Код:
procedure TForm1.Button1Click(Sender: TObject);
  var
    t:array[0..1] of TTrivertex;
    g:TGradientRect;
begin
  t[0].x:=0;
  t[0].y:=0;
  t[0].Red:=0x0000;
  t[0].Green:=0x8000;
  t[0].Blue:=0x8000;
  t[0].Alpha:=0x0000;
  t[1].x:=50;
  t[1].y:=50;
  t[1].Red:=0x0000;
  t[1].Green:=0xd000;
  t[1].Blue:=0xd000;
  t[1].Alpha:=0x0000;
  g.UpperLeft:=0;
  g.LowerRight:=1;
  GradientFill(Canvas.Handle,t[0],2,@g,1,GRADIENT_FILL_RECT_H);
end;
не получается... Хочу разобраться в этом, что тут не так??

Последний раз редактировалось rpy3uH; 10.04.2008 в 19:26.
Roberto вне форума Ответить с цитированием
Старый 10.04.2008, 10:29   #6
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Шестнадцатиричные константы в паскале задаются со знаком доллара. То, что в C пишется как 0x8000, в паскале будет $8000
B_N вне форума Ответить с цитированием
Старый 10.04.2008, 19:53   #7
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

в дельфийских исходниках тип COLOR16 объявлен вот так:
COLOR16 = Shortint;
А это (выяснилось позже) в корне неверно!
я объявил новый тип MyCOLOR16
MyCOLOR16 = Word;
и определил структуру _MyTRIVERTEX и всё заработало
Код:
type
  MyCOLOR16 = Word;

  PMyTriVertex = ^TMyTriVertex;

  _MyTRIVERTEX = packed record
    x: Longint;
    y: Longint;
    Red: MyCOLOR16;
    Green: MyCOLOR16;
    Blue: MyCOLOR16;
    Alpha: MyCOLOR16;
  end;
  TMyTriVertex = _MyTRIVERTEX;

procedure TForm1.Button1Click(Sender: TObject);
var
  t:array[0..1] of TMyTrivertex;
  g:TGradientRect;
begin
  t[0].x:=0;
  t[0].y:=0;
  t[0].Red:=$0000;
  t[0].Green:=$8000;
  t[0].Blue:=$8000;
  t[0].Alpha:=$0000;
  t[1].x:=350;
  t[1].y:=80;
  t[1].Red:=$0;
  t[1].Green:=$D000;
  t[1].Blue:=$D000;
  t[1].Alpha:=$0000;
  g.UpperLeft:=0;
  g.LowerRight:=1;
    GradientFill(Canvas.Handle,_TRIVERTEX((@t[0])^),2,@g,1,GRADIENT_FILL_RECT_H);
end;
P.S. что-то Delphi меня очень сильно разочаровала

Последний раз редактировалось rpy3uH; 10.04.2008 в 19:57.
rpy3uH вне форума Ответить с цитированием
Старый 11.04.2008, 13:34   #8
Roberto
Пользователь
 
Регистрация: 02.04.2008
Сообщений: 32
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
в дельфийских исходниках тип COLOR16 объявлен вот так:
COLOR16 = Shortint;
А это (выяснилось позже) в корне неверно!
я объявил новый тип MyCOLOR16
MyCOLOR16 = Word;
и определил структуру _MyTRIVERTEX и всё заработало
Код:
type
  MyCOLOR16 = Word;

  PMyTriVertex = ^TMyTriVertex;

  _MyTRIVERTEX = packed record
    x: Longint;
    y: Longint;
    Red: MyCOLOR16;
    Green: MyCOLOR16;
    Blue: MyCOLOR16;
    Alpha: MyCOLOR16;
  end;
  TMyTriVertex = _MyTRIVERTEX;

procedure TForm1.Button1Click(Sender: TObject);
var
  t:array[0..1] of TMyTrivertex;
  g:TGradientRect;
begin
  t[0].x:=0;
  t[0].y:=0;
  t[0].Red:=$0000;
  t[0].Green:=$8000;
  t[0].Blue:=$8000;
  t[0].Alpha:=$0000;
  t[1].x:=350;
  t[1].y:=80;
  t[1].Red:=$0;
  t[1].Green:=$D000;
  t[1].Blue:=$D000;
  t[1].Alpha:=$0000;
  g.UpperLeft:=0;
  g.LowerRight:=1;
    GradientFill(Canvas.Handle,_TRIVERTEX((@t[0])^),2,@g,1,GRADIENT_FILL_RECT_H);
end;
P.S. что-то Delphi меня очень сильно разочаровала
Вооо! Точно работает, спасибо! А то думаю че не работает, так и думал что, что-то не то с этой функцией..
Roberto вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
API Функция Horus92 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 19.07.2010 13:25
Градиентная заливка Sanek777 Мультимедиа в Delphi 4 07.11.2008 16:23
API функция возвращающая имена дисков всистеме AIst Win Api 2 09.08.2008 19:17
API-функция NeiL Win Api 2 02.05.2008 22:08