Как использовать событие WM_GETMINMAXINFO?

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
xterro
постоялец
Сообщения: 148
Зарегистрирован: 23.02.2014 13:49:33

Как использовать событие WM_GETMINMAXINFO?

Сообщение xterro »

Приветствую, на WinAPI создаю окно, пытаюсь с помощью события WM_GETMINMAXINFO ограничить его максимальный и минимальный размер, но ничего не выходит, помогите примером:

Код: Выделить всё

function wnd_proc(window: hwnd; amessage, wparam, lparam: longint): longint; stdcall; export;
    var
        pmmi : ^MINMAXINFO;
    begin
 
    . . .
    WM_GETMINMAXINFO:
            begin
                pmmi := MINMAXINFO(lparam);  // тут ругается, типа не могу привести LongInt к MINMAXINFO :(
               // mmi.ptMinTrackSize.x = 450;
               
                exit;
            end;
    end;


Пытался ещё так:
pmmi := ^MINMAXINFO(lparam);
говорит, мол Incompatible types: got "Char" expected "^MINMAXINFO"

Как правильно преобразовывать?
CynicRus
постоялец
Сообщения: 106
Зарегистрирован: 28.06.2012 14:31:11

Сообщение CynicRus »

М-м-м-м....ну как-то примерно так оно работает:

Код: Выделить всё

WM_GETMINMAXINFO: begin
        with PMinMaxInfo(lParam)^ do begin
          ptMinTrackSize.X := Data.Width;
          ptMinTrackSize.Y := Data.Height;
        end;
xterro
постоялец
Сообщения: 148
Зарегистрирован: 23.02.2014 13:49:33

Сообщение xterro »

О чудо, оно работает! Спасибо. Интересно, а без PMinMaxInfo никак не обойтись или обязательно через промежуточный тип присваивать?
Аватара пользователя
Дож
энтузиаст
Сообщения: 900
Зарегистрирован: 12.10.2008 16:14:47

Сообщение Дож »

Интересно, а без PMinMaxInfo никак не обойтись или обязательно через промежуточный тип присваивать?

Можно обойтись:

Код: Выделить всё

MINMAXINFO(Pointer(lParam)^)

Но непонятно зачем.
xterro
постоялец
Сообщения: 148
Зарегистрирован: 23.02.2014 13:49:33

Сообщение xterro »

Привык к Си-стилю :)
Аватара пользователя
Дож
энтузиаст
Сообщения: 900
Зарегистрирован: 12.10.2008 16:14:47

Сообщение Дож »

В Си стиле всегда не получится, а иногда будет некрасиво
Аватара пользователя
bormant
постоялец
Сообщения: 408
Зарегистрирован: 21.03.2012 11:26:01

Сообщение bormant »

CynicRus писал(а):

Код: Выделить всё

WM_GETMINMAXINFO: begin
        with PMinMaxInfo(lParam)^ do begin
          ptMinTrackSize.X := Data.Width;
          ptMinTrackSize.Y := Data.Height;
        end;

Практичнее:

Код: Выделить всё

      WM_GETMINMAXINFO:
        with PMinMaxInfo(lParam)^.ptMinTrackSize do begin
          X := Data.Width;
          Y := Data.Height;
        end;
xterro
постоялец
Сообщения: 148
Зарегистрирован: 23.02.2014 13:49:33

Сообщение xterro »

Спасибо 8)
Ответить