Текущий архив: 2006.04.09;
Скачать: CL | DM;
ВнизПомогите кодом, где из компанента создается форма Найти похожие ветки
← →
Layner © (2006-03-03 14:09) [0]и с этой формой можно взаимодействовать с компонентом (управлять им).
У меня сделана первая часть, сейчас форму не могу подружить с компонентом. Компанент например 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 не могу :(
Помогите профи, очень нужно, хоть каким нибудь советом. Заранее благодарю.
← →
Сергей М. © (2006-03-03 14:13) [1]
> текст переслать из Edit в Memo не могу
Почему ? Что-то мешает ?
← →
Layner © (2006-03-03 14:20) [2]Сергей, мешает вот что, я не знаю как обратится из формы ffiltr к MyMemo, который ее вызвал... Сижу порядком долго, никак сообразить не могу, как это все таки реализовать :(
← →
Layner © (2006-03-03 14:23) [3]Т.е. как из ffiltr "нащупать" родной компанент, который ее вызвал, и сделать например операцию простую, например выполнить вот это в обработчике при нажатии на кнопке, находящуюся на ffiltr.
Showmessage(IntToStr(Length((?!)TMyMemo(?!).Lines.Text)))
← →
Сергей М. © (2006-03-03 14:27) [4]
> не знаю как обратится из формы ffiltr к MyMemo
Ну та передай объекту ffiltr ссылку на объект MyMemo в конструкторе !
Или этому тоже что-то мешает ?
← →
Layner © (2006-03-03 14:30) [5]Вот вот, я так делал, на этом и встал :), можно ли про ссылку по подробнее, с ссылками блин не приходилось общатся, это что то с указателями связано? Сергей, поясните плз.
← →
Alkid © (2006-03-03 14:30) [6]
> Т.е. как из ffiltr "нащупать" родной компанент, который
> ее вызвал, и сделать например операцию простую, например
> выполнить вот это в обработчике при нажатии на кнопке, находящуюся
> на ffiltr.
> Showmessage(IntToStr(Length((?!)TMyMemo(?!).Lines.Text)))
Тебе надо передать из твоей модальной формы информацию в форму, которая её вызвала?
Тут есть несколько вариантов.
1.Плохой. Использовать глобальные переменные. В глобальной переменной лежит ссылка на нужную форму.
2. Тоже плохой. Передать твоей модальной форме перед ShowModal ссылку на форму, куда она должна записать данные.
3. Пусть модальная форма выдаёт свои результаты в виде своих свойств, которые ты после отработки ShowModal из неё извлекаешь и используешь как надо.
P.S. И не забывай убивать модальную форму после окончания работы с ней.
← →
Layner © (2006-03-03 14:35) [7]
Alkid © (03.03.06 14:30)
Да, вот с ссылкой как это изготовить интересует, я до этого делал переменную типа TMyMemo в public форме ffiltr, и пытался в самом компоненте ей присвоить значение компонента, что бы потом спокойненько оперировать в ffiltr, но это я не то делал, да и не получилось, а как правильно сделать не доходит :(
← →
Alkid © (2006-03-03 14:40) [8]Пишешь в классе 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;
← →
Сергей М. © (2006-03-03 14:45) [9]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;
← →
Layner © (2006-03-03 14:52) [10]Alkid © (03.03.06 14:40)
и
Сергей!
Спасибо огромное! Именно так я начинал делать, ffiltr.myMemo := ??? но не подумал, что тут можно писать слово Self!!!
Спасибо ещё раз, успехов в работе, всего, всего самого лучшего!
Страницы: 1 вся ветка
Текущий архив: 2006.04.09;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.013 c