Авторизация

Логин: Пароль:
Регистрация Забыли свой пароль?

Как создать событие?

Страницы: 1
Как создать событие?
Подскажите как в Лазарусе можно создать событие, например, onClick для кнопки?
У меня Лазарус "под рукой" сейчас нет, но если не ошибаюсь для такого события достаточно просто сделать двойной клик по кнопке.
Я имел ввиду создать событие во время выполнения программы
Зачем его делать во время выполнения? Если вам нужно выполнять различные действия в зависимости от каких-то данных, то это можно запрограммировать в той же процедуре.
Я создаю кнопку во время выполнения программы, поэтому я не могу сделать то, что вы предлагаете.
Вот так можно сделать
Код
...
type
  TForm1 = class(TForm)
    ...
    procedure Button1Click(Sender: TObject);
    procedure myOnClickHandler(Sender: TObject);
...
procedure TForm1.Button1Click(Sender: TObject);
var
  btn: TButton;
begin
  btn := TButton.Create(Form1);
  btn.Parent := Form1;
  btn.Caption := 'новая кнопка';
  btn.OnClick := myOnClickHandler;
end;
 
procedure TForm1.myOnClickHandler(Sender: TObject);
begin
  ShowMessage('');
end;
А если у меня несколько кнопок, тогда как быть? Я же не могу знать сколько их будет в конечном итоге.
Как-то вот так
Код
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure OC(Sender: TObject);
  end;
 
var
  Form1: TForm1;
  i:integer=0;
implementation
 
{$R *.dfm}
procedure TForm1.OC(Sender: TObject);
begin
  ShowMessage((Sender as TButton).Caption)
end;
procedure TForm1.Button1Click(Sender: TObject);
var
  Button:TButton;
begin
  inc(I);
  Button:=TButton.Create(Form1);
  with Button do
  begin
    Parent:=Form1;
    Top:=Random(Form1.Height);
    Left:=Random(Form1.Width);
    Caption:='Кнопка '+IntToStr(I);
    OnClick:=OC
  end;
end; 
end.
Ничего не понял, как это может мне помочь?
Вы же можете так написать
Код
procedure TForm1.OC(Sender: TObject);
begin
  with (Sender as TButton) do
  if Caption='Кнопка 1' then
    Form1.Close
  else
    if Caption = 'Кнопка 2' then
      ShowMessage('Hello world')
    else
      ShowMessage('Нажата другая кнопка!')
end;

Дальше расписывать думаю нет смысла.
Спасибо, это, конечно, не совсем то, что мне бы хотелось, но лучше я сам придумать не в состоянии.
А если мне нужно в созданный программно TImage внести параметры X и Y?
Тогда примерно так
Код
Image1.OnMouseDown:=OC;
...
procedure TForm1.OC(Sender: TObject);
var X,Y:real;
...
begin
Это же просто, копируете стандартный OnMouseDown и немного его изменяете. В итоге должно получиться вот так
Код
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure MyMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
procedure TForm1.MyMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Form1.Caption:=Inttostr(x)+' - '+Inttostr(y)
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  Image1.OnMouseDown:=MyMouseDown
end;
 
end.
Цитата
Иван Прокофьев пишет:
Image1.OnMouseDown:=MyMouseDown

Как раз на этой строчке он у меня и требует параметры
Главная чтобы ваш обработчик события совпадал со стандартным обработчиком, тогда ругаться не будет.
Скопируйте, то что я написал и у вас все должно работать. У меня этот код работает.
Ну вот я сначала пишу
Код
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    ...
  private
    { private declarations }
  public
    { public declarations }
    Image1: TImage;
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer
      );
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  end;

Затем делаю так
Код
procedure TForm1.MenuItem3Click(Sender: TObject);
begin
 Image1:= TImage.Create(self);
 Image1.Parent:=ScrollBox1;
 Image1.Top:=0;
 Image1.Left:=0;
 Image1.Width:=ScrollBox1.Width;
 Image1.Height:=ScrollBox1.Height;
 Image1.OnMouseDown:=Image1MouseDown;
 Image1.OnMouseMove:=Image1MouseMove;
 Image1.OnMouseUp:=Image1MouseUp;
 Image1.Canvas.Brush.Color:=clWhite;
 Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Width);
 Image1.Show;
end;

И далее уже сами процедуры
Напишите еще текст ошибки.
Вот
unit1.pas(213,37) Error: Wrong number of parameters specified for call to "Image1MouseDown"
Приведите сами процедуры, а то вы их описали, но в коде я их не вижу.
Маленький совет.
Лучше заменить это
Код
procedure TForm1.MenuItem3Click(Sender: TObject);
begin
 Image1:= TImage.Create(self);
 Image1.Parent:=ScrollBox1;
 Image1.Top:=0;
 Image1.Left:=0;
 Image1.Width:=ScrollBox1.Width;
 Image1.Height:=ScrollBox1.Height;
 Image1.OnMouseDown:=Image1MouseDown;
 Image1.OnMouseMove:=Image1MouseMove;
 Image1.OnMouseUp:=Image1MouseUp;
 Image1.Canvas.Brush.Color:=clWhite;
 Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Width);
 Image1.Show;
end;

На вот это
Код
procedure TForm1.Button1Click(Sender: TObject);
var
  Image:TImage;
begin
  Image:= TImage.Create(self);
  with Image do
  begin
    Parent:=ScrollBox1;
    Top:=0;
    Left:=0;
    Width:=ScrollBox1.Width;
    Height:=ScrollBox1.Height;
    OnMouseDown:=MyMouseDown;
    OnMouseMove:=MyMouseMove;
    OnMouseUp:=MyMouseUp;
    with Canvas do
    begin
      Brush.Color:=clWhite;
      Rectangle(0,0,Width,Width)
    end;
    Show
  end;
end;
А вообще должно быть вот так
Код
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
 
type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    ScrollBox1: TScrollBox;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure MyMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure MyMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure MyMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
procedure TForm1.MyMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  {здесь Ваш код}
end;
 
procedure TForm1.MyMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  {здесь Ваш код}
end;
 
procedure TForm1.MyMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  {здесь Ваш код}
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  Image:TImage;
begin
  Image:= TImage.Create(self);
  with Image do
  begin
    Parent:=ScrollBox1;
    Top:=0;
    Left:=0;
    Width:=ScrollBox1.Width;
    Height:=ScrollBox1.Height;
    OnMouseDown:=MyMouseDown;
    OnMouseMove:=MyMouseMove;
    OnMouseUp:=MyMouseUp;
    with Canvas do
    begin
      Brush.Color:=clWhite;
      Rectangle(0,0,Width,Width)
    end;
    Show
  end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Image1.OnMouseDown:=MyMouseDown
end;
 
end.
Вот, теперь все работает нормально.
Страницы: 1
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)