Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по использованию Frame   Найти похожие ветки 

 
Abcdef123   (2007-07-23 07:06) [0]

Здравствуйте, Мастера. Я прочла хелп по компоненту frame, создала 2 фрейма, положила их на одну форму и хочу, чтоб в зависимости от режима вызова этой формы, был виден и доступен только один из этих фреймов. Но, почему то у меня всегда видет один и тот же фрейм, тот, который в режиме разработки лежит сверху. Я даже принудительно пробовала BringToFront - не помогло. Что не так? Вот процедура определения, какой фрейм должен быть виден.

procedure TFRM_FilterType.ShowSelections;
begin
 if RptType in [TRptServFilter] then
    FRM_FilterType.FR_ServFilter.BringToFront;
 if RptType in [TRptPlantFilter] then
    FRM_FilterType.FR_PlantFilter.BringToFront;

 FRM_FilterType.FR_ServFilter.Visible := (RptType in [TRptServFilter]);
 FRM_FilterType.FR_ServFilter.Enabled := (RptType in [TRptServFilter]);
 FRM_FilterType.FR_PlantFilter.Visible := (RptType in [TRptPlantFilter]);
 FRM_FilterType.FR_PlantFilter.Enabled := (RptType in [TRptPlantFilter]);
end;


 
Elen ©   (2007-07-23 07:58) [1]


>  if RptType in [TRptServFilter] then
>  if RptType in [TRptPlantFilter] then

Проверь эти условия. Может у тебя они оба срабатывают.
Кстати тут лучше написать так :


if RptType in [TRptServFilter] then
   FRM_FilterType.FR_ServFilter.BringToFront
else
   FRM_FilterType.FR_PlantFilter.BringToFront


 
Abcdef123   (2007-07-23 12:39) [2]

to Elen
1 Условие на тип  RptType срабатывает нормально, то есть определяет какой [TRptServFilter] или [TRptPlantFilter] запущен на данный момент. И выполняет все строки правильно. Но потом, на форме всегда впереди один и тот де фрейм. Причем, конкретнее, если  к примеру фрейм типа TRptPlantFilter физически делит сверху, то когда запускаем программу с типом TRptServFilter, то на выполнении TRptPlantFilter сверху, а фрейм TRptServFilter немного из-за него виден, так как он побольше размером. То есть получается, что команда visible := False не срабатывает физически на верхний фрейм.
1 Насчет предложения if ELSE  на данном этапе можно, но в будущем я планировала бы еще другие фреймы использовать на этой же форме. И, поскольку я говорю, что все строки программы выполняются прявильно (я пошагово прошла проверила значения), то это предложение ничего не улучшит.
Может с фреймами надо как-то иначе работать?? Подскажите, что же не так?


 
Elen ©   (2007-07-23 14:30) [3]


> Может с фреймами надо как-то иначе работать?? Подскажите,
>  что же не так?

вот пример переключения по фреймам:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls, Unit4, Unit3, Unit2;

type
 TForm1 = class(TForm)
   Frame21: TFrame2;
   Frame31: TFrame3;
   Frame41: TFrame4;
   RadioGroup1: TRadioGroup;
   procedure RadioGroup1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
//****** CASE ******
case RadioGroup1.ItemIndex of
  0:Frame21.BringToFront;
  1:Frame31.BringToFront ;
else Frame41.BringToFront;
end;
//****** END CASE ****** {}
end;

end.


Ничего особенного.
Где-то в условии ты запуталась, скорее всего.


 
Loginov Dmitry ©   (2007-07-24 00:35) [4]

> FRM_FilterType.FR_ServFilter.Visible := (RptType in [TRptServFilter])
> ;
> FRM_FilterType.FR_ServFilter.Enabled := (RptType in [TRptServFilter])
> ;
> FRM_FilterType.FR_PlantFilter.Visible := (RptType in [TRptPlantFilter])
> ;
> FRM_FilterType.FR_PlantFilter.Enabled := (RptType in [TRptPlantFilter])
> ;


К чему относится переменная FRM_FilterType?
Убери обращение к ней из процедуры TFRM_FilterType.ShowSelections.


 
Abcdef123   (2007-07-24 05:06) [5]

To Loginov Dmitry:
Спасибо, большое - помогло!!! :-) Сейчас показывает правильно фреймы.

Правда сама идея использовать фреймы не прошла у меня. :-( Компоненты (TEdit), которые я положила на фреймы я планировала использоавать как параметры xml файла, но, обработчик xml не видит эти элементы, пытается искать только на самой форме FRM_FilterType, а то ято на этой форме еще есть фреймы обработчик не рассматривает. Я думала, что фреймы рассматриваются типично панелям формы, а оказалось нет :-(
Или все же должны вести себя как панели, может просто у меня опять не там ошибка?
Заранее должна оговориться, что программа-обработчик xml  файлов написана не мной, и она используется для всех проектов нашей компании, так что я не имею права менять что-либо в этой программе.
Есть ли советы или пояснения насчет фреймов в этой проблемме?


 
Leonid Troyanovsky ©   (2007-07-24 10:42) [6]


> Abcdef123   (24.07.07 05:06) [5]

> Или все же должны вести себя как панели, может просто у
> меня опять не там ошибка?

А обработчик видит лежащие на панели TEdit?

--
Regards, LVT.


 
Abcdef123   (2007-07-24 11:34) [7]

to Leonid Troyanovsky:
Если на форму положить панель вместо фрейма, и на ней разместить TEdit компоненты, то да - обработчик видит эти TEdit!
У нас в проекте все так и сделано, через панели, но я на новых разработках хочу использовать фреймы вместо панелей, так как модифицировать фрейм проще, чем на одной форме пытаться выйти на панель, которйю надо вдруг модифицировать.
Могу для полноты информации дать конкретно строку обратотчика, где выдает ошибку выполнения:
if repBuilder.InputForm.FindComponent(currentElement.nodeName) <> nil then
Я в пошаговом выполнении посмотрела, InputForm, где ищутся эти компоненты FRM_FilterType (та, что содержит фреймы). Начальник даже дал добро модифицировать обработчик (чтоб ничего старое не повредить, конечно), я вот думаю, как определить какой фрейм в этот момент надо рассматривать, то есть как прописать, какой фрейм активный на момент выполнения обработчика. Как это прописать?


 
Плохиш ©   (2007-07-24 12:11) [8]


> Могу для полноты информации дать конкретно строку обратотчика,
>  где выдает ошибку выполнения:
> if repBuilder.InputForm.FindComponent(currentElement.nodeName)
> <> nil then

FindComponent находит только те компоненты, родителем для которых является, в данном случае, repBuilder.InputForm. Для компонентов, лежащих на фрейме, родителем является фрейм, т.к. и компонентом, отвечающим за их отображение. Форма ничего не знает о них, т.ж. как и в общем случае ничего не знает о фрейме.
В Вашем случае надо, первое найти компонент отвечающий за отображение фрейма (ParentWindow), а за тем проверить является ли он дочерним для формы repBuilder.InputForm.


 
Abcdef123   (2007-07-24 12:34) [9]

to Плохиш:
Теоретически я это знаю, как практически это прописать вот не смогла пока. :-(
Тут вот ведь надо четко  обработчику указать, какой из фреймов формы на данный момент надо обрабатывать. Могли бы вы пример привести, как прописать опреление ParentWindow и проверку на дочерность, плз?


 
Плохиш ©   (2007-07-24 12:41) [10]


> Abcdef123   (24.07.07 12:34) [9]

Тут можно идти с двух сторон:
1. Проводить рекурсивный поиск фрейма в коллекции Controls формы и всех компонентов из Controls.

или

2. Просматривать список фраймов и проверять у них свойство ParentWindow и если оно не равно nil, то пытаться найти этот компонент в списке Components формы.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.038 c
15-1184897351
Slider007
2007-07-20 06:09
2007.08.19
С днем рождения ! 20 июля 2007 пятница


2-1185343359
ZZZZ
2007-07-25 10:02
2007.08.19
Защита программы от дебагеров


1-1181498306
ins
2007-06-10 21:58
2007.08.19
Открытие TreeView


15-1185096694
DeadMeat
2007-07-22 13:31
2007.08.19
Грустно, но зачастую правда.


2-1183643337
vegarulez
2007-07-05 17:48
2007.08.19
Вопрос про SW_MAXIMIZE.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский