Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/22: Рейтинг темы: голосов - 22, средняя оценка - 4.91
33 / 32 / 2
Регистрация: 26.01.2009
Сообщений: 592

Добавить кнопку в заголовок

10.11.2010, 18:48. Показов 4237. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как добавить кнопку в заголовок формы. Объясните пожалуйства или дайте ссылочку на статью именно под c++ Builder
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.11.2010, 18:48
Ответы с готовыми решениями:

Как в заголовок формы вставить кнопку
Подскажите как это реализовать делал как тут но ничего из этого не вышло прошу помощи юзаю Rad studo xe3

Как добавить кнопку в заголовок окна
Можно ли как нибудь добавить свою кнопку в заголовок ока?

Добавить свою кнопку в заголовок формы
Привет, All! )) Ребята, кто-нить подскажет, как можно изменить стандартный набор системных кнопок на форме не включив/отключив их, а...

20
 Аватар для Mrak19901124
47 / 12 / 4
Регистрация: 25.02.2010
Сообщений: 259
10.11.2010, 20:37
в заголовок это куда имено типа эти?
Миниатюры
Добавить кнопку в заголовок  
0
33 / 32 / 2
Регистрация: 26.01.2009
Сообщений: 592
10.11.2010, 20:57  [ТС]
да-да
0
 Аватар для Mrak19901124
47 / 12 / 4
Регистрация: 25.02.2010
Сообщений: 259
10.11.2010, 20:59
в Standard есть такой елемент MainMemenu он отвечает за эти кнопки.когда добавиш его дважды жми на нём и создавай хоть по 10 вкладок
0
33 / 32 / 2
Регистрация: 26.01.2009
Сообщений: 592
10.11.2010, 21:01  [ТС]
Нее - не элементы меню - а выше:системные кнопки : закрыть, минимизировать , на полный экран - вот туда кнопочку добавить нада
0
 Аватар для Mrak19901124
47 / 12 / 4
Регистрация: 25.02.2010
Сообщений: 259
10.11.2010, 21:15
на щот добавить не знаю а вот присвоить код какой то

C++
1
2
3
4
5
6
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
CanClose=0;
ShowMessage("Форма не хочет закрываться.");
}
//---------------------------------------------------------------------------
Добавлено через 1 минуту
Свойство BorderIcons отвечает за системные кнопки. bsSystemMenu - закрыть, bsMinimize - свернуть, bsMaximize - развернуть.
0
33 / 32 / 2
Регистрация: 26.01.2009
Сообщений: 592
10.11.2010, 21:17  [ТС]
да нет - не то все. нада к этим кнопкам добавить еще кнопку которая будет делать определенный функционал. я знаю что там по умолчанию 3 всего
0
 Аватар для Mrak19901124
47 / 12 / 4
Регистрация: 25.02.2010
Сообщений: 259
10.11.2010, 21:25
увы я о таком не слышал даже не читал ((
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
10.11.2010, 22:36
Как добавить кнопку в заголовок формы.
По мойму у заголовка нет таких свойств.
Поставь BorderStyle в bsNone, и нарисуй свои кнопки.
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
11.11.2010, 13:37
Grey, есть. Только делается всё это немного на другом уровне. Необходимо перехватывать сообщения WM_NCxxx и отрисовывать всё вручную.
Как-то давно пробовал переделать подобное с Delphi - получилось некрасиво и я оставил данную идею.

Будет время - попробую написать с нуля по-честному.
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
11.11.2010, 14:34
Grey, полностью согласен с тобой. Это самый нормальный и легкий способ. А вот то, что предложил MikeSoft, немного, сложновато будет и запутанно.
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
11.11.2010, 15:06
Цитата Сообщение от NiTan Посмотреть сообщение
А вот то, что предложил MikeSoft, немного, сложновато будет и запутанно.
Вообще-то программирование - не только использование VCL обёрток.
Нужно же и самому пробовать упростить те, или иные методы.
Иначе работа системы так и останется непонятной.

Miller-1981, попробуйте сделать так:

Заголовочный файл (*.h):
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
32
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
private:    // User declarations
  bool Checked;
  TCanvas *MyBtnCanvas;
public:     // User declarations
  void WMNCPaint(TMessage &Message);
  void WMNCMouseMove(TMessage &Message);
  void WMNCLButtonDown(TMessage &Message);
  __fastcall TForm1(TComponent* Owner);
protected:
  BEGIN_MESSAGE_MAP
    VCL_MESSAGE_HANDLER(WM_NCPAINT, TMessage, WMNCPaint)
    VCL_MESSAGE_HANDLER(WM_NCMOUSEMOVE, TMessage, WMNCMouseMove)
    VCL_MESSAGE_HANDLER(WM_NCLBUTTONDOWN, TMessage, WMNCLButtonDown)
  END_MESSAGE_MAP(TForm)
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Файл кода (*.cpp):
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
  Checked=false;
  MyBtnCanvas=new TCanvas();
  MyBtnCanvas->Handle=GetWindowDC(Handle);
}
//---------------------------------------------------------------------------
void TForm1::WMNCPaint(TMessage &Message)
{
  if (Checked) {
    MyBtnCanvas->Brush->Color=clYellow;
  } else {
    MyBtnCanvas->Brush->Color=clBlue;
  }
  DefWindowProcA(Handle,Message.Msg,Message.WParam,Message.LParam);
  MyBtnCanvas->Ellipse(Form1->Width-100,6,Form1->Width-80,25);
}
//---------------------------------------------------------------------------
void TForm1::WMNCMouseMove(TMessage &Message)
{
  DefWindowProcA(Handle,Message.Msg,Message.WParam,Message.LParam);
  int x = Message.LParamLo-Form1->Left, y = Message.LParamHi-Form1->Top;
  if ((x >= Form1->Width-100) && (x < Form1->Width-80) && (y >= 6) && (y <= 25)) {
    if (!Checked) {
      Checked=true;
      WMNCPaint(Message);
    }
  } else {
    if (Checked) {
      Checked=false;
      WMNCPaint(Message);
    }
  }
}
//---------------------------------------------------------------------------
void TForm1::WMNCLButtonDown(TMessage &Message)
{
  DefWindowProcA(Handle,Message.Msg,Message.WParam,Message.LParam);
  if(Checked) {
    ShowMessage("Your Own Event");
  }
}
//---------------------------------------------------------------------------
Однако, я не уверен, что данный подход будет работать при использовании Aero эффекта.
Пробуйте, экспериментируйте.
С++ Builder - это не только набор для формошлёпства.
1
125 / 65 / 9
Регистрация: 19.04.2010
Сообщений: 196
11.11.2010, 15:31
По гуглить не пробывали?

вот вам ссылки *здесь_была_ссылка*

пишите в поиске "создание кнопок в заголовке окна"

Добавлено через 4 минуты
*здесь_была_ссылка*

 Комментарий модератора 
Внимательно перечитайте правила данного форума.
Особенно пункты 3.6 и 3.7
0
11.11.2010, 15:43

Не по теме:

MikeSoft, не спорю, но когда тебе важен результат, то лучше пойти простым и легким путем, чем вот так вот ухищряться.

Добавлено через 36 секунд
Способ, предложенный Grey, лучше.:p

0
125 / 65 / 9
Регистрация: 19.04.2010
Сообщений: 196
11.11.2010, 15:45
Приношу свои извинения !!!
1
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
11.11.2010, 15:48
Цитата Сообщение от NiTan Посмотреть сообщение
MikeSoft, не спорю, но когда тебе важен результат, то лучше пойти простым и легким путем, чем вот так вот ухищряться.
Давай посмотрим на простоту реализации...

Убираем системный "бордюр" окна:
  • Теряем системный стиль.
  • Теряем кнопки, отвечающее за управление отображением.
  • Теряем заголовочную подпись.
  • Теряем возможность перетаскивания за край окна.
  • Теряем возможность описания стыковки окна с крайними положениями экрана.
  • Теряем системное меню, привязанное к иконке формы.

Не по теме:

Может я чего ещё забыл или не знал о Borders, дополните этот список сами...



Вот теперь можно посчитать сколько необходимо переопределить действий, чтобы вернуть подаренный системой функционал. И где будет больше ухищрений?
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
11.11.2010, 16:23
MikeSoft, для меня, все равно, в способе, предложенном тобой.
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
11.11.2010, 16:35
NiTan, да я это уже понял.
Отличия в подходах можно оценить попытавшись полностью реализовать тот список, который я описал выше. Там придётся ещё и перехватывать посылки приложению сообщений WM_SETTEXT (посредством, допустим SetWindowText или SendMessage), синхронизировать изменения this->Caption с собственным заголовком...
Кода получится раза в два-три больше.
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
11.11.2010, 23:12
Теряем системный стиль.
Теряем кнопки, отвечающее за управление отображением.
Хотелось бы создать уникальное приложение.
Теряем заголовочную подпись.
Теряем возможность перетаскивания за край окна.
Довольно легко сделать.
Теряем возможность описания стыковки окна с крайними положениями экрана.
Теряем системное меню, привязанное к иконке формы.
Не всегда нужно.

Не по теме:

Цитата Сообщение от MikeSoft Посмотреть сообщение
С++ Builder - это не только набор для формошлёпства.
В голове не укладывается, Windows, с его закрытым кодом и программирование под него.

0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
12.11.2010, 03:11
Цитата Сообщение от Grey Посмотреть сообщение
Цитата Сообщение от MikeSoft
Теряем заголовочную подпись.
Теряем возможность перетаскивания за край окна.
Довольно легко сделать.
Ну как сказать... перетаскивание делается легко.
А вот о заголовочной надписи я писал выше. Придётся обрабатывать поступающие сообщения и делать изменения (естественно, это нужно, если делается более-менее нормальный проект).
Цитата Сообщение от Grey Посмотреть сообщение
В голове не укладывается, Windows, с его закрытым кодом и программирование под него.
А не нужно всё держать в голове. Нужно представлять принцип работы, а остальное описано в MSDN. Вас же не заставляют на WinAPI с нуля разрабатывать комплекс утилит? Всё запомнить - невозможно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.11.2010, 03:11
Помогаю со студенческими работами здесь

Создать на форме электронные часы, при нажатии на кнопку они начинают идти с 0 м : 25 с. До 10 м: 33 с. Добавить кнопку
Добрый день, в шараге учебная практика по Deplhi. В задании указано сделать часы, не могу понять как их делать. Понимаю, что нужен таймер и...

При нажатии на кнопку заголовок отображается другим цветом
Разработать html-документ, содержащий заголовок 1 уровня и с кнопкой &quot;Изменить заголовок&quot;. При нажатии на кнопку заголовок...

Добавить картинку в заголовок
нужно добавить картинку в заголовок после текста выделил кружком на фото как это сделать ? и изменить цвет самой полоски но только ее...

HttpWebRequest. Добавить заголовок
Доброй ночи! Нужно отправить POST запрос, в качестве одного из заголовков браузер отправляет такой: X-Requested-With:XMLHttpRequest ...

Добавить заголовок к Combobox
Есть Combobox, в нём группа Checkbox'ов. Как можно добавить заголовок в Combobox? То есть что-то типа такого: &lt;ComboBox...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru