RestoreCapture FMX - Win32 - PullRequest
       10

RestoreCapture FMX - Win32

0 голосов
/ 09 декабря 2018

Я взял этот пример подкласса HWND формы в качестве отправной точки, а затем добавил в код jrohde от отсюда , который предназначен для того, чтобы вы могли перетаскивать форму, щелкая в любом месте наэто (не на панели заголовка).Этот код завершается с ошибкой в ​​строке ReleaseCapture() с этим сообщением: E2283 Use . or -> to call '_fastcall TCommonCustomForm::ReleaseCapture()

Если я закомментирую эту строку, код запускается, и я могу перемещать форму левой кнопкой мыши и перетаскивать, но я не могу позволитьидти из этого.Мышь застревает в форме, как липучка.Если я заменим ReleaseCapture() на ShowMessage, я могу вырваться, но это явно не тот путь ...

Что мне нужно сделать, чтобы запустить RestoreCapture()?Это приложение Win32.

НИЖЕ КОДА Я добавил в оригинальный блок switch (uMsg):

    // two int's defined above the switch statement
    static int xClick;
    static int yClick;


    // new case added to the switch
    case WM_LBUTTONDOWN:
    SetCapture(hWnd);
    xClick = LOWORD(lParam);
    yClick = HIWORD(lParam);
    break;

    case WM_LBUTTONUP:
    //ReleaseCapture();  // This is the problem spot <------------------------
    ShowMessage("Up");
    break;

    case WM_MOUSEMOVE:
    {
    if (GetCapture() == hWnd)  //Check if this window has mouse input
    {
    RECT rcWindow;
    GetWindowRect(hWnd,&rcWindow);
    int xMouse = LOWORD(lParam);
    int yMouse = HIWORD(lParam);
    int xWindow = rcWindow.left + xMouse - xClick;
    int yWindow = rcWindow.top + yMouse - yClick;
    SetWindowPos(hWnd,NULL,xWindow,yWindow,0,0,SWP_NOSIZE|SWP_NOZORDER);
    }
    break;

спасибо, russ

1 Ответ

0 голосов
/ 09 декабря 2018

Из сообщения об ошибке вы можете узнать, что компилятор разрешает функцию ReleaseCapture () в TCommonCustomForm :: ReleaseCapture ().Но вы хотите вызвать функцию Win32 API ReleaseCapture ().Используйте ::ReleaseCapture(); вместо ReleaseCapture(); для обеспечения этого.

...