Форум: "Основная";
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];
ВнизMDI - получение ссылки на конкретное дочернее окно (inside). Найти похожие ветки
← →
Fellomena (2002-03-13 10:10) [7]Действительно, прописав в uses формы 2 unit3 и сделав, как предложил Владислав - всё получилось отлично.
Но пару подводных камней ещё всплыло, может кому понадобиться:
делаю в дочерней форме процедуру procedure MySave(name: String; flag: boolean = false); для сохранения всех значений в файл, обращаюсь к этой процедуре из главной формы.
Так вот, из этой процедуры я не смогла, сначала, получить "прямой" доступ к компонентам дочерней формы, значения свойств которых я собиралась сохранять (т.е. a:= Edit1.Text; - не работала).
Я сделала процедуру MySave методом класса TForm2 и соответственно её переписала, но в этом случае простой вызов MySave(params); из главной формы давал ошибку - не известная процедура, а Form2.MySave(params); естественно давал ошибку при работе программы.
В итоге вся эта лабуда вылелась в следующее, на мой взгляд не очень элегантное решение:
(эта процедура находится в дочерней MDI форме, а вызывается из главной)
procedure MySave(name: String; flag: boolean = false);
var
MyList: TStringList;
i: integer;
temp: string;
begin
i:= Length(name);
if name[i-3] <> "." then
name:= name + ".vac";
Form1.ActiveMDIChild.Caption:= name;
MyList:= TStringList.Create();
for i:= 0 to Form1.ActiveMDIChild.ComponentCount-1 do
if Form1.ActiveMDIChild.Components[i] is TEdit then
MyList.Add( TEdit(Form1.ActiveMDIChild.Components[i]).Text);
MyList.Add("Memo1Start");
MyList.Add( TMemo(Form1.ActiveMDIChild.FindComponent("Memo1")).Text);
MyList.Add("Memo1End");
MyList.Add("Memo2Start");
MyList.Add( TMemo(Form1.ActiveMDIChild.FindComponent("Memo2")).Text);
MyList.Add("Memo2End");
if FileExists(name) and not(flag) then // flag - для Save1
begin
if MessageBox(0, PChar("File already exist. Do you want to replace it ?"), PChar("Save As..."),MB_YESNO+MB_ICONWARNING+MB_DEFBUTTON2) = IDYES then
MyList.SaveToFile(name);
end
else
MyList.SaveToFile(name);
MyList.Clear;
end;
Скажите - выделенные фрагменты не являются ли извращением ? Может возможен более гибкий вариант доступа к визуальным компонентам дочерней формы ?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c