Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
14-1085189750
Думкин
2004-05-22 05:35
2004.06.06
С днем рождения! 22 мая


1-1085380530
Максим
2004-05-24 10:35
2004.06.06
Затемнение экрана


14-1084913140
Thor
2004-05-19 00:45
2004.06.06
светофоры - опрос.


14-1084720952
SergeyM
2004-05-16 19:22
2004.06.06
Как узнать Count на CD-ROM e


1-1085179106
DelPHist
2004-05-22 02:38
2004.06.06
Компиляция математических выражений





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский