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

Тут можно читать онлайн А. Григорьев - О чём не пишут в книгах по Delphi - бесплатно ознакомительный отрывок. Жанр: comp-programming, издательство БХВ-Петербург, год 2008. Здесь Вы можете читать ознакомительный отрывок из книги онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    О чём не пишут в книгах по Delphi
  • Автор:
  • Жанр:
  • Издательство:
    БХВ-Петербург
  • Год:
    2008
  • Город:
    СПб
  • ISBN:
    978-5-9775-019003
  • Рейтинг:
    4.25/5. Голосов: 81
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

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

О чём не пишут в книгах по Delphi - описание и краткое содержание, автор А. Григорьев, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

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

Для программистов

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

О чём не пишут в книгах по Delphi - читать книгу онлайн бесплатно (ознакомительный отрывок), автор А. Григорьев
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

FBack.Height := GetSystemMetrics(SM_CYFULLSCREEN);

// Включаем режим двойной буферизации, чтобы незавершенная кривая

// не мерцала

DoubleBuffered := True;

end;

procedure TCurveForm.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

if Button = mbLeft then

begin

// Если незавершенных кривых нет, начинаем рисование новой кривой

if FNewLine then

begin

FDragPoint := dpFirst;

FCurve[0].X := X;

FCurve[0].Y := Y;

FCurve[3] := FCurve[0];

end

else

begin

// Если есть незавершенная кривая, определяем, в какую точку попал

// курсор мыши. Строго говоря, необходимо также запоминать,

// насколько отстоят координаты курсора мыши от координат

// контрольной точки, чтобы при первом перемещении не было скачка.

// Но т.к. окрестность точки очень мала, этот прыжок практически

// незаметен, и в данном случае этим можно пренебречь, чтобы

// не усложнять программу

if PtNearPt(X, Y, FCurve[0]) then FDragPoint := dpBegin

else if PtNearPt(X, Y, FCurve[1]) then FDragPoint := dpInter1

else if PtNearPt(X, Y, FCurve[2]) then FDragPoint : = dpInter2

else if PtNearPt(X, Y, FCurve[3]) then FDragPoint := dpEnd

else FDragPoint := dpNone;

end;

end;

end;

procedure TCurveForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

begin

if ssLeft in Shift then

begin

case FDragPoint of

dpFirst, dpEnd: begin

FCurve[3].X := X;

FCurve[3].Y := Y;

Refresh;

end;

dpBegin: begin

FCurve[0].X := X;

FCurve[0].Y := Y;

Refresh;

end;

dpInter1: begin

FCurve[1].X := X;

FCurve[1].Y := Y;

Refresh;

end;

dpInter2: begin

FCurve[2].X := X;

FCurve[2].Y := Y;

Refresh;

end;

end;

end;

end;

procedure TCurve Form.FormMouseUp(Sender: TObject; Button: ТМouseButton; Shift: TShiftState; X, Y: Integer);

begin

// Если кнопка отпущена при отсутствии незавершенной кривой, значит,

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

// нужно делать новую кривую

if (Button = mbLeft) and (FDragPoint = dpFirst) then

begin

FNewLine := False;

FDragPoint := dpNone;

// Промежуточные точки равномерно распределяем по прямой

FCurve[1].X := FCurve[0].X + Round((FCurve[3].X - FCurve[0].X) / 3);

FCurve[1].Y := FCurve[0].Y + Round((FCurve[3].Y - FCurve[0].Y) / 3);

FCurve[2].X := FCurve[0].X + Round(2 + (FCurve[3].X - FCurve[0].X) / 3);

FCurve[2].Y := FCurve[0].Y + Round(2 + (FCurve[3].Y - (Curve[0].Y) / 3);

Refresh;

end;

end;

procedure TCurveForm.FormPaint(Sender: TObject);

var

I: Integer;

L: Extended;

begin

// Сначала выводим фон

Canvas.Draw(0, 0, FBack);

if FNewLine then

begin

// Если программа находится в режиме рисования резиновой прямой,

// рисуем прямую от точки FCurve[0] до FCurve[3]. Значение FCurve[1]

// и FCurve[2] на данном этапе игнорируется

if FDragPoint = dpFirst then

begin

FCounter := 0;

L :=

Sqrt(Sqr(FCurve[0].X - FCurve[3].X) +

Sqr(FCurve[0].Y - FCurve[3].Y));

if L > 0 then

begin

FDX := Round(4 * (FCurve[0].Y -FCurve[3].Y) / L);

FDY := Round(4 * (FCurve[3].X - FCurve[0].X) / L);

LineDDA(FCurve[0].X, FCurve[0].Y, FCurve[3].X, FCurve[3].Y,

@LineDrawFunc, Integer(Canvas));

end;

end;

end

else

begin

// Если есть незавершённая кривая и установлен режим рисования

// по опорным точкам, выводим отрезки, показывающие касательные

// к кривой в её начале и конце

if RGroupDrawMethod.ItemIndex = 0 then

begin

Canvas.Pen.Style := psDot;

Canvas.Pen.Width := 3;

Canvas.Pen.Color := clDkGrey;

Canvas.MoveTo(FCurve[0].X, FCurve[0].Y);

Canvas.LineTo(FCurve[1].X, FCurve[1].Y);

Canvas.MoveTo(FCurve[3].X, FCurve[3].Y);

Canvas.LineTo(FCurve[2].X, FCurve[2].Y);

end;

// Рисуем красные квадраты, показывающие точки, которые пользователь

// может перемещать

Canvas.Pen.Style := psSolid;

Canvas.Pen.Width := 1;

Canvas.Pen.Color := clRed;

Canvas.Brush.Style := bsClear;

for I := 0 to 3 do

Canvas.Rectangle(FCurve[I].X - RectSize, FCurve[I].Y - RectSize,

FCurve[I].X + RectSize + 1, FCurve[I].Y + RectSize + 1);

end;

end;

// функция PtNearPt возвращает True, если точка с координатами (X1, Y1)

// удалена от точки Pt по каждой из координат не более чем на RectSize

function TCurveForm.PtNearPt(X1, Yl: Integer; const Pt: TPoint): Boolean;

begin

Result :=

(X1 >= Pt.X - RectSize) and (X1 <= Pt.X + RectSize) and

(Y1 >= Pt.Y - RectSize) and (Y1 <= Pt.Y + RectSize);

end;

procedure TCurveForm.BtnEndClick(Sender: TObject);

begin

if not FNewLine then

begin

DrawCurve(FBack.Canvas);

FNewLine := True;

Refresh;

end;

end;

Размеры фонового растра устанавливаются равными размеру развернутого на весь экран окна. Таким образом, если уменьшить окно, то те завершенные кривые, которые окажутся за его пределами, не пропадут — они вновь будут видимы, если увеличить размеры окна. Однако в программе не предусмотрено, что система позволяет пользователю менять разрешение экрана. Это можно учесть, добавив реакцию на сообщение WM_DISPLAYCHANGEи меняя в нем размеры фонового рисунка.

Глава 2

Использование сокетов Delphi

Так как большинство современных компьютеров объединены в сети, то и задачи программирования передачи и получения данных по сети возникают часто. Существует множество высокоуровневых средств обмена, но иногда их бывает недостаточно, и тогда приходится использовать самые низкоуровневные средства сетевого программирования — сокеты. Однако существует целый ряд причин, по которым овладеть этой технологией непросто. Во-первых, она сложна сама по себе из-за большого количества возможностей. Во-вторых, существующие библиотеки отягощены совместимостью со старыми версиями, которые, с современной точки зрения, не всегда развивались по правильному пути. В-третьих, у программистов на Delphi возникают дополнительные трудности, связанные как с тем, что сама реализация библиотеки сокетов ориентирована на язык С, так и с тем, что стандартный модуль WinSockпочему-то "застрял" на первой версии этой библиотеки, в то время как начиная с Windows NT 4 существует более удобная вторая.

Несмотря на традиционно высокий интерес к сокетам, литературы, в которой бы эта библиотека была детально описана, очень мало. Если не считать книг, где сокеты упоминаются обзорно, автору известна только одна книга, посвященная сокетам в Windows [3]. Но она не имеет никакого отношения к Delphi и не учитывает специфику этого средства разработки. Естественно, что из-за недостатка информации у начинающих программистов часто возникают вопросы, связанные с использованием сокетов в Delphi. В данной главе мы попытаемся ответить на эти вопросы.

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

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

Интервал:

Закладка:

Сделать


А. Григорьев читать все книги автора по порядку

А. Григорьев - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге О чём не пишут в книгах по Delphi, автор: А. Григорьев. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x