Каков принятый способ использования фреймов в 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 также регистрируется в глобальных структурах данных. Это уменьшило проблемы, но они все еще были, поэтому я отойду от концепции.