![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите кодом, где из компанента создается форма
Layner © (2006-03-03 14:09:00)и с этой формой можно взаимодействовать с компонентом (управлять им).
У меня сделана первая часть, сейчас форму не могу подружить с компонентом. Компанент например TMemo, при нажатии Crtl+1 в его фокусе появляется модальная форма.
(Это кусок кода компанента!)
procedure TMyMemo.KeyDown(var Key: Word; Shift: TShiftState);
begin
inherited;
if ((Key = Word('1')) and (GetKeyState(VK_CONTROL) < 0)) then
begin
Application.CreateForm(Tffiltr, ffiltr);
ffiltr.Showmodal;
end;
end;
Далее, на форме ffiltr есть Edit и button. Пишем слово в Edit, нажимаем кнопку, необходимо чтобы в Memo появился текст из Edit'а формы ffiltr, и форма ffiltr закрылась.
С "закрылось" нет проблем, а вот текст переслать из Edit в Memo не могу :(
Помогите профи, очень нужно, хоть каким нибудь советом. Заранее благодарю.
Layner (2006-03-03 14:52:00) [1]Alkid © (03.03.06 14:40)
и
Сергей!
Спасибо огромное! Именно так я начинал делать, ffiltr.myMemo := ???но не подумал, что тут можно писать слово Self!!!
Спасибо ещё раз, успехов в работе, всего, всего самого лучшего!
Сергей М. (2006-03-03 14:45:00) [2]Tffiltr = class(TForm)
private
FMyClassObject: TMyClass;
..
procedure DoSomething;
public
constructor Create(..., MyClassObject: TMyClass);
end;
...
constructor Tffiltr.Create(..., MyClassObject: TMyClass);
begin
inherited Create(..);
FMyClassObject := MyClassObject;
end;
procedure Tffiltr.DoSomething;
begin
..
FMyClassObject.SomeMemo.Text := ..;
..
end;
..
procedure TMyMemo.KeyDown(var Key: Word; Shift: TShiftState);
begin
inherited;
if ((Key = Word('1')) and (GetKeyState(VK_CONTROL) < 0)) then
begin
ffiltr := Tffiltr.Create(..., Self);
try
ffiltr.Showmodal;
finally
ffiltr.Free;
end;
end;
end;
Alkid (2006-03-03 14:40:00) [3]Пишешь в классе ffiltr
type
Tffiltr = class(TForm)
...
public
myMemo : TMyMemo;
...
end;
При вызове формы:
procedure TMyMemo.KeyDown(var Key: Word; Shift: TShiftState);
begin
inherited;
if ((Key = Word('1')) and (GetKeyState(VK_CONTROL) < 0)) then
begin
Application.CreateForm(Tffiltr, ffiltr);
ffiltr.myMemo := Self; // Это я дописал // Alkid
ffiltr.Showmodal;
end;
end;
Layner (2006-03-03 14:35:00) [4]
Alkid © (03.03.06 14:30)
Да, вот с ссылкой как это изготовить интересует, я до этого делал переменную типа TMyMemoв publicформе ffiltr, и пытался в самом компоненте ей присвоить значение компонента, что бы потом спокойненько оперировать в ffiltr, но это я не то делал, да и не получилось, а как правильно сделать не доходит :(
Layner (2006-03-03 14:30:00) [5]Вот вот, я так делал, на этом и встал :), можно ли про ссылку по подробнее, с ссылками блин не приходилось общатся, это что то с указателями связано? Сергей, поясните плз.
Alkid (2006-03-03 14:30:00) [6]
> Т.е. как из ffiltr "нащупать" родной компанент, который
> ее вызвал, и сделать например операцию простую, например
> выполнить вот это в обработчике при нажатии на кнопке, находящуюся
> на ffiltr.
> Showmessage(IntToStr(Length((?!)TMyMemo(?!).Lines.Text)))
Тебе надо передать из твоей модальной формы информацию в форму, которая её вызвала?
Тут есть несколько вариантов.
1.Плохой. Использовать глобальные переменные. В глобальной переменной лежит ссылка на нужную форму.
2. Тоже плохой. Передать твоей модальной форме перед ShowModal ссылку на форму, куда она должна записать данные.
3. Пусть модальная форма выдаёт свои результаты в виде своих свойств, которые ты после отработки ShowModal из неё извлекаешь и используешь как надо.
P.S. И не забывай убивать модальную форму после окончания работы с ней.
Сергей М. (2006-03-03 14:27:00) [7]
> не знаю как обратится из формы ffiltr к MyMemo
Ну та передай объекту ffiltr ссылку на объект MyMemo в конструкторе !
Или этому тоже что-то мешает ?
Layner (2006-03-03 14:23:00) [8]Т.е. как из ffiltr"нащупать" родной компанент, который ее вызвал, и сделать например операцию простую, например выполнить вот это в обработчике при нажатии на кнопке, находящуюся на ffiltr.
Showmessage(IntToStr(Length((?!)TMyMemo(?!).Lines.Text)))
Layner (2006-03-03 14:20:00) [9]Сергей, мешает вот что, я не знаю как обратится из формы ffiltrк MyMemo, который ее вызвал... Сижу порядком долго, никак сообразить не могу, как это все таки реализовать :(
Сергей М. (2006-03-03 14:13:00) [10]
> текст переслать из Edit в Memo не могу
Почему ? Что-то мешает ?