Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Airr
0 / 0 / 0
Регистрация: 22.07.2014
Сообщений: 12
1

Разные событие OnClick для кнопок

22.10.2014, 16:52. Просмотров 1805. Ответов 2
Метки нет (Все метки)

Создаю программно кнопки через контекстное меню,и диалог.Потом когда кнопка создана,делаю ей событие "один клик",чтоб по клику она открывала(запускала) тот или иной файл,выбранный в диалоге.Но проблема в том что,одно и тоже событие выходит для всех кнопок,то есть,последняя созданная кнопка,открывает(запускает) например фотографию,но и все предыдущие кнопки,тоже буду открывать именно эту фотографию.В общем хочу сделать разные события OnClick для разных кнопок.Чтоб каждая кнопка делала что-то свое.Я знаю почему так работает,ибо так написал,просто не знаю как правильно реализовать "разные события" для OnClick,если такое возможно вообще.Мало опыта в программировании.Помогите пожалуйста.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
var
  Form1: TForm1;  i,j :integer;
 
implementation
 
{$R *.dfm}
 
function ExecuteFile(const FileName, Params, DefaultDir: string; ShowCmd: Integer): THandle;
begin
  Result := ShellExecute(Application.MainForm.Handle, nil, PChar(FileName), PChar(Params),
    PChar(DefaultDir), ShowCmd);
end;
 
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  var P: TPoint;
begin
 P:=GetClientOrigin;
  if Button = mbRight then
    PopupMenu1.Popup(X+P.X+Form1.Left, Y+P.Y+Form1.Top);
end;
 
Procedure TForm1.Button1Click( Sender : TObject );
Begin
 ExecuteFile(OpenDialog1.FileName,'','',SW_SHOW);
End;
 
procedure TForm1.CreateButton1Click(Sender: TObject);
begin
 if OpenDialog1.Execute then
 begin
    if (i = 0) or (i < 10) then
 begin
  with TButton.Create(Self) do
  begin
    Left := 0;
    Top := i * 25;
    Parent := Self;
    OnClick := Button1Click;
  end;
  inc(i);
  if (i > 9) and (i < 20) then
 begin
  with TButton.Create(Self) do
  begin
    Left := 100;
    Top := j * 25;
    OnClick := Button1Click;
    Parent := Self;
  end;
  inc(i);
  inc(j);
 end;
 end;
 end;
end;
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2014, 16:52
Ответы с готовыми решениями:

Событие onClick для собственного класса
Есть класс у родителя которого нет события onClick. Хочу создать событие onClick у наследника этого...

Написать для трех кнопок общий обработчик OnClick для вывода, скрытия/отображения и изменения цвета текста
На форме Form_Lb расположена пустая метка Lb_txt с текстом и три кнопки класса TButton с...

Кнопка и событие onclick
Во общем, как подсчитать количество выполнение события онклик для кнопки. При чём если кнопка...

Процедура на событие OnClick
Привет! ребята помогите разобраться плз... пишу свой класс, в конструкторе создаю контекстное меню...

Событие OnClick компонент SpeedImage
на событие OnClick, компонент SpeedImage должен поменять картинку в свойстве Glyph на другую,...

2
D1973
Модератор
4107 / 2954 / 1423
Регистрация: 21.01.2014
Сообщений: 12,641
Записей в блоге: 3
Завершенные тесты: 1
24.10.2014, 07:32 2
Идея следующая...
На форме лежит кнопка Button1. При нажатии на нее создаются еще 3 кнопки с одним на всех обработчиком события OnClick. Первая запускает блокнот, вторая - калькулятор, третья просто закрывает программу.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, ShellAPI;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private { Private declarations }
    btnCount : integer;
    procedure CreateBtn(X, Y : integer; Capt : string);
    procedure BtnClick(Sender: TObject);
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.BtnClick(Sender: TObject);
begin
 case (Sender as TButton).Tag of
  1 : ShellExecute(0,'open','notepad.exe',nil,nil,sw_show);
  2 : ShellExecute(0,'open','calc.exe',nil,nil,sw_show);
  3 : Close;
 end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 CreateBtn(Button1.Left, Button1.Top + 27, 'Notepad');
 CreateBtn(Button1.Left, Button1.Top + 54, 'Calc');
 CreateBtn(Button1.Left, Button1.Top + 81, 'Exit');
end;
 
procedure TForm1.CreateBtn(X, Y: integer; Capt: string);
var B : TButton;
begin
 B := TButton.Create(Self);
 B.Parent := Self;
 B.Name := 'Button' + IntToStr(btnCount);
 B.Left := X;
 B.Top := Y;
 B.Tag := btnCount - 1;
 B.Caption := Capt;
 B.OnClick := BtnClick;
 inc(btnCount);
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var i : integer;
begin
 btnCount := 0;
 for I := 0 to Form1.ControlCount - 1 do
  if Form1.Controls[i] is TButton then inc(btnCount);
 inc(btnCount);
end;
 
end.
Если что-то неясно - задавай вопросы.
1
ZfoxAK
529 / 505 / 230
Регистрация: 26.11.2012
Сообщений: 2,028
24.10.2014, 08:22 3
Цитата Сообщение от Airr Посмотреть сообщение
Чтоб каждая кнопка делала что-то свое.
Вариантов несколько
Вариант 1. Для каждой кнопки пишется свой обработчик события OnClick. При создании кнопки присваеваешь соответсвующий обработчик.
Вариант 2. Для каждой создаваемой кнопки свойству Tag : Integer присваевается какое либо значение 1, 2, 44 и т.д.
Пример использования - выводит значения Tag нажатой кнопки
Delphi
1
2
3
4
5
6
procedure TForm1.MyButtonClick(Sender: TObject);
var i:integer;
begin
i:=TButton(Sender).Tag;
Label1.Caption:=IntToStr(i);
end;
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2014, 08:22

Как отделить событие OnClick и OnDblClick?
Добрый день. Как разделить событие OnClick и OnDblClick, для SpeedButton? Допустим, если кликнуть...

Событие OnClick на программно создаваемый объект
Хаюшки. Ребят, нужно сделать так, чтобы Delphi обрабатывал клик на один объект из массива. То...

Событие Onclick под динамически созданными кнопками.
Привет всем помогите решить проблему. Есть база данных. Считываю по строке из базы данных и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru