Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];

Вниз

Помогите кодом, где из компанента создается форма   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.012 c
2-1143040341
Profik
2006-03-22 18:12
2006.04.09
Глюк с открытием базы по сети


10-1116500704
mazter
2005-05-19 15:05
2006.04.09
Word-doc в OLE Contaner


15-1142401868
Fidel
2006-03-15 08:51
2006.04.09
Продажа программы


2-1143233546
Adil
2006-03-24 23:52
2006.04.09
TWebBrowser i JavaScript


15-1142836788
Yanis
2006-03-20 09:39
2006.04.09
На тему VB vs. Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский