Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
 Аватар для coder8763
273 / 12 / 1
Регистрация: 18.09.2013
Сообщений: 641

Скрытие и открытие формы

08.11.2013, 10:40. Показов 3541. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется небольшая форма без бордюра и заголовка окна пристыкованная к правой части десктопа.

Необходимо сделать чтобы когда убираешь мышку от формы прога плавно скрывалась за видимую часть экрана вправо.

Подводишь мышку к правой части десктопа появляется стрелочка. Нажимаешь на стрелочку окно выдвигается плавно из правой части экрана в исходное положение.

Подскажите пожалуйста как это реализовать? Если это не очень сложно конечно.

Для примера можно использовать пустую форму. Программу делаю в Builder XE.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.11.2013, 10:40
Ответы с готовыми решениями:

Скрытие и Открытие консольного окна - без его перезапуска
Доброго вечера.Ребята не кто не подскажет возможно ли "Скрытие и Открытие консольного окна - без его перезапуска" Видел подобное...

Скрытие главной формы
Я создаю 2 формы, 1-главная, 2-я для авторизации, как мне скрыть главную форму (1-ю) сразу после загрузки и показать 2-ю? Если я ее...

Открытие (окна) второй формы всегда по центру относительно первой (формы)
Форма №1 - основное окно программы (можно свободно перемещать по экрану). Форма №2 - окно настроек (в нем можно что-то изменить и закрыть;...

25
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
08.11.2013, 15:02
Стопудово еще и семерка какая-нибудь?
1
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.11.2013, 15:12
Ну так свойствами Left/Top в TTimer в чем проблема ?
1
 Аватар для coder8763
273 / 12 / 1
Регистрация: 18.09.2013
Сообщений: 641
08.11.2013, 15:15  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Стопудово еще и семерка какая-нибудь?
восьмерка )

Добавлено через 34 секунды
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так свойствами Left/Top в TTimer в чем проблема ?
спасибо. буду посмотреть )
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
08.11.2013, 18:26
Попробуй так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int form_left;// обьявляем
//-----------------------
void __fastcall TForm1MouseMove(TObject *Sender, TShiftState Shift, int X,
          int Y)
{
form_left = Form1->Left;
Timer1->Enabled = true;
}
//-----------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if (Form1->Left==form_left+70){ // когда форма сместилась на 70
  Timer1->Enabled=false;}
}
интервал таймера и шаг смещения сам подбери...
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33403 / 21513 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
08.11.2013, 22:04
coder8763, почему-то мне кажется, что с TDockTabSet-ом это будет реализовать проще всего (ну, понятно, форма делается прозрачной через TransparentColor + TransparentColorValue, "выплывает" только панелька, причаленная на этот контрол. Причем плавное появление панели уже есть, его делать-то не надо)...
1
 Аватар для coder8763
273 / 12 / 1
Регистрация: 18.09.2013
Сообщений: 641
10.11.2013, 15:28  [ТС]
спасибо господа за толковые мысли. буду пробовать
0
 Аватар для coder8763
273 / 12 / 1
Регистрация: 18.09.2013
Сообщений: 641
13.11.2013, 14:06  [ТС]
Цитата Сообщение от Samrisbe Посмотреть сообщение
Попробуй так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int form_left;// обьявляем
//-----------------------
void __fastcall TForm1MouseMove(TObject *Sender, TShiftState Shift, int X,
          int Y)
{
form_left = Form1->Left;
Timer1->Enabled = true;
}
//-----------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if (Form1->Left==form_left+70){ // когда форма сместилась на 70
  Timer1->Enabled=false;}
}
интервал таймера и шаг смещения сам подбери...
все прописал. откомпилировал. запускается форма в верхнем левом углу экрана. и ничего не происходит. не исчезает и не появляется когда мышку подводишь.

может еще чего где прописать надо?

я бы исходник прикрепил для примера, но загружаться на форму он не хочет. пишет что ошибка сервера, вроде и файл архива небольшой всего 7 мег
0
 Аватар для coder8763
273 / 12 / 1
Регистрация: 18.09.2013
Сообщений: 641
13.11.2013, 15:09  [ТС]
Цитата Сообщение от Samrisbe Посмотреть сообщение
Попробуй так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int form_left;// обьявляем
//-----------------------
void __fastcall TForm1MouseMove(TObject *Sender, TShiftState Shift, int X,
          int Y)
{
form_left = Form1->Left;
Timer1->Enabled = true;
}
//-----------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if (Form1->Left==form_left+70){ // когда форма сместилась на 70
  Timer1->Enabled=false;}
}
интервал таймера и шаг смещения сам подбери...
и еще одну фишку странную заметил. на форму поместил TLabel черного стандартного цвета. после компиляции как он отображается на этой форме видно на картинке. глюк или это можно исправить как-то?

во всех остальных случаях нормально все отображается а этом примере вот так ...
Миниатюры
Скрытие и открытие формы  
0
 Аватар для coder8763
273 / 12 / 1
Регистрация: 18.09.2013
Сообщений: 641
13.11.2013, 16:38  [ТС]
Цитата Сообщение от Samrisbe Посмотреть сообщение
Попробуй так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int form_left;// обьявляем
//-----------------------
void __fastcall TForm1MouseMove(TObject *Sender, TShiftState Shift, int X,
          int Y)
{
form_left = Form1->Left;
Timer1->Enabled = true;
}
//-----------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if (Form1->Left==form_left+70){ // когда форма сместилась на 70
  Timer1->Enabled=false;}
}
интервал таймера и шаг смещения сам подбери...
а пристыковать к правой части нельзя? если заменяешь Left на Right пишет что ошибка. только к левой стороне экрана можно?
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
13.11.2013, 16:47
coder8763, разве у формы есть свойство Right?
Свойство Left определяет величину отступа от левой части элемента, к которому она принадлежит. Так же форма имеет свойство Width - ширина самой формы. В совокупии с шириной внешнего элемента формы получается Right форме и не нужен.
1
 Аватар для coder8763
273 / 12 / 1
Регистрация: 18.09.2013
Сообщений: 641
13.11.2013, 16:52  [ТС]
Цитата Сообщение от Kulgar Посмотреть сообщение
coder8763, разве у формы есть свойство Right?
Свойство Left определяет величину отступа от левой части элемента, к которому она принадлежит. Так же форма имеет свойство Width - ширина самой формы. В совокупии с шириной внешнего элемента формы получается Right форме и не нужен.
а что делать если форму надо пристыковать к правой части экрана? ведь ширина экрана у всех разная. как быть в этом случае без свойства Right? это можно как-то реализовать?
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
13.11.2013, 17:47
coder8763, так Вам к границам экрана..... Тут сложнее. Возможно это Вам поможет.
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33403 / 21513 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
13.11.2013, 19:43
Цитата Сообщение от Kulgar Посмотреть сообщение
Тут сложнее
С чего бы? TScreen.Width прекрасно показывает ширину пользовательского экрана. Отнимаем ширину формы, и результат пишем в Form.Left
1
 Аватар для coder8763
273 / 12 / 1
Регистрация: 18.09.2013
Сообщений: 641
14.11.2013, 08:58  [ТС]
Цитата Сообщение от Kulgar Посмотреть сообщение
coder8763, так Вам к границам экрана..... Тут сложнее. Возможно это Вам поможет.
там похоже обсуждение кончилось ничем. вопрос так и не решили

Добавлено через 1 минуту
Цитата Сообщение от UI Посмотреть сообщение
С чего бы? TScreen.Width прекрасно показывает ширину пользовательского экрана. Отнимаем ширину формы, и результат пишем в Form.Left
толково придумано. поковыряю, может чего получится. спасибо.

Добавлено через 12 часов 58 минут
Цитата Сообщение от UI Посмотреть сообщение
С чего бы? TScreen.Width прекрасно показывает ширину пользовательского экрана. Отнимаем ширину формы, и результат пишем в Form.Left
вот код, типа пример с того сайта что вы показали:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  for (int i = 0; i < Screen->FormCount; i++)
  {
        if (Screen->Forms[i]->Top < 0)
        {
          Screen->Forms[i]->Height += Screen->Forms[i]->Top;
          Screen->Forms[i]->Top = 0;
        }
        if (Screen->Forms[i]->Left < 0)
        {
          Screen->Forms[i]->Width += Screen->Forms[i]->Left;
          Screen->Forms[i]->Left = 0;
        }
        if (Screen->Forms[i]->Left + Screen->Forms[i]->Width > Screen->Width)
          Screen->Forms[i]->Width = Screen->Width - Screen->Forms[i]->Left;
        if (Screen->Forms[i]->Top + Screen->Forms[i]->Height > Screen->Height)
          Screen->Forms[i]->Height = Screen->Height - Screen->Forms[i]->Top;
  }
}
прописываю в обработчик нажатия кнопки и ничего.

еще чего-то необходимо указать? я так понимаю что там не все указано для правильного функционирования
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
14.11.2013, 10:18
Цитата Сообщение от coder8763 Посмотреть сообщение
прописываю в обработчик нажатия кнопки и ничего.
еще чего-то необходимо указать? я так понимаю что там не все указано для правильного функционирования
Ваш код возвращает в видимую область экрана все открытые формы проекта, если они вышли из видимой области. Работает.
Другой вопрос: что до́лжно выполняться на эту кнопку?
Цитата Сообщение от coder8763 Посмотреть сообщение
Имеется небольшая форма без бордюра и заголовка окна пристыкованная к правой части десктопа.
Это?
1
 Аватар для coder8763
273 / 12 / 1
Регистрация: 18.09.2013
Сообщений: 641
14.11.2013, 10:40  [ТС]
Цитата Сообщение от Kulgar Посмотреть сообщение
Ваш код возвращает в видимую область экрана все открытые формы проекта, если они вышли из видимой области. Работает.
Другой вопрос: что до́лжно выполняться на эту кнопку?
Это?
да. хотел попробовать сделать чтобы форма пристыкованная к правой части экрана плавно исчезала вправо когда мышку от неё убираешь. и появлялась когда стрелочка когда подводишь мышку к правой части экрана. нажимаешь на эту стрелочку и форма плавно выезжает. просто инетересно. получится или нет)

а на счет того кода вы правы, работает. только при нажатии форма на экран появляется не плавно а сразу выскакивает
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
14.11.2013, 11:38
Цитата Сообщение от coder8763 Посмотреть сообщение
да. хотел попробовать сделать чтобы форма пристыкованная к правой части экрана плавно исчезала вправо когда мышку от неё убираешь. и появлялась когда стрелочка когда подводишь мышку к правой части экрана. нажимаешь на эту стрелочку и форма плавно выезжает. просто инетересно. получится или нет)

а на счет того кода вы правы, работает. только при нажатии форма на экран появляется не плавно а сразу выскакивает
Тогда могу предложивать Вам в качестве скрытия окна:
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
    if (X==0 || Y==0 || X==Form1->Width || Y==Form1->Height)
    {
        AnimateWindow(Form1->Handle, 700,AW_HIDE||AW_SLIDE||AW_VER_POSITIVE);
 
    }
}
1
 Аватар для coder8763
273 / 12 / 1
Регистрация: 18.09.2013
Сообщений: 641
14.11.2013, 11:45  [ТС]
Цитата Сообщение от Kulgar Посмотреть сообщение
Тогда могу предложивать Вам в качестве скрытия окна:
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
    if (X==0 || Y==0 || X==Form1->Width || Y==Form1->Height)
    {
        AnimateWindow(Form1->Handle, 700,AW_HIDE||AW_SLIDE||AW_VER_POSITIVE);
 
    }
}
может я туплю, но по логике когда мышка не над формой она должна плавно задвигаться за край экрана.

добавляю указанный код в MouseMove и ничего. прога откомпилировалась и никак не реагирует на то что на неё нажимаешь и убираешь мышку, не задвигается
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
14.11.2013, 11:48
coder8763, я проверял уход мыши с окна.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.11.2013, 11:48
Помогаю со студенческими работами здесь

Скрытие формы, если она неактивна
Здравствуйте. Помогите решить проблему. У меня есть программа, которая сворачивается в трей. Как сделать что бы она сворачивалась, если...

Открытие формы
Как сделать так, штоб 9 форма открывалась как первая, тоисть запускалась вначале.

Открытие формы
Проблема такая. Я пытаюсь открыть форму User сразу после запуска программы. Пишу код в FormCreat главной формы. Выходит ошибка, нельзя...

Открытие формы по кнопке
Доброго времени суток! Как реализовать открытие формы по кнопке например? Я создаю в проекте ещё одну форму (Project.exe -&gt; Add New...

закрытие-открытие формы
можно ли после Form1-&gt;Close(); ее как нибудь открыть (нужен именно Сlose(), а не Hide();)


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru