![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 модуля второй формы указать модуль первой?