Модератор: Модераторы
Сквозняк писал(а):После обработки события надо бы как-то подтереть все лишние клики мыши и прочие события чтобы не обрабатывать лишние. Как это в лазарусе обычно делается?
unit Unit1; 
{$mode objfpc}{$H+}
interface
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
  { TForm1 }
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 
var
  Form1: TForm1; 
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button2Click(Sender: TObject);
begin
  caption:='2';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
   caption:='1';
   Button2.OnClick:=Nil; //после этого событие OnClick у  Button2 затрется. его не будет.
                                   //Если же нужно присвоить новое событие то заведите процедуру 
                                  //типа  TNotifyEvent = procedure(Sender: TObject) of object; и присвойте ее вместо NiL
end;
end.
или более подробнее описать
PROGRAM DEMKA_OCISTKI_SOBYTII;
uses CRT;
var WW3: BYTE;
PROCEDURE StiralkaSobytiiKlavy;
var QQ3: BYTE;
LABEL 1;
BEGIN
1:
FOR QQ3:=0 TO 255 DO IF KEYPRESSED=TRUE THEN READKEY;
DELAY(500);
IF KEYPRESSED=TRUE THEN GOTO 1;
END;
BEGIN
DELAY(300);
WRITELN;
StiralkaSobytiiKlavy; //Очистка очереди событий
WRITELN('NAZMI NA LJUBUJU KLAVISU');
WW3:=0;
While WW3<1 DO BEGIN
               IF KEYPRESSED=TRUE THEN BEGIN
                                       WRITELN('Ty nazal na klavisu ',READKEY);
                                       WW3:=1;
                                       END;
               DELAY(1);//ЭТО ЧТОБЫ ПРОЦ ЗРЯ НЕ ГРЕТЬ
               END;
DELAY(500);
StiralkaSobytiiKlavy; //Очистка очереди событий
WRITELN('NAZMI ESCE ODNU KLAVU');
While WW3<2 DO BEGIN
               IF KEYPRESSED=TRUE THEN WW3:=2;
               DELAY(1);
               END;
WRITELN('SPASIBO ZA SOTRUDNICESTVO');
END.
 Button2.OnClick:=Nil; //после этого событие OnClick у  Button2 затрется. его не будет.unit unit1;
{$mode objfpc}{$H+}
interface
uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  ExtCtrls, unix;
type
  { TForm1 }
  TForm1 = class(TForm)
   Image1: TImage;
   Image2: TImage;
   procedure FormClick(Sender: TObject);
   procedure FormDblClick(Sender: TObject);
   procedure Image2Click(Sender: TObject);
   procedure Image2MouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
  private
    { private declarations }
  public
    { public declarations }
  end; 
var
  Form1: TForm1; 
implementation
{ TForm1 }
procedure TForm1.FormDblClick(Sender: TObject);
begin
end;
procedure TForm1.FormClick(Sender: TObject);
begin
fpsystem('mplayer "/home/user/Desktop/z/z2/FlashXXUN2LII"'); //[[[[[[[[[[[[
end;
procedure TForm1.Image2Click(Sender: TObject);
begin
end;
procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
fpsystem('mplayer "/home/user/Desktop/z/z2/FlashXXXmnJ7D"'); //[[[[[[[[[[[[
end;
initialization
  {$I unit1.lrs}
end.
procedure TForm1.FormClick(Sender: TObject);
begin
  // снимаем обработчик:
  Self.OnClick := nil;
  fpsystem('mplayer "/home/user/Desktop/z/z2/FlashXXUN2LII"'); //[[[[[[[[[[[[
  // обрабатываем накопившиеся сообщения (то, что вы называете событиями)
  // важно сделать это до возвращения обработчика на место:
  Application.ProcessMessages;
  // Возвращаем обработчик:
  Self.OnClick := @FormClick;
end;procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
Image2.Enabled:=False;
fpsystem('mplayer "/home/buratino/Desktop/z/z2/FlashXXXmnJ7D"');
//здесь нужно сгенерировать событие которое запустит процедуру TForm1.Label1DblClick
end;
procedure TForm1.Label1DblClick(Sender: TObject);
begin
 Image2.Enabled:=True;
end; Сквозняк писал(а):Прблема в том что я не знаю как записать генерацию события.
Label1DblClick(Label1);Image2.Enabled:=False;
fpsystem('mplayer "/home/buratino/Desktop/z/z2/FlashXXXmnJ7D"');
Image2.Enabled:=True;Кстати, это не генерация события, а вызов его обработчика.
- Код: Выделить всё
Label1DblClick(Label1);
Такой простой трюк сработал бы в процедурной программе а в объекте нужно прыгать с бубном (искать уязвимость объекта) чтобы заработала какая-то непредусмотренная мелочь.А вообще не очень ясно - зачем?
- Код: Выделить всё
Image2.Enabled:=False;
fpsystem('mplayer "/home/buratino/Desktop/z/z2/FlashXXXmnJ7D"');
Image2.Enabled:=True;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1