Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как сделать, чобы при нажатии кнопки на каждом компоненте Edit


Страницы:   1 2

snake-as ©   (2008-08-28 10:57:00) 

Как сделать, чобы при нажатии кнопки на каждом компоненте Edit на форме вызывалась процедура? Или никак, кроме как прописывать в свойстве каждого компонента нельзя?


snake-as   (2008-08-28 15:36:00) [1]

Спасибо огроменное. Пойду дальше делать..


Slym   (2008-08-28 13:10:00) [2]

Vlad Oshin ©   (28.08.08 12:54) [17]
чтобы работало(откомпилировалось) через TNotifyEvent?

хитрый какой :)
procedure EditClck (Self,Sender: TObject; var Key: Char);
begin
 ShowMessage('По мне, '+TEdit(Self).Name+', жманули :)');
end;

procedure AssignEditKey (const Edit : TEdit);
var
 Method : TMethod;
begin
 Method.Code := @EditClck;
 Method.Data := Edit;
  SetMethodProp(Edit,'OnKeyPress',Method);
end;


Dennis I. Komarov   (2008-08-28 13:05:00) [3]

[12]

Уау, какой телепатор :)


Slym   (2008-08-28 13:02:00) [4]

procedure EditClck (Self,Sender: TObject; var Key: Char);
begin
 ShowMessage('По мне, '+TEdit(Self).Name+', жманули :)');
end;

procedure AssignEditKey (const Edit : TEdit);
var
 Method : TMethod;
begin
 Method.Code := @EditClck;
 Method.Data := Edit;
 Edit.OnKeyPress := TKeyPressEvent (Method);
end;

procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
 for i:=0 to ComponentCount-1 do
   if (Components[i] is TEdit) then
     AssignEditKey(TEdit(Components[i]));
end;


Vlad Oshin   (2008-08-28 12:54:00) [5]

а вернемся к


procedure EditClck (Self : TEdit; Sender : TEdit);
begin
ShowMessage('По мне, '+Self.Name+', кликнули  ');
end;

procedure AssignEditKey (const Edit : TEdit);
var
Method : TMethod;
begin
Method.Code := @EditClck;
Method.Data := Edit;
Edit.OnKeyPress := TNotifyEvent (Method);
// Edit.OnKeyPress := TKeyPressEvent (Method);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
begin
for i:=0 to ComponentCount-1 do
 if (Components[i] is TEdit) then
     AssignEditKey(TEdit(Components[i]));
end;
[Pascal Error] Unit1.pas(40): E2009 Incompatible types: 'Parameter lists differ'

 TNotifyEvent = procedure(Sender: TObject) of object;
 TKeyPressEvent = procedure(Sender: TObject; var Key: Char) of object;
можно ли как-то  в ошибочном варианте(в этом посте), запихнуть(как-нибудь, как угодно) еще и этот параметр (var Key: Char), чтобы работало(откомпилировалось) через TNotifyEvent?


Leonid Troyanovsky   (2008-08-28 12:53:00) [6]


> snake-as ©   (28.08.08 12:39) [12]

> печатаешь на компоненте Edit тупо текст, нажимаешь, например,
>  Enter и срабатывает процедура. И так в каждом компоненте.
>  Конечно, можно вручную прописать на каждом, но хотелось
> автоматизировать.  


procedure TForm1.CMDialogKey(var msg: TCMDialogKey); // message cm_DialogKey;
begin
 if (msg.CharCode = vk_return) then
   begin
     if ActiveControl is TEdit then
       MyEditProcedure(ActiveControl);
   end;
 inherited;
end;

--
Regards, LVT.


Игорь Шевченко   (2008-08-28 12:47:00) [7]


> печатаешь на компоненте Edit тупо текст, нажимаешь, например,
>  Enter и срабатывает процедура


type
 TFoo = class(TForm)
   Edit1: TEdit;
   Edit2: TEdit;
 ....
   procedure FormCreate(Sender: TObject);
 private
   proceduce EditKeyPress (Sender: TObject; var Key: Char);
 end;

procedure TFoo.FormCreate(Sender: TObject);
var
 I: Integer;
begin
 for I:=0 to ComponentCount - 1 do
    if (Components[I] is TEdit) and МнеВЭтотЭдитНужноВставитьПроцедуру then
      TEdit(Components[I]).OnKeyPress := EditKeypress;
end;

proceduce TFoo.EditKeyPress (Sender: TObject; var Key: Char);
begin
  if Key = #13 then
    with Sender as TEdit do
    begin
       ДелаюЧтоХочу
    end;
end;
 


Vlad Oshin   (2008-08-28 12:45:00) [8]

