Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Перемещение окна вне заголовка 3

Delphi , Программа и Интерфейс , Заголовок формы

Перемещение окна вне заголовка 3

Хочу показать еще один способ перемещения окна за его тело Обрабатываем OnMouseDown:


ReleaseCapture;
Perform(WM_SYSCOMMAND, $F012, 0); 

Пример перемещения окна за его заголовочную строку!

Код, который я предоставил, - это фрагмент Windows API, который обрабатывает событие OnMouseDown для перемещения окна. Вот разбивка каждого шага:

  1. ReleaseCapture;: Функция освобождает захват событий мыши, что позволяет другим окнам получать сообщения о мыше.
  2. Perform(WM_SYSCOMMAND, $F012, 0);: Эта строка отправляет сообщение Windows в процедуру окна. Специфически:
    • WM_ SYSCOMMAND - это сообщение Windows, указывающее, что выполнено системное командирование (например, уменьшение, увеличение или перемещение окна).
    • $F012 - это код системной команды для "Переместить" (0x000F012).
    • Третий параметр (0) обычно является значением lParam, которое specifies дополнительную информацию о событии.
    • Позволяя вызвать Perform, вы фактически говорите Windows, чтобы выполнить действие "Переместить" окно, что позволяет пользователю перетаскивать окно за его заголовочную строку.

Эта стратегия отличается от традиционного использования SetCapture и ReleaseCapture, потому что она не требует явного захвата событий мыши. Вместо этого она зависит от встроенной функциональности системы для перемещения окон.

Вот предложенный альтернативный способ решения:

private void Window_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        ReleaseCapture();
        SendMessage(Handle, WM_SYSCOMMAND, (IntPtr)SC_MOVE | 0xF012, IntPtr.Zero);
    }
}

В этом примере мы используем метод SendMessage для отправки custom сообщения (WM_SYSCOMMAND) с кодом системной команды для "Переместить" (0xF012). Это достигает того же результата, что и ваш оригинальный код.

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

В статье описывается метод перемещения окна за его тело с помощью обработки события OnMouseDown и вызова функций ReleaseCapture и Perform.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Заголовок формы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-11-30 11:42:55
2024-12-10 23:38:23/0.004580020904541/1