Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: обращение к Tframe
Форум программистов > Системное программирование > Delphi и Pascal > Delphi - Компоненты
valentofer
Проблема такая. У меня на на фрэйме расположена сетка DBGrid. Обращение из главной формы приложения к компонентам расположеным на Frame не происходит, т.е. я немогу обратится к DBGrid расположенному на Фрэйме. Насколько я понял, главная форма невидет Frame, потому как фрэйм создается при исполнении приложения?!. Как можно обратится к компонентам на TFrame ? unsure.gif
Спасибо заранее
Aleksey
Фрэйм доступен во время design time, как отдельная форма со своим модулем. Ты его наполняешь компонентами, процедурами и данными. Теперь можно на любые фомы проекта вставлять фреймы с панели инструментов, копирующие твой исходный фрейм.
Далее, если фрэйм на форме лежит, то form1.Frame21.DBGrid1. ...

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

P.S. Фрэймы созданы и наполнены компонентами))) Вопрос в том как из ФОРМЫ обратится к ФРЭЙМУ
etc
Цитата(valentofer @ 29:05:2008 - 15:31) *
на ней в процессе работы программы открываются фрэймы
Как?
valentofer
Цитата(etc @ 29:05:2008, 16:37 ) *
Как?

  var
  MainForm: TMainForm;
  CurrentFrame : TFrame;


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

ну плюс там еще процедура, которая определяет местоположение фрэйма.... ну эт неважно
etc
Цитата(valentofer @ 29:05:2008 - 15:55) *
var
MainForm: TMainForm;
CurrentFrame : TFrame;

Не так не правильно, надо делать мембером (private) класа формы.
valentofer
мембер не мембер, Мне кто нить ответит как сделать чтобы CurrentFrame.adotable1.append; скомпилилось???
и как обьявление
Private
MainForm: TMainForm;
  CurrentFrame : TFrame;

поможет мне в компиляции
CurrentFrame.adotable1.append

???
etc
Цитата(valentofer @ 29:05:2008 - 18:46) *
как сделать чтобы 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
ну почти так и я обращаюсь к АДоТэйблу:
if assigned(CurrentFrame) then
  recCount:=  TOtgruzkaViewFrame(CurrentFrame).adotable1.recordcount;

так что особой разницы между твоим предложением и моим, я невижу!
а попроще способа нету?

и еще.. Насчет как правильно, и как неправильно: когда остается 5 дней до сдачи диплома, а он у тебя еще сделан наполовину, ты небудешь задумыватся о всех правилах ООП wink.gif
etc
Цитата(valentofer @ 29:05:2008 - 19:35) *
ну почти так и я обращаюсь
Почти да не так, это во первых а во вторых если у вас тип класа фрейма всего один то такие хороводы тут нафик не нужны!
Цитата(valentofer @ 29:05:2008 - 19:35) *
так что особой разницы между твоим предложением и моим, я невижу!
Вашего до этого и видно небыло.
Цитата(valentofer @ 29:05:2008 - 19:35) *
а попроще способа нету?
Проще только за деньги.
Цитата(valentofer @ 29:05:2008 - 19:35) *
Насчет как правильно, и как неправильно: когда остается 5 дней до сдачи диплома, а он у тебя еще сделан наполовину, ты небудешь задумыватся о всех правилах ООП
Конечно не будешь, за 5 до сдачи диплома это надо уже знать как отче наш, и писать правильно, не задумываясь, даже если тебя разбудять ночью и сразу за клаву посадят!
valentofer
Цитата(etc @ 29:05:2008 - 19:44) *
Вашего до этого и видно небыло.

Стесьняюсь спросить, а это что?
Цитата
Цитата(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.gif Безусловно, в жизни все эти правила пригодятся!, но не в делфе и не в дипломе!

P.S. Ладно, спасибо всем за исчерпывающие ответы)), из которых я узнал что чтобы обратится к свойству обьекта, нужно все переписать на ООП blink.gif Тему закрываю
etc
Цитата(valentofer @ 29:05:2008 - 20:03) *
Стесьняюсь спросить, а это что?
Это создание, разве нет? Нигде обращение к уже созданному нет, вы же про это тему создавали или тоже нет?
Цитата(valentofer @ 29:05:2008 - 20:03) *
Для ООП есть С++, а в делфятине никто неписал и писать так небудет, ну кроме вас конечно.
Понимаете в чем дело, мне ООП в Дипломе нафиг ненужно, так как никто этой прогой в дальнейшем пользоватся не будеть. Поглядят , оценку поставят и все.... На этом жизнь программы обрывается нажатием Шифт+Делит. А все ваши указания по поводу как правильно... мне совершенно никчему, честное пионерское слово Безусловно, в жизни все эти правила пригодятся!, но не в делфе и не в дипломе!
Вы бы эта, прежде чем говорить, сначала почитали бы чего, а? Ибо такую чушь порите что больно слушать, полный "Шифт+Делит". Тут вот есть темки с книжками, представляете некоторые имменно с них и начинают, и потом вот таких глупостей не пишут, поищите, оно всяко полезно будет.
Цитата(valentofer @ 29:05:2008 - 20:03) *
нужно все переписать на ООП
Вы наверное не догадываетесь, но как только вы создали проект для диплома, вы изначально писали с применением ооп, просто без сознания такового. Так что читать читать и еще раз читать.
Остается только удивляться, что тут делают такие умные, которыым все знают и умеют, зачем вопросы задают ...?
valentofer
Цитата
Вы наверное не догадываетесь, но как только вы создали проект для диплома, вы изначально писали с применением ооп

Вы можете не поверить, но я знаю что делфа построенна на Object Pascal.
но что бы написать одну строчку adotable1.append; вот так:
Цитата
procedure AppendData;
begin
adotable1.append;
end;

Это надо быть великим ГУРУ laugh.gif
О великий ГУРУ, так как я через 6 дней забуду навсегда Delphi, может разрешите мне не читать ваши книжки...
Просто вот в чем дело, найти рабочее место под делфятину, в настоящее время не так уж легко, т.к. этот язык уходит в прошлое... Так что я невижу смысла, изучать азбуку ООП на дельфе. Да простите меня, великий Гуру.

Мот кто невнимательно читает, поэтому я повторюсь ТЕМА ЗАКРЫТА
etc
Цитата(valentofer @ 29:05:2008 - 21:01) *
Вы можете не поверить, но я знаю что делфа построенна на Object Pascal.
Delphi к Object Pascal уже давно не имеет никакого отношения, так ... история. Это к сведению, но я так понимаю оно вам до лампы.
Цитата(valentofer @ 29:05:2008 - 21:01) *
О великий ГУРУ, так как я через 6 дней забуду навсегда Delphi
Нет не забудете, по той простой причине, что чтобы что-то забыть, надо сначало это что-то знать, а вы ни Delphi, да и программирование вообще, не знаете в принципе.
Цитата(valentofer @ 29:05:2008 - 21:01) *
Так что я невижу смысла, изучать азбуку ООП на дельфе.
Еще вам одна умная мысль, хотя надежды на понимание все меньше и меньше, основы ООП всегда идут вне контекста какого бы то нибыла конкретного языка.
Цитата(valentofer @ 29:05:2008 - 21:01) *
Просто вот в чем дело, найти рабочее место под делфятину, в настоящее время не так уж легко, т.к. этот язык уходит в прошлое...
О я смотрю, вы и в этих вопросах сильны, ну ну ... теперь понятно что ваше мнение по данному вопросу имеет вес = -0.

PS: а в методе AppendData есть ошибка, но вы ее даже не заметили sad.gif, вот так вот ...
valentofer
Цитата(etc @ 30:05:2008 - 08:48) *
PS: а в методе AppendData есть ошибка, но вы ее даже не заметили , вот так вот ...

А зачем мне что то замечать, если я это испльзовать не собираюсь wink.gif
Цитата
но что бы написать одну строчку adotable1.append; вот так:
Цитата
procedure AppendData;
begin
adotable1.append;
end;

Это надо быть великим ГУРУ

Вы написали, вам и замечать ошибки wink.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.