Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Многооконное приложение, Проблема с fsMDIChild 
:(
    Опции темы
Vladimir_K
Дата 13.12.2006, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Пожалуйста, помогите разобраться с созданием многооконного приложения.
Идея такая: имеется главная форма приложения, из которой можно вызывать несколько дочерних форм с графиками.
Свойство FormStyle главной формы я установил в fsMDIForm, свойство FormStyle дочерней формы - в fsMDIChild. На гл.форме есть кнопка "График", по щелчку на которой открывается форма с графиком; если щелкнуть еще раз - открывается еще одна форма и т.д.
Дочерние формы можно упорядочивать каскадом, по вертикали и по горизонтали.
Проблема вот в чем.
1. Как сделать, чтобы главная форма при запуске разворачивалась на весь экран? WindowState устанавливал в wsMaximized - форма хоть и развернута полностью, но смещена немного вниз (нижний скрол почти не виден).
2. Когда запускается дочерняя форма, то сквозь нее видно все, что расположено на главной форме. Элементы гл. формы даже перекрывают элементы дочерней. Как этого избежать?
3. Как закрывать дочерние формы?
4. При перемещении дочерней формы по главной, на главной появляются скролы, но они мне не нужны. Как их убрать?
5. Если дочернюю форму развернуть на весь экран, то потом ее невозможно восстановить.
Есть и еще кое-какие непонятки, но с ними я попробую разобраться сам, а вот эти вопросы я сам не могу решить. Помогите кто чем может.

Это сообщение отредактировал(а) Vladimir_K - 13.12.2006, 18:46
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
Guedda
Дата 13.12.2006, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

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



Модератор: Пожалуйста, один топик - один вопрос.
1) wsMaximized
2) покажи код
3) В FormClose дочерней формы напиши Action := caFree;
4) Отлавливай сообщения создания скроллов
5) Возможно. Покажи код.


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
x77
Дата 13.12.2006, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



1. либо поставить Align=alClient, либо в OnCreate руками задать Top, Left, Width и Height.
2. а почему так происходит? это не стандартное поведение, смотрите, что вы ещё накрутили в дочерней форме помимо свойства FormStyle. обычно таких проблем нет smile
3. в OnClose дочерней формы надо написать Action := caFree;
4. у главной формы убрать AutoScroll := FALSE;
5. так будет происходить, пока вы не зададите для главной формы главное меню smile Альтернатива - вешать на саму форму сворачивающую кнопку.

Добавлено @ 18:48 
Guedda, я думаю, там и есть wsMaximized, и что это у автора очепютка. а я ещё я думаю, что у него стоит Position = poScreenCenter. именно в этом случае размер формы высчитывается корректно, с учётом высоты панели задач, а центрируется она - криво, залезая на эту самую панель задач. 

и здесь два выхода, либо отключить центрирование (и всё станет хорошо), либо отключить wsMaximized и юзать другие способы. тогда всё тоже будет хорошо, но центрирование при этом всё равно потеряет смысл smile


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Vladimir_K
Дата 13.12.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



wsMaximized - разворачивает окно, но смещает немного вниз, передвинуть нельзя.
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
x77
Дата 13.12.2006, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



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

Добавлено @ 18:52 
Vladimir_K, чему равен Position? 


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Vladimir_K
Дата 13.12.2006, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Guedda @  13.12.2006,  18:40 Найти цитируемый пост)
Модератор: Пожалуйста, один топик - один вопрос.

Извините, но я подумал, что эти вопросы достаточно тесно связаны, чтобы их можно было объединить под одной темой.
Цитата

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

Я просто не успел - настолько быстро пришли ответы. Извиняюсь.

Это сообщение отредактировал(а) Vladimir_K - 13.12.2006, 19:05
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
x77
Дата 13.12.2006, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Vladimir_K @  13.12.2006,  19:03 Найти цитируемый пост)
Я просто не успел - настолько быстро пришли ответы. Извиняюсь.


так извинятся не за что, вам же хуже, если из-за  путаницы вам неправильно ответят ;)


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Vladimir_K
Дата 13.12.2006, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Guedda @  13.12.2006,  18:40 Найти цитируемый пост)
1) wsMaximized
2) покажи код
3) В FormClose дочерней формы напиши Action := caFree;
4) Отлавливай сообщения создания скроллов
5) Возможно. Покажи код. 

wsMaximized в Win'98 работает нормально, пробовал в 'XP - там окно сдвинуто вниз.
Action := caFree; - помогло, спасибо.
Код выложу.
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
x77
Дата 13.12.2006, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Vladimir_K, дубль три, чему равно свойство Position у главной формы?

wsMaximized нормально работает везде. и только если Position = poScreenCenter - то окно будет сдвинуто вниз на панель задач, причём передвинуть его будет невозможно. и это, в принципе, не глюк.


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Vladimir_K
Дата 13.12.2006, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(x77 @  13.12.2006,  18:42 Найти цитируемый пост)
я ещё я думаю, что у него стоит Position = poScreenCenter. именно в этом случае размер формы высчитывается корректно, с учётом высоты панели задач, а центрируется она - криво, залезая на эту самую панель задач. 

poDesktopCenter
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
x77
Дата 13.12.2006, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Vladimir_K, если у вас один монитор - то это тоже самое smile DesktopCenter означает, что форма находится в середине десктопа. если десктоп раздвинут на два (10) мониторов,  то форма ляжет в его центр. если монитор один, то и десктоп равен его экрану, т.е. Screen'у.

теперь смотрите. с одной стороны вы говорите форме WindowState = wsMaximized (что означает, что размер формы должен быть равен всему экрану, кроме панели задач - и форма это делает!), с другой стороны, вы говорите Position = poDesktopCenter (что заставляет форму центрироваться посередине экрана). а куда она может центрироваться? правильно, спуститься вниз, заехав ровно на половину "незанятой" панели задач.

проще всего просто отключить центрирование, т.е. поставить Position = poDesigned.


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Vladimir_K
Дата 13.12.2006, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



У главной формы установил AutoScroll := FALSE; не помогает - скролы появляются.

На главной форме пока всего одна кнопка.
Код:
Код

procedure TGlavnaya.BGraf1Click(Sender: TObject);
var G:TGraph;
begin
 Application.CreateForm(TGraph,G);
 G.Show;
end;


Код дочерней формы:
Код

unit Graphing;

interface

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

type
  TGraph = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Graph: TGraph;

implementation

{$R *.dfm}

procedure TGraph.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;

end.

--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
Vladimir_K
Дата 13.12.2006, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Главная форма:

Action
ActiveControl
Align                               alNone
AlphaBlend                    False
AlphaBlendValue           255
Anchors                         [akLeft,akTop]
AutoScroll                      False
AutoSize                        False
BiDiMode                       bdLeftToRight
BorderIcons                   [biSystemMenu,biMinimize,biMaximize]
BorderStyle                    bsSizeable
BorderWidth                   0
Caption                          Myprog
ClientHeight                   471
ClientWidth                    647
Color                                   clBtnFace
Constraints                     (TSizeConstraints)
Ctl3D                              True
Cursor                            crDefault
DefaultMonitor               dmActiveForm
DockSite                        False
DragKind                        dkDrag
DragMode                      dmManual
Enabled                         True
Font                               (TFont)
FormStyle                       fsMDIForm
Height                            498
HelpContext                   0
HelpFile
HelpKeyword
HelpType                       htContext
Hint
HorzScrollBar                 (TControlScrollBar)
Icon                               (None)
KeyPreview                    False
Left                                363
Menu
Name                             Glavnaya
ObjectMenuItem
OldCreateOrder              False
ParentBiDiMode             True
ParentFont                     False
PixelsPerInch                 96
PopupMenu
Position                          poDesigned
PrintScale                      poProportional
Scaled                           True
ScreenSnap                   False
ShowHint                       False
SnapBuffer                     10
Tag                                0
Top                                104
TransparentColor           False
TransparentColorValue       clBlack
UseDockManager         False
VertScrollBar                  (TControlScrollBar)
Visible                            True
Width                             655
WindowMenu
WindowState                 wsMaximized

Дочерняя форма:

Action
ActiveControl
Align                               alNone
AlphaBlend                    False
AlphaBlendValue           255
Anchors                         [akLeft,akTop]
AutoScroll                      True
AutoSize                        False
BiDiMode                       bdLeftToRight
BorderIcons                   [biSystemMenu,biMinimize,biMaximize]
BorderStyle                    bsSizeable
BorderWidth                   0
Caption                          Гpaфики
ClientHeight                   306
ClientWidth                    688
Color                                   clBtnFace
Constraints                     (TSizeConstraints)
Ctl3D                              True
Cursor                            crDefault
DefaultMonitor               dmActiveForm
DockSite                        False
DragKind                        dkDrag
DragMode                      dmManual
Enabled                         True
Font                               (TFont)
FormStyle                       fsMDIChild
Height                            333
HelpContext                   0
HelpFile
HelpKeyword
HelpType                       htContext
Hint
HorzScrollBar                 (TControlScrollBar)
Icon                                None
KeyPreview                    False
Left                                199
Menu
Name                             Graph
ObjectMenuItem
OldCreateOrder              False
ParentBiDiMode             True
ParentFont                     False
PixelsPerInch                 96
PopupMenu
Position                          poDesktopCenter
PrintScale                      poProportional
Scaled                           True
ScreenSnap                   False
ShowHint                       False
SnapBuffer                     10
Tag                                0
Top                                246
TransparentColor           False
TransparentColorValue       clBlack
UseDockManager         False
VertScrollBar                  (TControlScrollBar)
Visible                            True
Width                             696
WindowMenu
WindowState                 wsNormal
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
Vladimir_K
Дата 13.12.2006, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Guedda @  13.12.2006,  18:40 Найти цитируемый пост)
4) Отлавливай сообщения создания скроллов

Как отлавливать сообщения скроллов?
А отловив их, нужно как-то запрещать появление скроллов?

Это сообщение отредактировал(а) Vladimir_K - 14.12.2006, 08:25
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
Vladimir_K
Дата 14.12.2006, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Если развернуть полностью одно дочернее окно, то разворачиваются все. После этого пробую первое окно закрыть - закрывается, но остается следующее полностью развернутое окно. Непонятно.
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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