Консультация № 20127
23.04.2005, 01:08
0.00 руб.
0 7 7
Создал программно парочку новых компонентов TEdit.
Как теперь сделать для всех их одну процедуру OnKeyPress ?
Пояснение:
Пишу IRC клиент. Для каждого канала, на который зайдет пользователь программно создается новая вкладка в PageControl, на которой находятся разные компоненты, включая TEdit. Он будет предназначен для отправки сообщений в канал. Его имя (name) равно имени вкладки+‘_Edit‘. Имя вкладки соответствует названию IRC канала (без #).
Меня интересует только как написать процедуру OnKeyPress, чтобы она срабатывала для всех компонентов TEdit.
Если не трудно, то дайте плиз пример исходного кода написания процедуры, а то я раньше с таким извращением никогда не сталкивался.

Обсуждение

Неизвестный
23.04.2005, 01:39
общий
это ответ
Здравствуйте, source!
// Процедура обрабочтчик
procedure MyEditClick(Sender: TObject);
begin
// Do something here
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
Edit1.OnClick := MyEditClick;
end;
Неизвестный
23.04.2005, 02:06
общий
это ответ
Здравствуйте, source!
Это бред, ничего писать не надо - пишешь для одного и в Object Inspector‘e->Events просто выбираешь для OnKeyPress из списка для каждого Edit‘a одну и ту же процедуру.
Неизвестный
23.04.2005, 11:40
общий
это ответ
Здравствуйте, source!
Если я правильно понял, то след. образом:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure EditKey(Sender:TObject; var Key: Char); // это наш обработчик
public
{ Public declarations }
end;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
// я не стал создавать TEdit программно, Вы и сами знаете как это делать
Edit1.OnKeyPress:=EditKey; // Здесь происходит присваивание обработчиков.
Edit2.OnKeyPress:=EditKey; // Заметьте он один и тот же
end;
procedure TForm1.EditKey(Sender: TObject; var Key: Char);
begin
ShowMessage(‘Ура!‘); // сам обработчик
end;
end.
Неизвестный
23.04.2005, 12:34
общий
это ответ
Здравствуйте, source!
procedure TForm1.EditKeyPress(Sender : TObject;var Key : Char); //Обработчик события
var E : TEdit;T : TTabSheet;Channel : string;
begin
E:=TEdit(Sender);//E - edit-источник события
T:=TTabSheet(E.Parent);//T - закладка, на которой установлен edit (T - parent edit‘а)
Channel:=‘#‘+T.Name;//имя канала
......
end;
....
E1,E2 : TEdit; //Какие-то TEdit‘ы;
.....
E1.OnKeyPress:=EditKeyPress; //Присваиваем edit‘у обработчик
E2.OnKeyPress:=EditKeyPress; //Присваиваем edit‘у обработчик
.....
Неизвестный
23.04.2005, 20:00
общий
это ответ
Мое почтение, source!
В design time:
пишешь событие OnKeyPress для Edit1, затем переключаешься на Edit2, в Object Inspector, на закладке Events, в выпадающем меню события OnKeyPress выбираешь обработчик события первого Edit-а.
Если надо в run time, то:
в design time создаешь обработчик события, это может быть уже созданный обработчик компонента Edit1 или написанный тобой специально, к примеру EditsKeyPress:
procedure TForm1.EditsKeyPress(Sender: TObject; var Key: Char);
begin
Memo1.Lines.Add(Key);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.OnKeyPress := EditsKeyPress;
Edit2.OnKeyPress := EditsKeyPress;
end;
Неизвестный
25.04.2005, 12:28
общий
это ответ
Здравствуйте, source!
В Вашу процедуру OnKeyPress вствьте следующий код (см приложение)

Приложение:
var i: Integer;const NamePrefix = ‘MyEdit‘; //название Ваших Edit‘овbegin for i := 1 to 20 do begin //вместо 20 подставьте значение кол-ва вкладок TEdit.Create(Self).Name := NamePrefix + IntToStr(i); //i - номер Edit‘a with TEdit(FindComponent(NamePrefix + IntToStr(i))) do begin// здесь будет расположен код.... который нужно делать для ВСЕХ edit‘ов end; end;end;
Неизвестный
25.04.2005, 19:36
общий
это ответ
Здравствуйте, source!
При создании компонента. В Run-Tim?
Назначь edit1.OnKeyPress := Имя функции для компонента TEdit;
В тело функции добавь проверку например (См. Приллжение)


Приложение:
Procedure TMain_Form.Edit1OnKeyPress(Sender:tObject);Begin With sender as TEdit do Begin IF name = ‘имя твоего компонента например‘ then Begin // End Else IF name = ......end;Или по тягу короче как хочешь. Смысл уловил? если нет то в ICQ: 7777-88-51 или на E-Mail: Barsena@mail.ru
Форма ответа