:)

procedure EditClck (Self : TEdit; Sender : TEdit; var Key:char);
begin
 ShowMessage('Во мне, '+Self.Name+', нажали  '+Key);
end;

procedure AssignEditKey (const Edit : TEdit);
var
 Method : TMethod;
begin
 Method.Code := @EditClck;
 Method.Data := Edit;
 Edit.OnKeyPress := TKeyPressEvent (Method);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
begin
for i:=0 to ComponentCount-1 do
  if (Components[i] is TEdit) then
      AssignEditKey(TEdit(Components[i]));
end;


МистерТ   (2008-08-28 12:43:00) [9]

тебе уже все ответили, имей уважение к ответившим, прочитай ВСЕ что написано и сделай как тебе надо.


snake-as   (2008-08-28 12:39:00) [10]

Извините, что ввел глупо поставленным вопросом. Вот что мне нужно:
печатаешь на компоненте Edit тупо текст, нажимаешь, например, Enter и срабатывает процедура. И так в каждом компоненте. Конечно, можно вручную прописать на каждом, но хотелось автоматизировать.  Ega23, я немного не понял, что это значит хотя бы на словах.


Palladin   (2008-08-28 12:37:00) [11]


> Vlad Oshin ©   (28.08.08 12:35) [9]

TWinControl.OnKeyPress + F1

..и Игорь избавится от этой боли в душе :)


Игорь Шевченко   (2008-08-28 12:35:00) [12]


> [Pascal Error] Unit1.pas(40): E2009 Incompatible types:
> 'Parameter lists differ'


Больно слышать


Vlad Oshin   (2008-08-28 12:35:00) [13]

procedure EditClck (Self : TEdit; Sender : TEdit);
begin
 ShowMessage('По мне, '+Self.Name+', кликнули  ');
end;

procedure AssignEditKey (const Edit : TEdit);
var
 Method : TMethod;
begin
 Method.Code := @EditClck;
 Method.Data := Edit;
 Edit.OnKeyPress := TNotifyEvent (Method); [Pascal Error] Unit1.pas(40): E2009 Incompatible types: 'Parameter lists differ'
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
begin
for i:=0 to ComponentCount-1 do
  if (Components[i] is TEdit) then
      AssignEditKey(TEdit(Components[i]));
end;
[Pascal Error] Unit1.pas(40): E2009 Incompatible types: 'Parameter lists differ'


Игорь Шевченко   (2008-08-28 12:33:00) [14]


> а вот как присвоить onKeyPress?


также


Vlad Oshin   (2008-08-28 12:09:00) [15]

если

> имеется в виду кнопка мыши


procedure EditClck (Self : TEdit; Sender : TEdit);
begin
 ShowMessage('По мне, '+Self.Name+', кликнули  ');
end;

procedure AssignEditKey (const Edit : TEdit);
var
 Method : TMethod;
begin
 Method.Code := @EditClck;
 Method.Data := Edit;
 Edit.OnClick := TNotifyEvent (Method);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
begin
for i:=0 to ComponentCount-1 do
  if (Components[i] is TEdit) then
      AssignEditKey(TEdit(Components[i]));
end;


а вот как присвоить onKeyPress?


Deltas   (2008-08-28 11:55:00) [16]

Наверное, имеется в виду кнопка мыши. Т.е. клик по компоненту TEdit. Вопрос поставлен, конечно, криво...


DVM   (2008-08-28 11:45:00) [17]


> при нажатии кнопки на каждом компоненте Edit

я конечно догадываюсь о чем идет речь, но все же, скажите мне как можно кнопку нажать на компоненте Edit?

Кнопку можно нажать на клавиатуре, Edit же знать не знает ни о каких кнопках. Если же имеется в виду компонент TButton, то спрашивается причем здесь Edit?


{RASkov}   (2008-08-28 11:32:00) [18]

> [0] snake-as ©   (28.08.08 10:57)

Вы о чем думаете когда задаете вопросы?
ЗЫЖ Это не только к автору вопрос...


Ega23   (2008-08-28 11:08:00) [19]

procedure TForm1.OnButton1Click(Sender : TObject);
var
 i : Integer;
begin
 for i:=0 to ComponentCount-1 do
   if (Components[i] is TEdit) then
     TEdit(Components[i]).Твоя_Процедура;
end;


МистерТ   (2008-08-28 11:03:00) [20]

в OnClick кнопки пробегаешься по всем дочерним компонентам формы, если компонент является экземпляром класса TEdit вызываешь нужную тебе процедуру.
Все "входящие" вопросы не раз обсуждались на этом форуме.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо