Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Квинтана
  
Главная

Список тестов

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
 
 19:50 Fox
 
 
Во Флориде и в Королевстве сейчас  20:08[Войти] | [Зарегистрироваться]
Р  Ы  Ц  А  Р  С  К  А  Я     К  В  И  Н  Т  А  Н  А
Логотип

Графика (GDI и TCanvas)

Вопрос №1
У формы имеется событие OnPaint, в обработчике которого можно что-то нарисовать на форме. Но рисовать на ней, используя свойство Canvas, можно и в любом другом методе формы. В чём разница между рисованием в обработчике OnPaint и в другом методе формы?
 Варианты ответов:
Никакой разницы, OnPaint служит для локализации кода рисования в одном месте для удобства
Перед вызовом OnPaint форма специальным образом готовится, чтобы рисование выполнялось быстрее
OnPaint вызывается во время обратного хода луча развёртки монитора, чтобы исключить мерцание
Нарисованное в OnPaint не стирается после перекрытия формы другими окнами
 
Вопрос №2
Имеется следующий код

Canvas.Pen.Style := psSolid;
Canvas.Pen.Width := 1;
Canvas.Pen.Color := clBlack;
Canvas.MoveTo(20, 20);
Canvas.LineTo(23, 23);


Сколько пикселей изменит свой цвет на чёрный в результате выполнения этого кода? Полагаем, что до его выполнения ни один из пикселей не был чёрным.
 Варианты ответов:
Ни одного
3 пикселя
4 пикселя
5 пикселей
 
Вопрос №3
Следующий код рисует две прямоугольные рамки – красную и зелёную – разными способами.

Canvas.Pen.Style := psSolid;
Canvas.Pen.Width := 1;

// Красная рамка
Canvas.Pen.Color := clRed;
Canvas.MoveTo(100, 100);
Canvas.LineTo(200, 100);
Canvas.LineTo(200, 200);
Canvas.LineTo(100, 200);
Canvas.LineTo(100, 100);

// Зелёная рамка
Canvas.Pen.Color := clGreen;
Canvas.Brush.Style := bsClear;
Canvas.Rectangle(100, 100, 200, 200);


Будет ли после его выполнения видна какая-то часть красной рамки, или зелёная скроет её целиком?
 Варианты ответов:
Красная рамка не будет видна вообще
Красная рамка будет видна целиком
Будут видны только верхняя и нижняя стороны красной рамки
Будут видны только правая и левая стороны красной рамки
Будут видны только левая и верхняя стороны красной рамки
Будут видны только правая и нижняя стороны красной рамки
 
Вопрос №4
Что будет нарисовано следующим кодом?

// Зелёная кисть
Canvas.Brush.Style := bsSolid;
Canvas.Brush.Color := clGreen;
// Синее перо
Canvas.Pen.Style := psSolid;
Canvas.Pen.Width := 1;
Canvas.Pen.Color := clBlue;
// Теперь рисуем
Canvas.FrameRect(Rect(100, 100, 200, 200));

 Варианты ответов:
Незаполненный квадрат синего цвета
Квадрат синего цвета, заполненный зелёным
Незаполненный квадрат зелёного цвета
Квадрат зелёного цвета, заполненный синим
 
Вопрос №5
Следующий код рисует окружность (толщину пера полагаем единичной) и точку

Canvas.Ellipse(10, 10, 20, 20);
Canvas.Pixels[15, 15] := clBlack;


Где окажется точка относительно центра окружности?
 Варианты ответов:
Попадёт точно в центр
Будет левее и выше центра
Будет левее и ниже центра
Будет правее и выше центра
Будет правее и ниже центра
 
Вопрос №6
На форме требуется нарисовать линии геометрическим пером, поддержка которого отсутствует в классе TPen. Для этого в обработчике события OnPaint формы написан такой код

var
  Brush: TLogBrush;
begin
  Brush.lbStyle := BS_SOLID;
  Brush.lbColor := Self.Font.Color;
  Canvas.Pen.Handle :=
    ExtCreatePen(PS_GEOMETRIC or PS_DASHDOT, 5, Brush, 0, nil);
  // Здесь рисуем
end;


Какая ошибка есть в этом коде?
 Варианты ответов:
Ошибок нет
Полю Brush.lbColor нельзя присваивать значение типа TColor
Не присвоено значение полю Brush.lbHatch
Перо со стилем PS_DASHDOT не может иметь толщину 5, толщина должна быть равна 1
Свойству Canvas.Pen.Handle нельзя присваивать дескриптор расширенного пера, расширенным пером можно рисовать только с помощью API-функций
 
Вопрос №7
Имеется растровый рисунок, хранящийся в объекте B типа TBitmap. Свойство B.PixelFormat равно pf24Bit. Пусть есть следующий код

var
  I1, I2: Integer;
  P1, P2: Pointer;

P1 := B.ScanLine[10];
P2 := B.ScanLine[20];
I1 := Integer(P1);
I2 := Integer(P2);


Что можно сказать о соотношении значений I1 и I2 после выполнения такого кода? Считаем, что B.Height > 20, т.е. выхода за пределы допустимого индекса при вызове ScanLine нет.
 Варианты ответов:
I1 < I2
I1 > I2
I1 = I2
В общем случае это непредсказуемо
 
Вопрос №8
Условия – те же, что и в предыдущем вопросе, но теперь B.PixelFormat имеет значение pfDevice. Что теперь можно сказать о соотношении значений I1 и I2?
 Варианты ответов:
I1 < I2
I1 > I2
I1 = I2
В общем случае это непредсказуемо
Использование ScanLine с таким рисунком приведёт к исключению
 
Вопрос №9
Есть следующий код

var
  B: TBitmap;
  P: PRGBTriple;

// Создаём рисунок 100х100
B := TBitmap.Create;
B.PixelFormat := pfDevice;
B.Width := 100;
B.Height := 100;

// Закрашиваем рисунок белым цветом
B.Canvas.Brush.Style := bsSolid;
B.Canvas.Brush.Color := clWhite;
B.Canvas.FillRect(Rect(0, 0, 100, 100));

// Изменяем рисунок через ScanLine
P := B.ScanLine[0];
P^.rgbtRed := 255;
P^.rgbtGreen := 0;
P^.rgbtBlue := 0;

// Выводим рисунок на форму
Canvas.Draw(10, 10, B);


Какое изображение будет выведено на форму?
 Варианты ответов:
Белый квадрат
Белый квадрат с красной точкой в левом верхнем углу
Белый квадрат с красной точкой в левом нижнем углу
При выполнении этого кода возникнет исключение
 
Вопрос №10
Растровый рисунок хранится в объекте типа TBitmap в виде DIB-секции (т.е. PixelFormat <> pfDevice). Какой способ попиксельной модификации рисунка будет работать быстрее – через свойство TBitmap.Canvas.Pixels или через свойство TBitmap.ScanLine?
 Варианты ответов:
Быстрее через TBitmap.Canvas.Pixels
Быстрее через TBitmap.ScanLine
Одинаково
На разных компьютерах может быть по-разному
 
Вопрос №11
Пусть необходимо создать объект TBitmap, хранящий рисунок размером 100x100 и имеющий формат пикселей pf8Bit. Для этого предложено два варианта кода.

Первый вариант:

B := TBitmap.Create;
B.PixelFormat := pf8Bit;
B.Width := 100;
B.Height := 100;


Второй вариант:

B := TBitmap.Create;
B.Width := 100;
B.Height := 100;
B.PixelFormat := pf8Bit;


Какой из этих двух вариантов будет работать быстрее?
 Варианты ответов:
Первый вариант быстрее
Второй вариант быстрее
Одинаково
На разных компьютерах может быть по-разному
 
Вопрос №12
Следующий код выводит надпись «fluff». Так как при выводе установлен зелёный фон, надпись получится на фоне зелёного прямоугольника. Затем по размерам текста рисуется красная рамка.

var
  Sz: TSize;
begin
  // Сплошная зелёная кисть
  Canvas.Brush.Style := bsSolid;
  Canvas.Brush.Color := clGreen;
  // Шрифт побольше и наклонный
  Canvas.Font.Name := 'Times New Roman';
  Canvas.Font.Size := 100;
  Canvas.Font.Style := [fsItalic];
  // Выводим надпись
  Canvas.TextOut(100, 100, 'fluff');
  // Пустая кисть, красное перо
  Canvas.Brush.Style := bsClear;
  Canvas.Pen.Style := psSolid;
  Canvas.Pen.Width := 1;
  Canvas.Pen.Color := clRed;
  // Получаем размеры текста
  Sz := Canvas.TextExtent('fluff');
  // Рисуем рамку
  Canvas.Rectangle(100, 100, 100 + Sz.cx, 100 + Sz.cy);
end;


Где будет находится красная рамка по отношению к зелёному прямоугольнику?
 Варианты ответов:
Рамка будет очерчивать границы прямоугольника
Рамка окажется больше прямоугольника и будет содержать его целиком
Рамка окажется меньше прямоугольника и будет содержаться целиком в нём
Области рамки и прямоугольника будут перекрываться лишь частично
 
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Хостинг предоставлен компанией DOTNETPARK (ASP.NET, MS SQL hosting)  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования