Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.05;
Скачать: CL | DM;

Вниз

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

 
snake-as ©   (2008-08-28 10:57) [0]

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


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

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


 
Dennis I. Komarov ©   (2008-08-28 11:03) [2]

ВОзможно не понял, но присвой событию каждого едита одну и туже процедуру...


 
Ega23 ©   (2008-08-28 11:08) [3]

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;


 
{RASkov} ©   (2008-08-28 11:32) [4]

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

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


 
DVM ©   (2008-08-28 11:45) [5]


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

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

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


 
Deltas ©   (2008-08-28 11:55) [6]

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


 
Vlad Oshin ©   (2008-08-28 12:09) [7]

если

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


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?


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


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


также


 
Vlad Oshin ©   (2008-08-28 12:35) [9]

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:35) [10]


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


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


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


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

TWinControl.OnKeyPress + F1

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


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

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


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

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


 
Vlad Oshin ©   (2008-08-28 12:45) [14]

:)

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:47) [15]


> печатаешь на компоненте 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;
 


 
Leonid Troyanovsky ©   (2008-08-28 12:53) [16]


> 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.


 
Vlad Oshin ©   (2008-08-28 12:54) [17]

а вернемся к


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?


 
Slym ©   (2008-08-28 13:02) [18]

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;


 
Dennis I. Komarov ©   (2008-08-28 13:05) [19]

[12]

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


 
Slym ©   (2008-08-28 13:10) [20]

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;


 
snake-as ©   (2008-08-28 15:36) [21]

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



Страницы: 1 вся ветка

Текущий архив: 2008.10.05;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.016 c
8-1185268687
s7r
2007-07-24 13:18
2008.10.05
Странная проблема с GDI+


2-1219307844
ничтожная козявка
2008-08-21 12:37
2008.10.05
заNILить форму после Close;


2-1219413550
zoh
2008-08-22 17:59
2008.10.05
image&text


15-1218699579
GRAND25
2008-08-14 11:39
2008.10.05
Давненько что-то я тут у вас не был...


2-1219955393
dars73
2008-08-29 00:29
2008.10.05
Проблема с записью в RichEdit