обращение к Tframe

Тема в разделе "Delphi - Компоненты", создана пользователем valentofer, 29 май 2008.

  1. valentofer

    valentofer Active Member

    Регистрация:
    10 ноя 2007
    Сообщения:
    38
    Симпатии:
    0
    Проблема такая. У меня на на фрэйме расположена сетка DBGrid. Обращение из главной формы приложения к компонентам расположеным на Frame не происходит, т.е. я немогу обратится к DBGrid расположенному на Фрэйме. Насколько я понял, главная форма невидет Frame, потому как фрэйм создается при исполнении приложения?!. Как можно обратится к компонентам на TFrame ? :)
    Спасибо заранее
     
  2. Aleksey

    Aleksey Гость

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

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

    valentofer Active Member

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

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

    etc Гость

    Как?
     
  5. valentofer

    valentofer Active Member

    Регистрация:
    10 ноя 2007
    Сообщения:
    38
    Симпатии:
    0
    Код (Text):
     var
    MainForm: TMainForm;
    CurrentFrame : TFrame;
    Код (Text):
    if Assigned(CurrentFrame) then FreeAndNil(CurrentFrame);
    CurrentFrame := TOtgruzkaViewFrame.Create(MainForm);
    MainForm.UpdateFrame(Sender);
    ну плюс там еще процедура, которая определяет местоположение фрэйма.... ну эт неважно
     
  6. etc

    etc Гость

    Не так не правильно, надо делать мембером (private) класа формы.
     
  7. valentofer

    valentofer Active Member

    Регистрация:
    10 ноя 2007
    Сообщения:
    38
    Симпатии:
    0
    мембер не мембер, Мне кто нить ответит как сделать чтобы CurrentFrame.adotable1.append; скомпилилось???
    и как обьявление
    Код (Text):
    Private
    MainForm: TMainForm;
    CurrentFrame : TFrame;
    поможет мне в компиляции
    Код (Text):
    CurrentFrame.adotable1.append
    ???
     
  8. etc

    etc Гость

    Надо правильно запрограммировать.
    Что непонятно?

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

    Код (Text):
    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;
    Все просто ...
     
  9. valentofer

    valentofer Active Member

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

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

    etc Гость

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

    valentofer Active Member

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

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

    etc Гость

    Это создание, разве нет? Нигде обращение к уже созданному нет, вы же про это тему создавали или тоже нет?
    Вы бы эта, прежде чем говорить, сначала почитали бы чего, а? Ибо такую чушь порите что больно слушать, полный "Шифт+Делит". Тут вот есть темки с книжками, представляете некоторые имменно с них и начинают, и потом вот таких глупостей не пишут, поищите, оно всяко полезно будет.
    Вы наверное не догадываетесь, но как только вы создали проект для диплома, вы изначально писали с применением ооп, просто без сознания такового. Так что читать читать и еще раз читать.
    Остается только удивляться, что тут делают такие умные, которыым все знают и умеют, зачем вопросы задают ...?
     
  13. valentofer

    valentofer Active Member

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

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

    etc Гость

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

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

    valentofer Active Member

    Регистрация:
    10 ноя 2007
    Сообщения:
    38
    Симпатии:
    0
    А зачем мне что то замечать, если я это испльзовать не собираюсь :)
    Вы написали, вам и замечать ошибки :)
     
Загрузка...

Поделиться этой страницей