Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
 Аватар для Cyphermak
4 / 4 / 0
Регистрация: 21.04.2013
Сообщений: 124

Изменение размеров формы без рамки (bsnone)

06.02.2014, 19:46. Показов 3241. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как правельно изменить размер формы ?
вобщем код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
bool hit = false;
 
 
void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
    hit = true;
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
    hit = false;
}
//---------------------------------------------------------------------------
 
 
// все казалась бы супер форма растягивается в верх и вниз но при добавлении Картинок и прочих компонентов графики начинает все мигать (dablbuffer включен в какую сторану капать направте пожалуйста
пример aimp там плей лист шоколадно растягивается)
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X,
          int Y)
{
    if(hit)
    {
        TPoint p;
        GetCursorPos(&p);
        Height = p.y-Top;
    }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.02.2014, 19:46
Ответы с готовыми решениями:

Окно со стилем рамки bsNone ведущее себя, как bsSizeable
Подскажите, какие API-функции использовать для эмуляции полноценного окна. Конкретно интересует обработка Win+стрелки и "удары" о...

Изменение размеров формы без рамок
У меня есть форма на которой есть PictureBox, пытался сделать так if (e.Button == MouseButtons.Left) { ...

Изменение размеров формы без бордюров. Исправить код
Хочу сделать изменение размеров формы при FormBorderStyle = None, однако почему-то правый и нижний угол изменяет нормально, а верхний и...

18
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
06.02.2014, 21:13
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Обязательно вручную это делать? Нельзя заставить Windows?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class TForm1 : public TForm
{
    __published: // IDE-managed Components
 
        // ...
 
    private : // User declarations
    public : // User declarations
        __fastcall TForm1(TComponent* Owner);
 
    protected:
    MESSAGE void __fastcall WMNCHitTest(Messages::TWMNCHitTest &Message)
    {
        const int BorderSize = 5;
 
        TForm::Dispatch(&Message);
 
        if(BorderStyle == bsNone)
        {
            int Bottom = BoundsRect.Bottom - Message.YPos;
            if(Bottom < BorderSize) Message.Result = HTBOTTOM;
        }
    }
    BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_NCHITTEST, TWMNCHitTest, WMNCHitTest)
    END_MESSAGE_MAP(TForm);
};
, и форма без рамки прекрасно вспоминает, что надо делать при растягивании. Здесь - только вниз, но можно добавить возможность изменения размеров в любую сторону...
5
 Аватар для Cyphermak
4 / 4 / 0
Регистрация: 21.04.2013
Сообщений: 124
07.02.2014, 23:55  [ТС]
спасибо с сообщениями я пока еще не подружился )) хотя все строится именно на них
0
0 / 0 / 0
Регистрация: 30.08.2015
Сообщений: 75
23.10.2015, 11:27
Цитата Сообщение от volvo Посмотреть сообщение
, и форма без рамки прекрасно вспоминает, что надо делать при растягивании. Здесь - только вниз, но можно добавить возможность изменения размеров в любую сторону...
Прописал этот код и форма не растягиваться. Как его использовать?
Мне надо чтобы форма (border = bsNone) растягивалась за кроя мышкой.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
23.10.2015, 11:52
Нормально все растягивается. Написано же:
Цитата Сообщение от volvo Посмотреть сообщение
Здесь - только вниз
, ну подведи мышь к нижней границе формы, увидишь, как изменился курсор, зажимаешь мышь и изменяешь высоту.
0
0 / 0 / 0
Регистрация: 30.08.2015
Сообщений: 75
23.10.2015, 13:09
Цитата Сообщение от volvo Посмотреть сообщение
, ну подведи мышь к нижней границе формы, увидишь, как изменился курсор, зажимаешь мышь и изменяешь высоту.
Я добавил еще и к правой и все равно никакого эффекта.
Правильно добавил?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
protected:
    MESSAGE void __fastcall WMNCHitTest(Messages::TWMNCHitTest &Message)
    {
        const int BorderSize = 5;
 
        TForm::Dispatch(&Message);
 
        if(BorderStyle == bsNone)
        {
            int Bottom = BoundsRect.Bottom - Message.YPos;
            if(Bottom < BorderSize) Message.Result = HTBOTTOM;
            int Right = BoundsRect.Right - Message.XPos;
            if(Right < BorderSize) Message.Result = HTRIGHT;
        }
    }
    BEGIN_MESSAGE_MAP
    MESSAGE_HANDLER(WM_NCHITTEST, TWMNCHitTest, WMNCHitTest) END_MESSAGE_MAP(TForm);
Но у меня еще у формы есть событие, для перемещения формы
C++
1
2
3
4
5
6
7
8
9
10
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
    long SC_DRAGMOVE = 0xF012;
    if(Button == mbLeft)
    {
        ReleaseCapture();
        SendMessage(Handle, WM_SYSCOMMAND, SC_DRAGMOVE, 0);
    }
}
Может из-за него изменение размера не происходит?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
23.10.2015, 13:29
RomanChoCho, у меня твой код отработал на Ура!!!!!! С++ Builder XE4
0
0 / 0 / 0
Регистрация: 30.08.2015
Сообщений: 75
23.10.2015, 13:39
Ладно. Попробую убрать перемещение формы, может и заработает.

Нет, все равно не работает
И курсор мыши у меня не меняется, потому что у формы нет рамки.

Добавлено через 7 минут
У меня Embracadero C++ Builder 10 Seattle
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
23.10.2015, 14:07
Цитата Сообщение от RomanChoCho Посмотреть сообщение
И курсор мыши у меня не меняется, потому что у формы нет рамки.
И плевать, что нет рамки, у меня на XE2 прекрасно без этого меняется курсор, я не просто так возвращал из функции
HTBOTTOM, а именно доя того, чтобы заставить систему думать, что есть рамка, и мышь находится над ней.
Цитата Сообщение от RomanChoCho Посмотреть сообщение
У меня Embracadero C++ Builder 10 Seattle
Ну вот чего вас всех сразу на это сборище глюков понесло?
0
0 / 0 / 0
Регистрация: 30.08.2015
Сообщений: 75
23.10.2015, 14:39
Цитата Сообщение от volvo Посмотреть сообщение
Ну вот чего вас всех сразу на это сборище глюков понесло?
А что посоветуешь?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
23.10.2015, 14:43
По мне - так в XE2/XE4 была наиболее стабильная работа, а потом, когда в этот комбайн добавили еще возможность писать под Андроид (которая все равно никому на фиг не нужна, для Андроида как использовали, так и будут использовать Java, а не этот ужас, который предоставляет RAD Studio) - то все и понесло неизвестно куда. Старые глюки не правят, новых в избытке добавляют, только "завтраками" кормят: "в следующей версии точно исправим, а пока просто потерпите". В общем, по мне - ничего хорошего из проекта уже не будет. Поэтому и перепродают от одного к другому.
0
0 / 0 / 0
Регистрация: 30.08.2015
Сообщений: 75
23.10.2015, 19:17
А XE7 ? Вроде тож нормальная версия.
0
23.10.2015, 20:52

Не по теме:

вот сижу на ХЕ3 и никаких проблем... Как почитаю форум - во всех новых версиях какие-то проблемы, ну дык и на кой ляд оно надо???

0
0 / 0 / 0
Регистрация: 30.08.2015
Сообщений: 75
23.10.2015, 21:58
Установил XE4. Запустил в нем свой проект и все равно изменение формы мышкой не работает
Да что ж мне так не везет...
Больше нигде ничего не надо добавлять/прописывать?
только вставить этот код?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
protected:
    MESSAGE void __fastcall WMNCHitTest(Messages::TWMNCHitTest &Message)
    {
        const int BorderSize = 5;
 
        TForm::Dispatch(&Message);
 
        if(BorderStyle == bsNone)
        {
            int Bottom = BoundsRect.Bottom - Message.YPos;
            if(Bottom < BorderSize) Message.Result = HTBOTTOM;
            int Right = BoundsRect.Right - Message.XPos;
            if(Right < BorderSize) Message.Result = HTRIGHT;
        }
    }
    BEGIN_MESSAGE_MAP
    MESSAGE_HANDLER(WM_NCHITTEST, TWMNCHitTest, WMNCHitTest) END_MESSAGE_MAP(TForm);
Я тогда не знаю, почему у меня не работает
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
23.10.2015, 22:37
Цитата Сообщение от RomanChoCho Посмотреть сообщение
только вставить этот код?
Да, только вставить этот код в класс формы, размеры которой хотим менять. Попробовал еще раз, на чистом проекте - работает.
0
0 / 0 / 0
Регистрация: 30.08.2015
Сообщений: 75
24.10.2015, 08:46
Цитата Сообщение от volvo Посмотреть сообщение
Попробовал еще раз, на чистом проекте - работает.
Я тоже щас попробовал на чистом проекте и все заработало. Хоть уже что-то. Но как еще этим способом реализовать растягивание за нижний правый угол, чтобы форма могла растягиваться в две стороны одновременно?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
24.10.2015, 09:11
Цитата Сообщение от RomanChoCho Посмотреть сообщение
как еще этим способом реализовать растягивание за нижний правый угол
Ну добавь строку:
C++
1
2
3
4
5
6
7
8
9
10
// ...
        if(BorderStyle == bsNone)
        {
            int Bottom = BoundsRect.Bottom - Message.YPos;
            if(Bottom < BorderSize) Message.Result = HTBOTTOM;
            int Right = BoundsRect.Right - Message.XPos;
            if(Right < BorderSize) Message.Result = HTRIGHT;
            if(Bottom < BorderSize && Right < BorderSize) Message.Result = HTBOTTOMRIGHT; // <--- Вот эту
        }
// ...
- будет тебе растягивание за нижний правый угол
0
0 / 0 / 0
Регистрация: 30.08.2015
Сообщений: 75
24.10.2015, 12:42
volvo, Спасибо)

Добавлено через 2 часа 3 минуты
Короче я понял, почему этот код не работал. Не то что билдер другой, а из-за того что скин был другой. Я поставил стандарнтый виндузовый, код работает только с ним.
0
0 / 0 / 0
Регистрация: 26.11.2019
Сообщений: 1
26.11.2019, 14:45
Цитата Сообщение от RomanChoCho Посмотреть сообщение
volvo, Спасибо)

Добавлено через 2 часа 3 минуты
Короче я понял, почему этот код не работал. Не то что билдер другой, а из-за того что скин был другой. Я поставил стандарнтый виндузовый, код работает только с ним.
Скорей всего проблема была в другом, если на форме растянута панель (Panel1->Align = alClient), а бордюр формы равен 0 (Form1->BorderWidth = 0), тогда мышью не сможешь изменять рамзет формы (форма полностью закрыта панелью).
Нужно просто увеличить бордюр формы: Form1->BorderWidth = 0;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.11.2019, 14:45
Помогаю со студенческими работами здесь

изменение размеров рамки
подскажите пожалуйста как можно изменять размер рамки: например, если в ней одна запись,то 100Х100 если 2 записи-120Х120 и т.д. ...

Изменение размеров рамки тега <fieldset>
Всем привет! А можно ли изменить размер рамки тега fieldset? В стиле могу изменить ширину, цвет, а что то с размером не получается:(

Изменение размеров элементов, при изменение размеров формы
Доброго времени суток, подскажите, как в VS2016 реализовать подобное, а именно: Имеются следующая форма: С нижним текстбоксом я...

Автоматическое изменение размеров компонентов при изменении размеров формы
Приветствую. Подскажите. Форма по умолчанию при запуске приложения открывается по центру. Если необходимо развернуть форму на весь экран,...

Изменение размеров элементов, сохраняя пропорции, при изменении размеров самой формы
Как изменять размеры элементов, сохраняя пропорции, при изменении размеров самой формы?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru