Главная страница
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.043 c
14-1084887283
Igorek
2004-05-18 17:34
2004.06.06
Галерея красивого кода


1-1085024203
Алекс А
2004-05-20 07:36
2004.06.06
Существуют ли готовые функции поиска подстроки по шаблону как в


3-1084772646
LittleGirly
2004-05-17 09:44
2004.06.06
Отображение чисел с плавающей запятой в DBGrid-е


14-1084961837
Senti
2004-05-19 14:17
2004.06.06
Работа для программиста... Нужна помощь


1-1085621138
CyberSpy
2004-05-27 05:25
2004.06.06
ARichEdit