![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать, чобы при нажатии кнопки на каждом компоненте Edit
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 вызываешь нужную тебе процедуру.
Все "входящие" вопросы не раз обсуждались на этом форуме.