Главная страница
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.5 MB
Время: 0.04 c
2-1143066395
Andy BitOff
2006-03-23 01:26
2006.04.09
Длина массива в байтах.


2-1143211969
JohnKorsh
2006-03-24 17:52
2006.04.09
Могут ли D5 и D7 сосуществовать на одном копьютере?


1-1141576572
ZeFiR
2006-03-05 19:36
2006.04.09
Чтение запись в оперативку или как написать тренер для игры...


2-1142972969
Adios
2006-03-21 23:29
2006.04.09
Помогите исправить процедуру


4-1137772468
Compton's G
2006-01-20 18:54
2006.04.09
Обои на рабочем столе.