Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Фрейм на fsMDIForm / 14 сообщений из 14, страница 1 из 1
19.11.2018, 16:25
    #39735204
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фрейм на fsMDIForm
Было обычное приложение с несколькими модальными формами. На главной форме размещались разные фреймы, в зависимости от условий, так:
Код: pascal
1.
2.
    Frame := TfrCalendar.Create(Self);
    Frame.Parent := Self;


Юзеры попросили MDI интерфейс. Переделал. Теперь если фрейм показан, то формы с fsMDIChild при их показе не видны. Убираешь фрейм - все ок. Как можно подружить фрейм с MDI формой - чтобы оба показывались?
...
Рейтинг: 0 / 0
19.11.2018, 16:39
    #39735223
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фрейм на fsMDIForm
Наверно никак. Это особенность МДИ.
...
Рейтинг: 0 / 0
19.11.2018, 18:30
    #39735275
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фрейм на fsMDIForm
LiYingЮзеры попросили MDI интерфейс. Переделал. Теперь если фрейм показан, то формы с fsMDIChild при их показе не видны. Убираешь фрейм - все ок. Как можно подружить фрейм с MDI формой - чтобы оба показывались? Вопрос задан сумбурно. Приходится гадать. Предполагаю, что надо создавать фреймы для каждого своего местоположения отдельно.

L_argoНаверно никак. Это особенность МДИ. Какая особенность MDI?
...
Рейтинг: 0 / 0
19.11.2018, 18:54
    #39735278
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фрейм на fsMDIForm
DimonkaВопрос задан сумбурно. Приходится гадать. Предполагаю, что надо создавать фреймы для каждого своего местоположения отдельно.
Уточняю - фрейм создается с родителем = главной форме и выравниваем = alClient.
...
Рейтинг: 0 / 0
19.11.2018, 19:14
    #39735281
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фрейм на fsMDIForm
LiYingDimonkaВопрос задан сумбурно. Приходится гадать. Предполагаю, что надо создавать фреймы для каждого своего местоположения отдельно.
Уточняю - фрейм создается с родителем = главной форме и выравниваем = alClient.А потом ты меняешь Parent у фрейма на MDIWindow? Проблем не должно быть.
...
Рейтинг: 0 / 0
19.11.2018, 19:36
    #39735286
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фрейм на fsMDIForm
DimonkaА потом ты меняешь Parent у фрейма на MDIWindow? Проблем не должно быть.
Ничего не меняю. По шагам, если:
1. сначала на гл.форме создать фрейм (как в 1м посте)
2. создаем/показываем fsMDIChild форму так FMDIJourPutevki := TFJournal.Create(Application);
То fsMDIChild форма не видна.
Если сделать наоборот, то форма видна, а после создания фрейма опять не видна. Надеюсь, не запутал окончательно :)
В общем, видно что-либо одно - или фрейм, или мди-форма.
...
Рейтинг: 0 / 0
19.11.2018, 19:52
    #39735296
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фрейм на fsMDIForm
LiYingНичего не меняю. По шагам, если:
1. сначала на гл.форме создать фрейм (как в 1м посте)
2. создаем/показываем fsMDIChild форму так FMDIJourPutevki := TFJournal.Create(Application);
То fsMDIChild форма не видна.
Если сделать наоборот, то форма видна, а после создания фрейма опять не видна. Надеюсь, не запутал окончательно :)
В общем, видно что-либо одно - или фрейм, или мди-форма. А-а-а, допёрло. Фрейм и MDI-окно делят одно и тоже пространство на форме. Ты видишь только тот контрол, который был создан последним с Align = client. Сделай нужному компоненту BringToFront и увидишь его вместо остальных. :-)
...
Рейтинг: 0 / 0
20.11.2018, 09:35
    #39735430
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фрейм на fsMDIForm
Dimonka,

В том-то и дело, что BringToFront не помогает, не становится видимой форма с fsMDIChild...
...
Рейтинг: 0 / 0
20.11.2018, 10:09
    #39735445
ziv-2014
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фрейм на fsMDIForm
LiYing, Без танцев с бубном ClientHandle заменить у основной формы не получится. Придется много что переписывать в VCL.
...
Рейтинг: 0 / 0
20.11.2018, 10:18
    #39735450
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фрейм на fsMDIForm
Создавайте фрейм на отдельной fsMDIChild-форме :)
Правда тогда непонятно, зачем нужен фрейм.
...
Рейтинг: 0 / 0
20.11.2018, 11:17
    #39735488
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фрейм на fsMDIForm
Всё ясно - подружить нельзя. Всем спасибо :)
...
Рейтинг: 0 / 0
20.11.2018, 13:07
    #39735586
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фрейм на fsMDIForm
LiYing,

Контролы, находящиеся на форме уменьшают пространство для MDI-окон. Просто помести свой фрейм в другое MDI-окно и будет тебе счастье.
...
Рейтинг: 0 / 0
20.11.2018, 14:40
    #39735656
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фрейм на fsMDIForm
DimonkaПросто помести свой фрейм в другое MDI-окно и будет тебе счастье.А смысл в фрейме ? :)
...
Рейтинг: 0 / 0
20.11.2018, 14:56
    #39735667
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фрейм на fsMDIForm
L_argoDimonkaПросто помести свой фрейм в другое MDI-окно и будет тебе счастье.А смысл в фрейме ? :) Я так понял, что у тебя фреймы уже готовы. Просто создаёшь типовые MDI окна и кидаешь в них свои фреймы:

Код: pascal
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.
type
  TFormMDIChild = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    FFrame: TFrameBase;
    procedure SetFrame(const Value: TFrameBase);
    { Private declarations }
  public
    property Frame: TFrameBase read FFrame write SetFrame;
    { Public declarations }
  end;

implementation

{$R *.dfm}

{ TFormMDIChild }

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

procedure TFormMDIChild.SetFrame(const Value: TFrameBase);
begin
  FFrame := Value;
  if FFrame <> nil then
  begin
    FFrame.Parent := Self;
    FFrame.Align := alClient;
  end;
end;

....
  // А потом что-то вроде
  TFormMDIChild.Create(Self).Frame := TMyFrame.Create(Self);
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Фрейм на fsMDIForm / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]