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

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

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

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

Сообщение xterro » 29.10.2015 13:03:20

Приветствую, на 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"

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

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

Сообщение CynicRus » 29.10.2015 14:14:18

М-м-м-м....ну как-то примерно так оно работает:
Код: Выделить всё
WM_GETMINMAXINFO: begin
        with PMinMaxInfo(lParam)^ do begin
          ptMinTrackSize.X := Data.Width;
          ptMinTrackSize.Y := Data.Height;
        end;
CynicRus
постоялец
 
Сообщения: 106
Зарегистрирован: 28.06.2012 14:31:11

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

Сообщение xterro » 29.10.2015 14:54:52

О чудо, оно работает! Спасибо. Интересно, а без PMinMaxInfo никак не обойтись или обязательно через промежуточный тип присваивать?
xterro
постоялец
 
Сообщения: 148
Зарегистрирован: 23.02.2014 13:49:33

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

Сообщение Дож » 29.10.2015 14:59:35

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

Можно обойтись:
Код: Выделить всё
MINMAXINFO(Pointer(lParam)^)

Но непонятно зачем.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

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

Сообщение xterro » 29.10.2015 15:10:55

Привык к Си-стилю :)
xterro
постоялец
 
Сообщения: 148
Зарегистрирован: 23.02.2014 13:49:33

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

Сообщение Дож » 29.10.2015 15:16:42

В Си стиле всегда не получится, а иногда будет некрасиво
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

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

Сообщение bormant » 29.10.2015 15:54:45

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;
Аватара пользователя
bormant
постоялец
 
Сообщения: 407
Зарегистрирован: 21.03.2012 11:26:01

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

Сообщение xterro » 29.10.2015 16:08:49

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


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 39

Рейтинг@Mail.ru
cron