Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.06;
Скачать: CL | DM;

Вниз

LineDDA   Найти похожие ветки 

 
Igor_thief ©   (2004-05-16 21:21) [0]

Я прочитал хелп и МСДН но так и не смог нарисовать градиентную линию. Не могу понять, что написть в LineDDAProc. Помогите пожалуйста.


 
Rouse_ ©   (2004-05-16 21:31) [1]

////////////////////////////////////////////////////////////////////////////////
//
// Рисуем рамку фокуса на компоненте
//
// Параметры:
// 1. X1, Y1, X2, Y2 - координаты рамки
// 2. ACanvas - чтобы не создавать еще один канвас,
// передается ссылка на уже существующий
// 3. FFocusFrameColor - цвет рамки
//
procedure DrawFocusFrame(const X1, Y1, X2, Y2: Integer; ACanvas: TCanvas;
 const FFocusFrameColor: TColor);

 // Для отрисовывания рамки используем LineDDA
 // которая разрешает передать в CallBack функцию только один свой параметр
 // Нам же нужно передать три, для этого создадим специальный
 // тип и в качестве своего параметра будем передавать указатель на него
 type TMultiParams = packed record
   MPCanvas: TCanvas;  // Канвас на котором производим отрисовку
   MPCounter: Boolean; // Флаг от состояния которого зависит рисуется точка или нет
   MPColor: TColor;    // Цвет рамки
 end;
 PMultiParams = ^TMultiParams;

 // Это сама функция которую вызывает LineDDA
 // Первые два параметра заполняются автоматически
 // Они являются координатами обрабатываемой точки
 // Третий параметр указатель на нашу структуру
 procedure CallBack(X, Y: Integer; P: PMultiParams);stdcall;
 begin
   // Указываем что все действия выполняются со структурой
   with P^ do begin

     // Меняем состояние флага
     MPCounter := not MPCounter;

     // Если флаг активен, отрисовываем точку
     if MPCounter then MPCanvas.Pixels[X, Y] := MPColor;
   end;
 end;

 // Это основная процедура

var
 P: PMultiParams;
begin
 try

   // Выделяем память для нашей переменной
   GetMem(P, SizeOf(TMultiParams));

   // Заполняем структуру нужными данными
   P^.MPCounter := False;
   P^.MPColor := FFocusFrameColor;
   P^.MPCanvas := ACanvas;

   // Рисуем четыре линии
   LineDDA(X1, Y1, X2, Y1, @CallBack, Integer(P));
   LineDDA(X2, Y1, X2, Y2, @CallBack, Integer(P));
   LineDDA(X2, Y2, X1, Y2, @CallBack, Integer(P));
   LineDDA(X1, Y2, X1, Y1, @CallBack, Integer(P));
 finally

   // В конце освобождаем память занятую переменной
   FreeMem(P);
 end;
end;


 
Igor_thief ©   (2004-05-20 15:58) [2]

Спасибо. Я обязательно разберусь с кодом. Я тоже немного примеров нашол в нете. Потои выброшу интерессные.



Страницы: 1 вся ветка

Текущий архив: 2004.06.06;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.048 c
14-1085082851
DIS
2004-05-20 23:54
2004.06.06
программа либо запускается, либо не запускается


9-1075827431
ArhangelM
2004-02-03 19:57
2004.06.06
Коллизия Круга и Линии??


4-1082639648
Talla2k
2004-04-22 17:14
2004.06.06
Проблемы с потоком


14-1084762100
тихий вовочка
2004-05-17 06:48
2004.06.06
исчезновение информации с винта


1-1085131196
Ivolg
2004-05-21 13:19
2004.06.06
Поиск