Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Максимизация и минимизация окна, выравнивание относительно второго окна 
:(
    Опции темы
MacTep
Дата 30.1.2009, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Есть такая ситуация: на экране одновременно находится два окна, у одного из них (в нем отображается справка) бывает несколько состояний:
1) прилеплено к левому краю экрана (Align = alLeft);
2) прилеплено к правому краю экрана (Align = alRight);
3) не прилеплено ни к какому из краев экрана.
Вопрос: как сделать, чтобы при максимизации второго окошка его состояние становилось alClient, чтобы не перекрывать первого окошка. И так же вопрос - как минимизировать окно до размеров, которые были до максимизации?


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Rrader
  Дата 30.1.2009, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191



Цитата(MacTep @  30.1.2009,  15:17 Найти цитируемый пост)
Вопрос: как сделать, чтобы при максимизации второго окошка его состояние становилось alClient, чтобы не перекрывать первого окошка.

Пусть Form1 - окошко справки, прилеплено либо к правому краю, либо к левому. Тогда для Form2 (Align = alNone) надо написать такой код:
Код

type
  TForm2 = class(TForm)  
  private
    { Private declarations }
    procedure OnWMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
  public    
    { Public declarations }
  end;
...

procedure TForm2.OnWMSysCommand(var Msg: TWMSysCommand);
var
  FormRect: TRect;
begin
  inherited;
  if Msg.CmdType = SC_MAXIMIZE then
  begin
    SubtractRect(FormRect, Screen.WorkAreaRect, Form1.BoundsRect);
    BoundsRect := FormRect;
  end;
end;
 
Цитата

И так же вопрос - как минимизировать окно до размеров, которые были до максимизации?

Будет производиться автоматически

Это сообщение отредактировал(а) Rrader - 30.1.2009, 10:01


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
MacTep
Дата 30.1.2009, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Код почти рабочий... ;)
Но... Почему-то при максимизации форма наоборот как-то съеживается до минимальных размеров и пропадает с экрана... только по кнопке в панели задач приходится щелкать...


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Rrader
  Дата 30.1.2009, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191



Хм..посмотри тестовый проект smile 

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  Test.rar 7,68 Kb


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
MacTep
Дата 30.1.2009, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Странно.... Работает в проекте... ;)
Сейчас покопаюсь. Но вопрос все же задам...
Цитата

SubtractRect(FormRect, Screen.WorkAreaRect, Form1.BoundsRect);
Что делает?


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Rrader
  Дата 30.1.2009, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191



Вычитает из прямоугольника экрана прямоугольник формы-окошка справки. Очень лаконично smile 


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
MacTep
Дата 30.1.2009, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Хмм... Работает, но... У окна только оказывается размер максимизирован, а само состояние-то??? Обычное... А не как у максимизированного окна.


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Virtuals
Дата 30.1.2009, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: 3
Всего: 11



MacTep, 
почитай про
GetWindowPlacement
SetWindowPlacement
особое внимание на структуру TWindowPlacement. думаю станет немного понятней про состояния окон. smile 

пример использования:
Код

procedure TForm1.Button15Click(Sender: TObject);
var  d:TWindowPlacement;
     Hsize:integer;
begin
  D.length:=SizeOf(TWindowPlacement);
if GetWindowPlacement(wn,@d)then
 begin
HSize:= d.rcNormalPosition.Right-d.rcNormalPosition.Left;
 label1.Caption:=inttostr( d.rcNormalPosition.Left)
                +' '+inttostr( d.rcNormalPosition.Right)
                +' '+inttostr( HSize);

d.showCmd:=SW_SHOWNORMAL;
d.rcNormalPosition.Right:=HSize-1;
d.rcNormalPosition.Left:=1;
SetWindowPlacement(wn,@d);
 end;
end;


нормализует окно wn и двинет его в крайнее левое положение.
PM MAIL ICQ   Вверх
Rrader
  Дата 30.1.2009, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191



Цитата(MacTep @  30.1.2009,  18:10 Найти цитируемый пост)
Хмм... Работает, но... У окна только оказывается размер максимизирован, а само состояние-то??? Обычное... А не как у максимизированного окна.

Не очень понятно, что имеется в виду. Какое у максимизированного окна состояние? smile 


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0586 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.