Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2016, 18:55   #1
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию Добавить панель в Caption формы

Можно ли как-то добавить панель в caption формы? Мне нужно разместить небольшую панельку справа перед кнопками свернуть, закрыть.
Dux вне форума Ответить с цитированием
Старый 11.01.2016, 19:16   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Делфиворлд закрыли, но из его сусеков можно нарыть вот такое:
Цитата:
Помещение VCL компонентов в область заголовка

Здесь есть хитрость:

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

Нижеприведенный проект включает в себя 2 формы и выпадающий список (combobox). После запуска программы список появляется в области заголовка главной формы. Два ключевых вопроса: 1) организация перехвата сообщения WM_MOVE главной формы; и 2) возвращение фокуса в главную форму после того, как пользователь нажмет на каком-либо элементе управления, способным иметь фокус (например, TComboBox, TButton и др.)

Я использую 32-битную Delphi 2.0 под Win95, тем не менее данный код должен работать с любой версией Delphi.

Вот исходный код главной формы:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    procedure FormResize(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormHide(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure WMMove(var Msg: TWMMove); message WM_MOVE;
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.DFM}

procedure TForm1.FormResize(Sender: TObject);
begin
  with Form2 do
  begin
    {Заменим мои магические числа реальной информацией SystemMetrics}
    Width := Form1.Width - 120;
    Top := Form1.Top + GetSystemMetrics(SM_CYFRAME);
    Left := ((Form1.Left + Form1.Width) - Width) - 60;
  end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  Form2.Show;
end;

procedure TForm1.FormHide(Sender: TObject);
begin
  Form2.Hide;
end;

procedure TForm1.WMMove(var Msg: TWMMove);
begin
  inherited;
  if (Visible) then
    FormResize(Self);
end;

end.

Вот исходный код для псевдо-заголовка. Данная форма может содержать любые элементы управления VCL, которые вы хотите установить в области заголовка главной формы. По существу, это - независимый диалог со следующими свойствами:
Код:
Caption='' {NULL строка}
Height={высота области заголовка}
Width={высота всех компонентов на форме}
BorderIcons=[] {пусто}
BorderStyle=bsNone
FormStyle=fsStayOnTop

И, наконец, исходный код для Form2:
Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    ComboBox1: TComboBox;
    procedure FormCreate(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

uses Unit1;

{$R *.DFM}

procedure TForm2.FormCreate(Sender: TObject);
begin
  Height := ComboBox1.Height - 1;
  Width := ComboBox1.Width - 1;
end;

procedure TForm2.ComboBox1Change(Sender: TObject);
begin
  Form1.SetFocus;
end;

procedure TForm2.FormResize(Sender: TObject);
begin
  ComboBox1.Width := Width;
end;

end.

Файл проекта (.DPR) довольно простой:
Код:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.RES}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.
Это все!

Хотя некоторые авторы книг утверждают:

"Вы не можете установить компоненты Delphi в заголовок окна, точнее, не существует никакого способа установить их там."

Зато существует иллюзия...
Проект Delphi World © Выпуск 2002 - 2003
Автор проекта: ___Nikolay

Rambler's Top100 Рейтинг@Mail.ru
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.01.2016, 20:31   #3
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Сильно много букав

Спасибо, буду разбираться.
Dux вне форума Ответить с цитированием
Старый 13.01.2016, 01:25   #4
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

многобукаф...жеесть, теперь нам только графику одну подавай, картинки красивые, а читать никто не хочет.

Вдруг война, у нас же все иностранное, инфа проходит через серверы иностранцев, своего практически ничего нет, без чтения мы не сможем создать свои ИС, на графику, сначала, не стоит будет даже рассчитывать, ценен будет каждый байт информации...простите, оффтоп
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 13.01.2016, 10:47   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Правильно, это делать через хук WH_CBT, с перехватом wndProc, куда дописываете рисование своих плюшек. Таким образом оно и ваше, в тоже время красиво рисуется программой, куда встроено. Инфа на MSDN.

Последний раз редактировалось Человек_Борща; 13.01.2016 в 10:54.
Человек_Борща вне форума Ответить с цитированием
Старый 13.01.2016, 11:21   #6
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,463
По умолчанию

А форму без синего воротничка использовать не проще ? На его месте разместить нужную панель.
Кнопки "свернуть и закрыть" - самодельные, но похожие...
Репутация: полный "0"

Последний раз редактировалось zvygin1964; 13.01.2016 в 12:18.
zvygin1964 вне форума Ответить с цитированием
Старый 13.01.2016, 12:07   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А форму без синего воротничка использовать не проще ?
Проще конечно же )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.01.2016, 12:47   #8
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Цитата:
Сообщение от zvygin1964 Посмотреть сообщение
А форму без синего воротничка использовать не проще ? На его месте разместить нужную панель.
Кнопки "свернуть и закрыть" - самодельные, но похожие...
А вот это интересная идея!
Dux вне форума Ответить с цитированием
Старый 13.01.2016, 15:30   #9
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
А вот это интересная идея!
а вот её воплощение:

Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 13.01.2016, 15:35   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Я то думал, это в чужом окне надо... а тут, скучненько.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить кнопку на панель EXCEL Евгений Таб Microsoft Office Excel 7 08.03.2015 00:56
Добавить панель подменю WennY C++ Builder 5 06.03.2013 22:09
Присвоение картинки в Caption формы Shouldercannon Общие вопросы Delphi 8 10.07.2012 11:12
Админ панель, как добавить фото polepropilen Свободное общение 0 21.07.2010 13:11