Читаем О чём не пишут в книгах по Delphi полностью

  // тем, что у панели нет неклиентской части, поэтому

  // верхний левый угол окна и верхний левый угол клиентской

  // части совпадают.

  Pt := PanelHole.ScreenToClient(Point(Msg.LParamLo, Msg.LParamHi));

  if Pt.X < BorderMouseSensivity then

   if Pt.Y < CornerMouseSensivity then Msg.Result := HTTOPLEFT

   else

    if Pt.Y >= PanelHole.Height - CornerMouseSensivity then

Msg.Result := HTBOTTOMLEFT

    else Msg.Result := HTLEFT

   else

    if Pt.X >= PanelHole.Width - BorderMouseSensivity then

     if Pt.Y < CornerMouseSensivity then Msg.Result := HTTOPRIGHT

     else

      if Pt.Y >= PanelHole.Height - CornerMouseSensivity then

       Msg.Result := HTBOTTOMRIGHT

      else Msg.Result := HTRIGHT

    else

     if Pt.Y < BorderMouseSensivity then

      if Pt.X < CornerMouseSensivity then Msg.Result := HTTOPLEFT

      else

       if Pt.X >= PanelHole.Width - CornerMouseSensivity then

        Msg.Result := HTTOPRIGHT

       else Msg.Result := HTTOP

     else

if Pt.Y >= PanelHole.Height - BorderMouseSensivity then

       if Pt.X < CornerMouseSensivity then

        Msg.Result := HTBOTTOMLEFT

       else

        if Pt.X >= PanelHole.Width - CornerMouseSensivity then

         Msg.Result := HTBOTTOMRIGHT

        else Msg. Result := HTBOTTOM;

 end

 else if Msg.Msg = WM_SIZE then

 begin

  // Пересчитываем регион SetRegion;

  // Устанавливаем новые ограничения для размеров окна.

  // учитывающие новое положение дырки

  Constraints.MinWidth :=

   Width - ClientWidth + PanelHole.Left + MinHoleSize + HoleDistance;

  Constraints.MinHeight :=

   Height - ClientHeight + PanelHole.Top + MinHoleSize + HoleDistance;

 end

 else if Msg.Msg = WM_SIZING then

 begin

  // Копируем переданный прямоугольник в переменную R,

  // одновременно пересчитывая координаты из экранных

  // в клиентские

  R.TopLeft := ScreenToClient(PRect(Msg.LParam)^.TopLeft);

  R.BottomRight := ScreenToClient(PRect(Msg.LParam)^.BottomRight);

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

  // сторону тянет пользователь. Если за левую -

  // корректируем координаты левой стороны, если за

  // правую - ее координаты

  if R.Right - R.Left < MinHoleSize then

   if Msg.WParam in [WMSZ_BOTTOMLEFT, WMSZ_LEFT, WMSZ_TOPLEFT] then

    R.Left := R.Right - MinHoleSize

   else

    R.Right := R.Left + MinHoleSize;

    // Аналогично действуем, если слишком мала высота

    if R.Bottom - R.Top < MinHoleSize then

     if Msg.WParam in [WMSZ_TOP, WMSZ_TOPLEFT, WMSZ_TOPRIGHT] then

      R.Top := R.Bottom - MinHoleSize

     else R.Bottom := R.Top + MinHoleSize;

  // Сдвигаем стороны, слишком близко подошедшие

  // к границам окна

  if R.Left < HoleDistance then R.Left := HoleDistance;

  if R.Top < HoleDistance then R.Top := HoleDistance;

  if R.Right > ClientWidth - HoleDistance then

   R.Right := ClientWidth - HoleDistance;

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

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

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программист-прагматик. Путь от подмастерья к мастеру
Программист-прагматик. Путь от подмастерья к мастеру

Находясь на переднем крае программирования, книга "Программист-прагматик. Путь от подмастерья к мастеру" абстрагируется от всевозрастающей специализации и технических тонкостей разработки программ на современном уровне, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг. Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.Прочитав эту книгу, вы научитесь:Бороться с недостатками программного обеспечения;Избегать ловушек, связанных с дублированием знания;Создавать гибкие, динамичные и адаптируемые программы;Избегать программирования в расчете на совпадение;Защищать вашу программу при помощи контрактов, утверждений и исключений;Собирать реальные требования;Осуществлять безжалостное и эффективное тестирование;Приводить в восторг ваших пользователей;Формировать команды из программистов-прагматиков и с помощью автоматизации делать ваши разработки более точными.

А. Алексашин , Дэвид Томас , Эндрю Хант

Программирование / Книги по IT