Главная страница
    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.46 MB
Время: 0.033 c
1-1085380730
therion
2004-05-24 10:38
2004.06.06
как цвет отдельной ячейки в StringGrid


3-1083823937
goozman
2004-05-06 10:12
2004.06.06
Дерево в БД


6-1082206877
Никита
2004-04-17 17:01
2004.06.06
Соеденение с интернетом средствами Delphi


1-1085156319
}|{yk
2004-05-21 20:18
2004.06.06
Глюк в OemToChar


1-1085246255
Хазей
2004-05-22 21:17
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский