обращение к Tframe

valentofer

Active Member
10.11.2007
38
0
#1
Проблема такая. У меня на на фрэйме расположена сетка DBGrid. Обращение из главной формы приложения к компонентам расположеным на Frame не происходит, т.е. я немогу обратится к DBGrid расположенному на Фрэйме. Насколько я понял, главная форма невидет Frame, потому как фрэйм создается при исполнении приложения?!. Как можно обратится к компонентам на TFrame ? :)
Спасибо заранее
 
A

Aleksey

Гость
#2
Фрэйм доступен во время design time, как отдельная форма со своим модулем. Ты его наполняешь компонентами, процедурами и данными. Теперь можно на любые фомы проекта вставлять фреймы с панели инструментов, копирующие твой исходный фрейм.
Далее, если фрэйм на форме лежит, то form1.Frame21.DBGrid1. ...

Если я чего-то неправильно понимаю, то прошу ногами не бить... :)
 

valentofer

Active Member
10.11.2007
38
0
#3
немного неправильно понимаешь)))
У меня есть главная форма(MainForm), на ней в процессе работы программы открываются фрэймы. На каждом из фрэймов у меня валяются компоненты для доступа к таблицам БД (DbGrid, dbedit и прочее). Допустим на MainForm есть кнопка "Редактировать", по нажатию на которую нужно редактивать активную таблицу БД (на открытом в данный момент фрэйме). так вот что бы это сделать нужно получить доступ к компонентам фрэйма: Frame1.adotable1.append (для примера). но из MainForm нельзя такое сделать (Посылает куда подальше: пишет неописанный индификатор Frame1). Как можно обратится к компонентам расположенным на Фрэйме???

P.S. Фрэймы созданы и наполнены компонентами))) Вопрос в том как из ФОРМЫ обратится к ФРЭЙМУ
 

valentofer

Active Member
10.11.2007
38
0
#5
Код:
 var
MainForm: TMainForm;
CurrentFrame : TFrame;
Код:
if Assigned(CurrentFrame) then FreeAndNil(CurrentFrame);
CurrentFrame := TOtgruzkaViewFrame.Create(MainForm);
MainForm.UpdateFrame(Sender);
ну плюс там еще процедура, которая определяет местоположение фрэйма.... ну эт неважно
 

valentofer

Active Member
10.11.2007
38
0
#7
мембер не мембер, Мне кто нить ответит как сделать чтобы CurrentFrame.adotable1.append; скомпилилось???
и как обьявление
Код:
Private
MainForm: TMainForm;
CurrentFrame : TFrame;
поможет мне в компиляции
Код:
CurrentFrame.adotable1.append
???
 
E

etc

Гость
#8
как сделать чтобы frame1.adotable1.append; скомпилилось
Надо правильно запрограммировать.
Что непонятно?

frame1.adotable1.append; - так делать не очень красиво.
Лучше определить новый метод фрэйма типа -
Код:
procedure AppendData;
begin
adotable1.append;
end;
Хоть и больше писать, зато принципы ООП (инкапсуляция) поддержаны. Да и потом, при внесении изменений в логику, вам не придется искать все места в коде программы, где было такое, а просто заменить в одном лишь месте и везде уже работает.

Код:
TMainForm = classs(TForm)
....
private
CurrentFrame : TFrame;
...
end;

//// далее где-то в коде главной формы
begin
...
if Assigned(CurrentFrame) then begin
if CurrentFrame is TFrame1 then
(CurrentFrame is TFrame1).AppendData; // ну или (CurrentFrame is TFrame1).adotable1.append;
...
if CurrentFrame is TAnotherFrame then
(CurrentFrame is TAnotherFrame).AppendData;
...
end;
...
end;
Все просто ...
 

valentofer

Active Member
10.11.2007
38
0
#9
ну почти так и я обращаюсь к АДоТэйблу:
Код:
if assigned(CurrentFrame) then
recCount:= TOtgruzkaViewFrame(CurrentFrame).adotable1.recordcount;
так что особой разницы между твоим предложением и моим, я невижу!
а попроще способа нету?

и еще.. Насчет как правильно, и как неправильно: когда остается 5 дней до сдачи диплома, а он у тебя еще сделан наполовину, ты небудешь задумыватся о всех правилах ООП :rolleyes:
 
E

etc

Гость
#10
ну почти так и я обращаюсь
Почти да не так, это во первых а во вторых если у вас тип класа фрейма всего один то такие хороводы тут нафик не нужны!
так что особой разницы между твоим предложением и моим, я невижу!
Вашего до этого и видно небыло.
Проще только за деньги.
Насчет как правильно, и как неправильно: когда остается 5 дней до сдачи диплома, а он у тебя еще сделан наполовину, ты небудешь задумыватся о всех правилах ООП
Конечно не будешь, за 5 до сдачи диплома это надо уже знать как отче наш, и писать правильно, не задумываясь, даже если тебя разбудять ночью и сразу за клаву посадят!
 

valentofer

Active Member
10.11.2007
38
0
#11
Вашего до этого и видно небыло.
Стесьняюсь спросить, а это что?
Цитата(etc @ 29:05:2008, 16:37 )
Как?

Код
var
MainForm: TMainForm;
CurrentFrame : TFrame;


Код
if Assigned(CurrentFrame) then FreeAndNil(CurrentFrame);
CurrentFrame := TOtgruzkaViewFrame.Create(MainForm);
MainForm.UpdateFrame(Sender);

ну плюс там еще процедура, которая определяет местоположение фрэйма.... ну эт неважно
это надо уже знать как отче наш, и писать правильно, не задумываясь, даже если тебя разбудять ночью и сразу за клаву посадят!
Для ООП есть С++, а в делфятине никто неписал и писать так небудет, ну кроме вас конечно.
Понимаете в чем дело, мне ООП в Дипломе нафиг ненужно, так как никто этой прогой в дальнейшем пользоватся не будеть. Поглядят , оценку поставят и все.... На этом жизнь программы обрывается нажатием Шифт+Делит. А все ваши указания по поводу как правильно... мне совершенно никчему, честное пионерское слово :rolleyes: Безусловно, в жизни все эти правила пригодятся!, но не в делфе и не в дипломе!

P.S. Ладно, спасибо всем за исчерпывающие ответы)), из которых я узнал что чтобы обратится к свойству обьекта, нужно все переписать на ООП :P Тему закрываю
 
E

etc

Гость
#12
Стесьняюсь спросить, а это что?
Это создание, разве нет? Нигде обращение к уже созданному нет, вы же про это тему создавали или тоже нет?
Для ООП есть С++, а в делфятине никто неписал и писать так небудет, ну кроме вас конечно.
Понимаете в чем дело, мне ООП в Дипломе нафиг ненужно, так как никто этой прогой в дальнейшем пользоватся не будеть. Поглядят , оценку поставят и все.... На этом жизнь программы обрывается нажатием Шифт+Делит. А все ваши указания по поводу как правильно... мне совершенно никчему, честное пионерское слово Безусловно, в жизни все эти правила пригодятся!, но не в делфе и не в дипломе!
Вы бы эта, прежде чем говорить, сначала почитали бы чего, а? Ибо такую чушь порите что больно слушать, полный "Шифт+Делит". Тут вот есть темки с книжками, представляете некоторые имменно с них и начинают, и потом вот таких глупостей не пишут, поищите, оно всяко полезно будет.
нужно все переписать на ООП
Вы наверное не догадываетесь, но как только вы создали проект для диплома, вы изначально писали с применением ооп, просто без сознания такового. Так что читать читать и еще раз читать.
Остается только удивляться, что тут делают такие умные, которыым все знают и умеют, зачем вопросы задают ...?
 

valentofer

Active Member
10.11.2007
38
0
#13
Вы наверное не догадываетесь, но как только вы создали проект для диплома, вы изначально писали с применением ооп
Вы можете не поверить, но я знаю что делфа построенна на Object Pascal.
но что бы написать одну строчку adotable1.append; вот так:
procedure AppendData;
begin
adotable1.append;
end;
Это надо быть великим ГУРУ :rolleyes:
О великий ГУРУ, так как я через 6 дней забуду навсегда Delphi, может разрешите мне не читать ваши книжки...
Просто вот в чем дело, найти рабочее место под делфятину, в настоящее время не так уж легко, т.к. этот язык уходит в прошлое... Так что я невижу смысла, изучать азбуку ООП на дельфе. Да простите меня, великий Гуру.

Мот кто невнимательно читает, поэтому я повторюсь ТЕМА ЗАКРЫТА
 
E

etc

Гость
#14
Вы можете не поверить, но я знаю что делфа построенна на Object Pascal.
Delphi к Object Pascal уже давно не имеет никакого отношения, так ... история. Это к сведению, но я так понимаю оно вам до лампы.
О великий ГУРУ, так как я через 6 дней забуду навсегда Delphi
Нет не забудете, по той простой причине, что чтобы что-то забыть, надо сначало это что-то знать, а вы ни Delphi, да и программирование вообще, не знаете в принципе.
Так что я невижу смысла, изучать азбуку ООП на дельфе.
Еще вам одна умная мысль, хотя надежды на понимание все меньше и меньше, основы ООП всегда идут вне контекста какого бы то нибыла конкретного языка.
Просто вот в чем дело, найти рабочее место под делфятину, в настоящее время не так уж легко, т.к. этот язык уходит в прошлое...
О я смотрю, вы и в этих вопросах сильны, ну ну ... теперь понятно что ваше мнение по данному вопросу имеет вес = -0.

PS: а в методе AppendData есть ошибка, но вы ее даже не заметили :(, вот так вот ...
 

valentofer

Active Member
10.11.2007
38
0
#15
PS: а в методе AppendData есть ошибка, но вы ее даже не заметили , вот так вот ...
А зачем мне что то замечать, если я это испльзовать не собираюсь :)
но что бы написать одну строчку adotable1.append; вот так:
Цитата
procedure AppendData;
begin
adotable1.append;
end;

Это надо быть великим ГУРУ
Вы написали, вам и замечать ошибки :)