Форум: "Потрепаться";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.03 c