Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.033 c
11-1123318469
Mikki
2005-08-06 12:54
2006.04.09
Борьба с ListView


15-1142790487
Суслик
2006-03-19 20:48
2006.04.09
Прокси


2-1143374884
Nsk3D
2006-03-26 16:08
2006.04.09
Месяц в календаре


15-1142557166
Ketmar
2006-03-17 03:59
2006.04.09
фе. "конкурсы" какие-то...


2-1143187430
Lera
2006-03-24 11:03
2006.04.09
минимизация формы