Виктор Опубликовано 4 июля, 2014 Поделиться Опубликовано 4 июля, 2014 Вопрос конечно не шибко умный, что то в пятницу вечером не могу сообразить. Как выставить минимальные размеры формы? Что бы меньше было нельзя никак уменьшить Цитата Ссылка на комментарий
0 rareMax Опубликовано 4 июля, 2014 Поделиться Опубликовано 4 июля, 2014 попробуйте в событии OnResize устанавливать нужные вам размеры формы Цитата Ссылка на комментарий
0 rareMax Опубликовано 4 июля, 2014 Поделиться Опубликовано 4 июля, 2014 procedure TForm16.FormResize(Sender: TObject); const C_FORM_MIN_H = 100; // минимальная высота C_FORM_MIN_W = 100; // минимальная ширина begin if Self.Height < C_FORM_MIN_H then Self.Height := C_FORM_MIN_H; if Self.Width < C_FORM_MIN_W then Self.Width := C_FORM_MIN_W; end; Цитата Ссылка на комментарий
0 Виктор Опубликовано 4 июля, 2014 Автор Поделиться Опубликовано 4 июля, 2014 Resize дает плохой результат. При уменьшении размеров форма в начале уменьшается, а потом увеличивается, в результате мерцание. Раньше вроде было событие onCanResize которое срабатывало перед изменениями размеров, но счас такого не нашел. Цитата Ссылка на комментарий
0 Администраторы Brovin Yaroslav Опубликовано 7 июля, 2014 Администраторы Поделиться Опубликовано 7 июля, 2014 В FireMonkey нету поддержки ограничений размеров, как это есть в VCL. Поэтому на текущий момент, вы можете сделать: Либо общими средствами FM, через OnResize. Но он вас не устраивает. Второй напрямую использовать WinApi WM_GETMINMAXINFO. Но для этого придется протянуть из FMX.Platform.Win.pas наружу обработку этого сообщения. dnekrasov 1 Цитата Ссылка на комментарий
0 estra Опубликовано 7 июля, 2014 Поделиться Опубликовано 7 июля, 2014 А как это сделать под MAC? Может предложите универсальный рецепт? Цитата Ссылка на комментарий
0 Виктор Опубликовано 15 июля, 2014 Автор Поделиться Опубликовано 15 июля, 2014 А можно в принципе по подробней как это реализовать. Я думаю с этой проблемкой столкнуться многие в том числе и новички Цитата Ссылка на комментарий
0 Администраторы Brovin Yaroslav Опубликовано 23 июля, 2014 Администраторы Поделиться Опубликовано 23 июля, 2014 Для OSX: uses FMX.Platform.Mac, Macapi.CoreGraphics; procedure SetFormMinSize(const AForm: TForm; const AMinSize: TSize); var MacHandle: TMacWindowHandle; begin MacHandle := WindowHandleToPlatform(AForm.Handle); MacHandle.Wnd.setMinSize(CGSizeMake(AMinSize.Width, AMinSize.Height)); end; procedure SetFormMaxSize(const AForm: TForm; const AMaxSize: TSize); var MacHandle: TMacWindowHandle; begin MacHandle := WindowHandleToPlatform(AForm.Handle); MacHandle.Wnd.setMaxSize(CGSizeMake(AMaxSize.Width, AMaxSize.Height)); end; procedure TForm1.Button1Click(Sender: TObject); begin SetFormMinSize(Self, TSize.Create(300, 100)); end; dnekrasov 1 Цитата Ссылка на комментарий
0 Виктор Опубликовано 24 июля, 2014 Автор Поделиться Опубликовано 24 июля, 2014 А для win можете подсказать? Как не пытаюсь что-то не получается Цитата Ссылка на комментарий
0 AngryOwl Опубликовано 25 августа, 2014 Поделиться Опубликовано 25 августа, 2014 Я думаю со мной согласится абсолютное большинство, что ограничение размеров формы - это проблема! Причем проблема с "большой буквы". Как это сделать в VCL - все в курсе. Предвидя ответ, что это можно сделать самому "ручками", спрошу - почему все должны лезть в исходники Firemonkey и править "родные" модули, дабы достичь нужного результата? Вроде это самые элементарные свойства (предопределение минимальных/максимальных размеров формы). Поэтому очень хотелось бы вынести это "обсуждение"/проблему на рассмотрение Embarcadero. И, конечно, хотелось бы чтобы они эту проблему решили и решили в срочном порядке. Согласитесь (думаю и наши уважаемые гуру согласятся), что этот вопрос относится к элементарным и основным проблемам. Представьте себе любого начинающего FMX-прогера, который в первом же своем FMX-проекте столкнется с данной проблемой... P.S. Как крайний вариант - рассматриваю коллективное обсуждение и решение этой задачи с публикацией кода. Kitty, Kikoma, dnekrasov и 2 других 5 Цитата Ссылка на комментарий
0 AngryOwl Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 Для формы (каждой) пишем TfmMain = class(TForm) ... procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override; ... protected private public .... end; procedure TfmMain.SetBounds(ALeft, ATop, AWidth, AHeight: Integer); begin // тут, конечно, ваши значения if AWidth < 740 then AWidth:= 740; if AHeight < 530 then AHeight:= 530; inherited SetBounds(ALeft, ATop, AWidth, AHeight); end; Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 Эту процедуру устанавливать в обработчик onReize? Цитата Ссылка на комментарий
0 AngryOwl Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 Эту процедуру устанавливать в обработчик onReize? Нет. Вы должны прописать ее в свойства самой формы procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override; заметьте override Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 Прописал, толку не дало, вот до каких размеров я сжал беднягу. Кстати при перемещении форма увеличивается, но когда отпускаю ее, такая же. Цитата Ссылка на комментарий
0 AngryOwl Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 Проверьте свойства формы Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 Все равно не пашет, и так и так. Оно как бы липнет к этому размеру, но если мышь двигать дальше, то сжимается до нуля. Цитата Ссылка на комментарий
0 AngryOwl Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 Так.... Ну попробуйте вот что: в protected формы запишите: protected procedure CreateHandle; override; А затем procedure TfmMain.CreateHandle; begin inherited CreateHandle; {$IFDEF MSWINDOWS} SetWindowLong(WindowHandleToPlatform(Handle).Wnd, GWL_EXSTYLE, GetWindowLong(WindowHandleToPlatform(Handle).Wnd, GWL_EXSTYLE) or WS_EX_APPWINDOW); {$ENDIF} end; Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 (изменено) У меня походу компилятор кривой Изменено 30 апреля, 2015 пользователем sviat Цитата Ссылка на комментарий
0 AngryOwl Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 В uses пропишите {$IFDEF MSWINDOWS}, Winapi.Windows, FMX.Platform.Win{$ENDIF}; Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 (изменено) Так.... Ну попробуйте вот что: в protected формы запишите: protected procedure CreateHandle; override; А затем procedure TfmMain.CreateHandle; begin inherited CreateHandle; {$IFDEF MSWINDOWS} SetWindowLong(WindowHandleToPlatform(Handle).Wnd, GWL_EXSTYLE, GetWindowLong(WindowHandleToPlatform(Handle).Wnd, GWL_EXSTYLE) or WS_EX_APPWINDOW); {$ENDIF} end; Я не пойму а где здесь конкретные значения длинны и ширины? Или я не правильно понял. Как она работает? --- Да и что CreateHandle есть, что его нет. Возможно я не понял как его применять......... Изменено 30 апреля, 2015 пользователем sviat Цитата Ссылка на комментарий
0 AngryOwl Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 Это просто переопределение стандартного стиля формы. Использовать вместе с тем что выше. Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 А ок, ща попробую Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 То что мне нужно не получилось, а получились довольно таки странные вещи: При запуске приложения создается два екземпляра формы. При изменении размеров формы, элементы в форме маштабируются под размер формы, если форма меньше заданного размера (прилагаю скрины). Цитата Ссылка на комментарий
1 DirtyBorov Опубликовано 19 мая, 2015 Поделиться Опубликовано 19 мая, 2015 Вот модуль который решает проблему минимального размера: FMX.FormHelper.zip Просто подключите модуль к своему проекту и объявите его в uses. Пользоваться вот так: procedure TForm1.FormCreate(Sender: TObject); begin SetMinSize(640, 480); end; Все. Теперь размер формы будет ограничен 640х480. e479 и AngryOwl 1 1 Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 21 мая, 2015 Поделиться Опубликовано 21 мая, 2015 А для максимального размера setmaxsize? Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 21 мая, 2015 Поделиться Опубликовано 21 мая, 2015 Вот модуль который решает проблему минимального размера: FMX.FormHelper.zip Просто подключите модуль к своему проекту и объявите его в uses. Пользоваться вот так: procedure TForm1.FormCreate(Sender: TObject); begin SetMinSize(640, 480); end; Все. Теперь размер формы будет ограничен 640х480. И куда его положить? В папке с проектом он толку не дает. Цитата Ссылка на комментарий
Вопрос
Виктор
Вопрос конечно не шибко умный, что то в пятницу вечером не могу сообразить. Как выставить минимальные размеры формы? Что бы меньше было нельзя никак уменьшить
Ссылка на комментарий
38 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.