Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизTframe Найти похожие ветки
← →
dalex © (2010-05-27 12:59) [0]Добрый день!
Помогите пожалуйста в таком вопросе
На главной фороме отображается Фрейм
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
Спасибо
← →
MBo © (2010-05-27 13:18) [1]в uses модуля второй формы указать модуль первой?
← →
Плохиш © (2010-05-27 13:22) [2]
> procedure TForm2.Button1Click(Sender: TObject);
> begin
> Edit1.Text:=StartFrame.ADOQuery1.FieldByName("XXX").AsString;
>
> end;
>
> Вопрос следующий, как из Form2 достучаться до StartFrame.
> ADOQuery1, так как, то что указано в TForm2.Button1Click
> релизовать невозможно, так как Form2 не видет StartFrame
Как можно увидеть то, что не существует?
У формы TForm2 сделать свойство, в которое в методе TStartFrame.Button1Click передавать требуемое значение.
← →
Плохиш © (2010-05-27 13:24) [3]
> MBo © (27.05.10 13:18) [1]
>
> в uses модуля второй формы указать модуль первой?
И чем это ему поможет? Только получит исключение "Access violation" ;-)
← →
Медвежонок Пятачок © (2010-05-27 13:37) [4]Edit1.Text:=StartFrame.ADOQuery1.FieldByName("XXX").AsString;
Зачем проектировать такой фрейм, если "снаружи" надо знать какой там квери и какое там поле?
Фрейм должен иметь либо свойство либо метод "дай мне значение такого-то атрибута"
← →
dalex © (2010-05-27 14:02) [5]
> Фрейм должен иметь либо свойство либо метод "дай мне значение
> такого-то атрибута"
Сори, несовсем понял что нужно дать, как и где это посмотреть?
Приложение построено на ипользовании n-го кол-ва фреймов, отображаемых на главной форме, и лишь у некоторых фреймов необходимо вызвать отдельную форму. Эта форма предназначена для редактирования и ввода данных в таблицу, которая находится на фрейме. При вызове такой форме, необходимо знать ID редактируемой позиции Поэтому и возникла надобность при вызове формы редактирования обращаться к набору данных, дабы определить ID редактируемой записи
← →
Плохиш © (2010-05-27 14:10) [6]
> При вызове такой форме, необходимо знать ID редактируемой
> позиции
[2]
← →
Медвежонок Пятачок © (2010-05-27 14:16) [7]Поэтому и возникла надобность при вызове формы редактирования обращаться к набору данных, дабы определить ID редактируемой записи
function TStartFrame.GetCurrentRecordID : integer;
begin
...
end;
вместо чудовищного
Edit1.Text:=StartFrame.ADOQuery1.FieldByName("XXX").AsString;
← →
MBo © (2010-05-27 14:19) [8]>И чем это ему поможет?
угу, не прочувствовал
← →
dalex © (2010-05-27 14:24) [9]
> function TStartFrame.GetCurrentRecordID : integer;
Допустим, а ка вызвать эту функции из Формы?
← →
Медвежонок Пятачок © (2010-05-27 14:27) [10]потребуются : фарфровое блюдце, полумрак, и человека четыре со стульями.
← →
Медвежонок Пятачок © (2010-05-27 14:30) [11]затем все четверо кладут пальцы на блюдце (должно лежать вверх донышком!!!) и загробным тоном и хором начинают говорить:
"вызывваем метод-функцию геткаррентрекордайди у фрейма стартфрейм"
блюдце заврящается и стрелка на нем (нанести фломастером перед вызовом) укажет на возвращаемый результат
← →
Плохиш © (2010-05-27 14:31) [12]Форма TForm2 ничего ни о каких-то фреймах знать не должна, ибо она является самодостаточной формой-диалогом.
← →
Игорь Шевченко © (2010-05-27 14:35) [13]Вот он, налицо, вред объектно-ориентированного программирования. Или его в ликбезах как-то неправильно преподают, в отрыве от жизни.
> 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 ?
← →
dalex © (2010-05-27 14:55) [14]
> Что такое MainForm и CurrentFrame ?
var
MainForm: TMainForm;
OldFrame, CurrentFrame : TFrame;
MainForm - главная форма, на которой отображаются фреймы
CurrentFrame - фрейм отображающийся на форме MainForm
CurrentFrame := TStartFrame.Create(MainForm);
← →
dalex © (2010-05-27 14:56) [15]
> затем все четверо кладут пальцы на блюдце (должно лежать
> вверх донышком!!!) и загробным тоном и хором начинают говорить:
>
>
> "вызывваем метод-функцию геткаррентрекордайди у фрейма стартфрейм"
>
> блюдце заврящается и стрелка на нем (нанести фломастером
> перед вызовом) укажет на возвращаемый результат
прикольно, а программным кодом это подтверждается?
← →
Плохиш © (2010-05-27 15:09) [16]
>
> var
> MainForm: TMainForm;
> OldFrame, CurrentFrame : TFrame;
>
Дальше эта тема мне не интересна.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.091 c