Каков принятый способ использования фреймов в Delphi?

У меня была моя обычная прогулка вокруг так и наткнулся на некоторые обсуждения кадров.

Я в основном любитель Delphi, а не профессионал, поэтому мне пришлось научиться использовать TFrames по-своему:

  • создайте TFrame внутри его единицы.
  • добавьте эту единицу в предложение main form Uses.
  • есть частная переменная типа TFrame
  • OnCreate формы создает экземпляр TFrame и присоединяет его к TPanel как на создание и .Родитель!--6-->
  • на одном из моих действий, что TFrame.Visible: = True and .BringToFront.

Это моя практика после некоторого личного обсуждения.

какие еще способы можно использовать фреймы?

4 ответов


Это один из способов, и в этом нет ничего плохого. Другой способ-сделать это визуально. Таким образом, вы можете добавить фрейм в форму. для этого вам:

  • создайте свой фрейм.
  • перейти к форме, которую вы хотите поставить кадр на.
  • добавить компонент кадров (стандартная вкладка)
  • выберите кадр из выпадающего.
  • вот именно!

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

Frame1 := TMyFrame.Create(Self);
Frame1.Parent := Self;
// ...
Frame2 := TMyFrame.Create(Self); // bombs out with "a component with the name MyFrame already exists"

обходным путем для него является назначение другого имени для каждого экземпляра:

Frame1 := TMyFrame.Create(Self)
Frame1.Parent := Self;
Frame1.Name := "FirstFrame";
// ...
Frame2 := TMyFrame.Create(Self); // works now, there is no name conflict

вы даже можете пойти дальше, зарегистрировав свои кадры в качестве компонентов.

это запрещает редактировать свойства компонентов на фрейме, как только компонент фрейма находится в форме. Но я думаю, что это хорошо.

вам нужно еще одно, чем регистрация вашего фрейма в качестве компонента, как я объясняю в этой статье о Delphi-кадры в качестве визуальных компонентов – не забудьте свою веточку!.

это знание не мое: я получил его от!--9-->Рэй Конопка во время одного из его сессиина Delphi Live conference в Сан-Хосе в начале этого года.


Это скорее отрицательный ответ, но я попробовал маршрут, который включал повторное отображение TFrames для немного сложного GUI.

сначала все шло хорошо, но когда приложение созрело и больше событий начали летать, мне пришлось отключить, а затем обработать сообщения на некоторое время (20 мс) перед изменением, а затем все еще иногда возникали сбои при изменении кадра.

один из преступников, которых я в конце концов нашел, TPopmenu также регистрируется в глобальных структурах данных. Это уменьшило проблемы, но они все еще были, поэтому я отойду от концепции.