Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

не могу изменить положение формы [D6]


ИгорьК ©   (2002-11-18 15:59:00) 

в OnShow пишу:
Top := ((Owner as TForm).ClientHeight - Height) div 2;
Left := ((Owner as TForm).ClientWidth - Width) div 2;

Top и Left меняются, но на экране форма все равно остается на прежнем месте, хотя если на форму кинуть кнопку и по OnClic делать тоже-самоеЮ то все OK. Это почему так?


Игорь Шевченко   (2002-11-19 16:11:00) [1]

ИгорьК (19.11.02 14:37)

Руки приложить - так все можно. Я свои приложил - очередь за тобой.

Успехов!


ИгорьК   (2002-11-19 14:37:00) [2]

Еще вопрос к г-ну Шевченко ;-).
По поводу максимизации MDI окон. Все как-бы замечательно, но возможно-ли сделать так, что-бы и обратно размер можно было-бы вернуть после максимизации? Иконка так и остается с одним окошком.


ИгорьК   (2002-11-18 17:32:00) [3]

ОК! Все работает, спасибо!!!


Игорь Шевченко   (2002-11-18 17:19:00) [4]


type
TfAbstChild = class(TForm)
private
procedure WMSysCommand (var Message : TMessage); message WM_SYSCOMMAND;
.....
end;


И все Child"ы от такой формы наследовать...


ИгорьК   (2002-11-18 17:16:00) [5]

Уряяяя! Заработало! Это про GetClientRect.
А про WMSysCommand - а где его объявлять нужно? А то, что-то у меня не срабатывает?


Игорь Шевченко   (2002-11-18 16:56:00) [6]

В случае MDI:

var
AREct : TRect;

...
Windows.GetClientRect(Application.MainForm.ClientHandle, ARect)
это область, где живут MDIChild"ы (детский сад для MDI).

Кстати, о Maximize:
procedure TfAbstChild.WMSysCommand(var Message: TMessage);
var ARect : TRect;
begin
if Message.wParam = SC_MAXIMIZE then begin
Message.Result := 0;
Windows.GetClientRect(Application.MainForm.ClientHandle, ARect);
SetWindowPos(Handle, 0, ARect.Left, ARect.Top, ARect.Right - ARect.Left,
ARect.Bottom - ARect.Top, SWP_NOZORDER);
end else
inherited;
end;


ИгорьК   (2002-11-18 16:47:00) [7]

В случае MDI почему-то не учитываются menu, status и toolbar. Например по разрешении 800х600 получаю clientwidth=573, при том, что есть MAinMenu, toolbar и statusbar. Это как побороть?


Переяслов Григорий   (2002-11-18 16:34:00) [8]

Попробуй не onShow, а onActivate или onCreate
По центру Left := Screen.Width div 2 - Form1.Width div 2;


MBo   (2002-11-18 16:06:00) [9]

>длину/ширину свободной области главной формы?
clientrect


ИгорьК   (2002-11-18 16:05:00) [10]

и еще - как-то странно считается ширина/высота в случае MDI приложения. Даже "на глаз" видно что не по центру создалась форма. А как правильно сделать по-центру? С учетом statusbar, menu, панелей инструментов. Как определить длину/ширину свободной области главной формы?


Наверх

Титульная страница Поиск, карта сайта Написать письмо