Модератор: Модераторы
Сквозняк писал(а):После обработки события надо бы как-то подтереть все лишние клики мыши и прочие события чтобы не обрабатывать лишние. Как это в лазарусе обычно делается?
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;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37