Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Tframe [D2005, XP]


dalex ©   (2010-05-27 12:59:00) 

Добрый день!
Помогите пожалуйста в таком вопросе

На главной фороме отображается Фрейм

procedure TMainForm.UpdateFrame(Sender : TObject);
begin
   if Assigned(MainForm) and Assigned(CurrentFrame) then begin
       CurrentFrame.Visible := False;
       CurrentFrame.SetBounds(XXX,XXX,XXX,XXX);
       CurrentFrame.Parent := MainForm;
       CurrentFrame.Visible := True;
       CurrentFrame.Repaint;
   if Assigned(OldFrame) then begin FreeAndNil(OldFrame); end;
 end;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
     if Assigned(CurrentFrame) then OldFrame := CurrentFrame;
     if OldFrame is TStartFrame then FreeAndNil(OldFrame);
       CurrentFrame := TStartFrame.Create(MainForm);
       MainForm.UpdateFrame(Sender);

end;

Для упрощения вопроса, допустим, что  на фрейме расположены Button и ADOQuery с каким то набором данных, при нажатии на Button отображается форма
с Button и Edit

procedure TStartFrame.Button1Click(Sender: TObject);
begin
   Form2.ShowModal;
end;

При нажатии на Button в Edit должно отобразиться некоторая запись с набора данных ADOQuery

procedure TForm2.Button1Click(Sender: TObject);
begin
   Edit1.Text:=StartFrame.ADOQuery1.FieldByName('XXX').AsString;
end;

Вопрос следующий, как из Form2 достучаться до StartFrame.ADOQuery1, так как, то что указано в TForm2.Button1Click релизовать невозможно, так как Form2 не видет StartFrame
Спасибо


Плохиш   (2010-05-27 15:09:00) [1]


>
> var
>  MainForm: TMainForm;
>   OldFrame, CurrentFrame : TFrame;
>

Дальше эта тема мне не интересна.


dalex   (2010-05-27 14:56:00) [2]


> затем все четверо кладут пальцы на блюдце (должно лежать
> вверх донышком!!!) и загробным тоном и хором начинают говорить:
>
>
> "вызывваем метод-функцию геткаррентрекордайди у фрейма стартфрейм"
>
> блюдце заврящается и стрелка на нем (нанести фломастером
> перед вызовом) укажет на возвращаемый результат


прикольно, а программным кодом это подтверждается?


dalex   (2010-05-27 14:55:00) [3]


> Что такое MainForm и CurrentFrame ?


var
 MainForm: TMainForm;
 OldFrame, CurrentFrame : TFrame;

MainForm - главная форма, на которой отображаются фреймы
CurrentFrame  - фрейм отображающийся на форме MainForm

 CurrentFrame := TStartFrame.Create(MainForm);


Игорь Шевченко   (2010-05-27 14:35:00) [4]

Вот он, налицо, вред объектно-ориентированного программирования. Или его в ликбезах как-то неправильно преподают, в отрыве от жизни.


> procedure TMainForm.UpdateFrame(Sender : TObject);
> begin
>    if Assigned(MainForm) and Assigned(CurrentFrame) then
> begin
>        CurrentFrame.Visible := False;
>        CurrentFrame.SetBounds(XXX,XXX,XXX,XXX);
>        CurrentFrame.Parent := MainForm;
>        CurrentFrame.Visible := True;
>        CurrentFrame.Repaint;
>    if Assigned(OldFrame) then begin FreeAndNil(OldFrame);
>  end;
>  end;
> end;


Что такое MainForm и CurrentFrame ?


Плохиш   (2010-05-27 14:31:00) [5]

Форма TForm2 ничего ни о каких-то фреймах знать не должна, ибо она является самодостаточной формой-диалогом.


Медвежонок Пятачок   (2010-05-27 14:30:00) [6]

затем все четверо кладут пальцы на блюдце (должно лежать вверх донышком!!!) и загробным тоном и хором начинают говорить:

"вызывваем метод-функцию геткаррентрекордайди у фрейма стартфрейм"

блюдце заврящается и стрелка на нем (нанести фломастером перед вызовом) укажет на возвращаемый результат


Медвежонок Пятачок   (2010-05-27 14:27:00) [7]

потребуются : фарфровое блюдце, полумрак, и человека четыре со стульями.


dalex   (2010-05-27 14:24:00) [8]


> function TStartFrame.GetCurrentRecordID : integer;

Допустим, а ка вызвать эту функции из Формы?


MBo   (2010-05-27 14:19:00) [9]

>И чем это ему поможет?
угу, не прочувствовал


Медвежонок Пятачок   (2010-05-27 14:16:00) [10]

Поэтому и возникла надобность при вызове формы редактирования обращаться к набору данных, дабы определить ID редактируемой записи

function TStartFrame.GetCurrentRecordID : integer;
begin
...
end;

вместо чудовищного

Edit1.Text:=StartFrame.ADOQuery1.FieldByName('XXX').AsString;


Плохиш   (2010-05-27 14:10:00) [11]


> При вызове такой форме, необходимо знать ID редактируемой
> позиции

[2]


dalex   (2010-05-27 14:02:00) [12]


> Фрейм должен иметь либо свойство либо метод "дай мне значение
> такого-то атрибута"


Сори, несовсем понял что нужно дать, как и где это посмотреть?

Приложение построено на ипользовании n-го кол-ва фреймов, отображаемых на главной форме, и лишь у некоторых фреймов необходимо вызвать отдельную форму. Эта форма предназначена для редактирования и ввода данных в таблицу, которая находится на фрейме. При вызове такой форме, необходимо знать ID редактируемой позиции Поэтому и возникла надобность при вызове формы редактирования обращаться к набору данных, дабы определить ID редактируемой записи


Медвежонок Пятачок   (2010-05-27 13:37:00) [13]

Edit1.Text:=StartFrame.ADOQuery1.FieldByName('XXX').AsString;

Зачем проектировать такой фрейм, если "снаружи" надо знать какой там квери и какое там поле?

Фрейм должен иметь либо свойство либо метод "дай мне значение такого-то атрибута"


Плохиш   (2010-05-27 13:24:00) [14]


> MBo ©   (27.05.10 13:18) [1]
>
> в uses модуля второй формы указать модуль первой?

И чем это ему поможет? Только получит исключение "Access violation" ;-)


Плохиш   (2010-05-27 13:22:00) [15]


> procedure TForm2.Button1Click(Sender: TObject);
> begin
>    Edit1.Text:=StartFrame.ADOQuery1.FieldByName('XXX').AsString;
>
> end;
>
> Вопрос следующий, как из Form2 достучаться до StartFrame.
> ADOQuery1, так как, то что указано в TForm2.Button1Click
> релизовать невозможно, так как Form2 не видет StartFrame

Как можно увидеть то, что не существует?

У формы TForm2 сделать свойство, в которое в методе TStartFrame.Button1Click передавать требуемое значение.


MBo   (2010-05-27 13:18:00) [16]

в uses модуля второй формы указать модуль первой?


Наверх

Титульная страница Поиск, карта сайта Написать письмо