А. Григорьев - О чём не пишут в книгах по Delphi

Здесь есть возможность читать онлайн «А. Григорьев - О чём не пишут в книгах по Delphi» — ознакомительный отрывок электронной книги совершенно бесплатно, а после прочтения отрывка купить полную версию. В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: СПб, Год выпуска: 2008, ISBN: 2008, Издательство: БХВ-Петербург, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

О чём не пишут в книгах по Delphi: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «О чём не пишут в книгах по Delphi»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Рассмотрены малоосвещённые вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные механизмы их работы, особенности для протоколов TCP и UDP и др. Большое внимание уделено разбору ситуаций возникновения ошибок и получения неверных результатов в "простом и правильном" коде. Отдельно рассмотрены особенности работы с целыми, вещественными и строковыми типами данных, а также приведены примеры неверных результатов, связанных с ошибками компилятора, VCL и др. Для каждой из таких ситуаций предложены методы решения проблемы. Подробно рассмотрен синтаксический анализ в Delphi на примере арифметических выражений. Многочисленные примеры составлены с учётом различных версий: от Delphi 3 до Delphi 2007. Прилагаемый компакт-диск содержит примеры из книги.
Для программистов

О чём не пишут в книгах по Delphi — читать онлайн ознакомительный отрывок

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «О чём не пишут в книгах по Delphi», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Отметим, что во всех версиях до Delphi 2007 как минимум, класс TFontимеет свойство Orientation, но не имеет свойства Escapement. Это означает, что если вы хотите вывести надпись, у которой угол наклона букв и угол наклона базовой линии будут разными, вам все-таки придется самостоятельно вызывать функцию CreateFont.

1.2.8. Пример BitmapSpeed

Программа BitmapSpeed предназначена для сравнения скорости работы с растровыми изображениями в формате DDB и DIB через класс TBitmap. Тестируются три операции: рисование прямых линий, вывод растра на экран и работа со свойством ScanLine. Окно программы показано на рис 1.12.

Рис 112Окно программы BitmapSpeed после завершения теста Одна отдельно - фото 12

Рис. 1.12.Окно программы BitmapSpeed после завершения теста

Одна отдельно взятая операция выполняется настолько быстро, что измерить время ее выполнения можно только с большой погрешностью. Чтобы уменьшить погрешность, нужно повторить операцию много раз и измерить общее время. Все три теста выполняются методом DoTest, показанном в листинге 1.40.

Листинг 1.40. Метод DoTest, выполняющий тесты скорости

procedure TForm1.DoTest(Cnt, XOfs, ColNum: Integer; PixelFormat: TPixelFormat);

{ Cnt - число повторов операции при тестах

XOfs - X-координата области, в которой будет выполняться вывод изображения во втором тесте

ColNum - номер колонки в GridResults, в которую будут выводиться результаты

Pixel Format - формат изображения }

var

Pict: TBitmap;

I: Integer;

P: Pointer;

Freq, StartTime, EndTime: Int64;

begin

// Узнаем частоту условного счетчика тактов

QueryPerformanceFrequency(Freq);

// Создаем изображение

Pict := TBitmap.Create;

try

Pict.PixelFormat := PixelFormat;

Pict.Width := PictSize;

Pict.Height := PictSize;

Pict.Canvas.Pen.Width := 0;

// Вывод линий на картинку

// Выводится Cnt линий со случайными координатами

QueryPerformanceCounter(StartTime);

for I := 1 to Cnt do

begin

Pict.Canvas.Pen.Color :=

RGB(Random(256), Random(256), Random(256));

Pict.Canvas.MoveTo(Random(PictSize), Random(PictSize));

Pict.Canvas.LineTo(Random(PictSize), Random(PictSize));

end;

QueryPerformanceCounter(EndTime);

GridResults.Cells[ColNum, 1] :=

FloatToStrF((EndTime - StartTime) / Freq * 1000, ffFixed, 10, 2);

// Вызываем Application.ProcessMessages, чтобы GridResults

// перерисовался в соответствии с новым значением ячейки

Application.ProcessMessages;

// Второй тест - вывод рисунка на экран

QueryPerformanceCounter(StartTime);

// Повторяем вывод рисунка на экран Cnt раз

// Чтобы пользователь мог видеть, когда вывод

// заканчивается, каждый раз добавляем к координатам

// случайную величину

for I := 1 to Cnt do

Canvas.Draw(XOfs + Random(50), 10 + Random(50), Pict);

QueryPerformanceCounter(EndTime);

GridResults.Cells[ColNum, 2] :=

FloatToStrF((EndTime - StartTime) / Freq + 1000, ffFixed, 10, 2);

Application.ProcessMessages;

// Третий тест - доступ к свойству ScanLine

QueryPerformanceCounter(StartTime);

// Обращаемся к случайной строке свойства ScanLine

// Cnt раз

for I := 1 to Cnt do

P := Pict.ScanLine(Random(PictSize));

QueryPerformanceCounter(EndTime);

GridResults.Cells[ColNum, 3] :=

FloatToStrF((EndTime - StartTime) / Freq * 1000, ffFixed, 10, 2);

Application.ProcessMessages;

finally

Pict.Free;

end;

end;

Для измерения скорости работы будем использовать счетчик производительности — это высокопроизводительный счетчик, поддерживаемый системой для измерения производительности. Текущее значение счетчика можно узнать с помощью функции QueryPerformanceCounter, число тактов счетчика в секунду — с помощью функции QueryPerformanceFrequency. Этот счетчик позволяет получить более точные результаты, чем традиционно применяющаяся для таких целей функция GetTickCount. Теоретически, счетчик производительности может не поддерживаться аппаратной частью (в этом случае функция QueryPerformanceFrequencyвернет нулевую частоту), однако все современные компьютеры такой счетчик поддерживают, поэтому его можно применять без опасений.

В зависимости от параметра PixelFormatметод DoTestсоздает DDB- или DIB-изображение и тестирует скорость исполнения операций с ним. В первом тесте Cntраз рисуется линия случайного цвета со случайными координатами — так проверяется скорость рисования на картинке. Разумеется, это весьма односторонний тест, т.к. при рисовании других примитивов будет, скорее всего, иное соотношение скоростей для DIB и DDB. Но общее представление о соотношении скоростей он все же дает.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «О чём не пишут в книгах по Delphi»

Представляем Вашему вниманию похожие книги на «О чём не пишут в книгах по Delphi» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «О чём не пишут в книгах по Delphi»

Обсуждение, отзывы о книге «О чём не пишут в книгах по Delphi» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x