Przypisanie procedury OnMouseDown

0

Witam,
Przypisuję procedurę:

 
procedure TForm1.ControlMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
begin
....
end;


memo1.onmousedown:=controlMouseDown;

I wyskakuje błąd "Wrong number of parameters specified for call to "ControlMouseDown""

Gdy wpiszę:

memo1.onmousedown:=controlMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer); 

też błąd.
Jak przypisać tą procedurę?

1

Ręce opadają. Skąd wziąłeś taką definicje tej metody? Nie prościej było zobaczyć jak wygląda gotowa po dodaniu zdarzenia poprzez Object Inspector? Ja rozumiem, dział Newbie. Ale bez przesady. Jest przecież Google, jest Help do IDE. Tak trudno chwilę samemu pokombinować?

//...
type
  TForm1 = class(TForm)
    Memo1 : TMemo;
    procedure FormCreate(Sender : TObject);
  private
  public
    procedure OgarniajGoogleOrazPoczytajKursPodstaw
      (Sender : TObject; Shift : TShiftState; X, Y : Integer);
  end;

var
  Form1 : TForm1;

implementation

{$R *.dfm}

procedure TForm1.OgarniajGoogleOrazPoczytajKursPodstaw
  (Sender : TObject; Shift : TShiftState; X, Y : Integer);
begin
  ShowMessage('KOniecznie poczytaj jakiś kurs z podstawami Delphi!');
end;

procedure TForm1.FormCreate(Sender : TObject);
begin
  Memo1.OnMouseMove := OgarniajGoogleOrazPoczytajKursPodstaw;
end;
//...
1

To raczej nie Delphi a Object Pascal (pod Lazarusem) napisz:

Memo1.OnMouseDown:= @ControlMouseDown;

EDIT: lub zmień tryb z objfpc na delphi (dyrektywa {$mode delphi}')

0

Masz rację @kAzek, ale jeśli jako tag widzę delphi to sugeruje mi to również użyte IDE. A i jakby pytacz googlował, to o informacji na temat wspomnianej przez Ciebie dyrektywie kompilatora natknął by się na mnóstwie stron.

0

To ja jeszcze dorzucę kod pozwalający wywołać metodę już zdefiniowaną pod Memo1.OnMouseMove oraz zdarzenie z normalnej procedury. Mój przykład dotyczy OnExecute ale nie ma znaczenia co się podepnie :)

Najpierw definiujemy typ:

type
  OnExecuteOld = procedure(Sender: TObject) of object;

Następnie w klasie definiujemy sobie procedurę oraz obiekt naszego typu:

type
  TfmMain = class(TForm)
  private
    procedure BeforeExecuteSave(Sender: TObject);
  public
    { Public declarations }
    OldSaveProc:OnExecuteOld;
  end;

Następnie w onShow (lub gdzie komu wygodniej) zapisujemy do naszego OldSaveProc dotychczasowe zdarzenie:

procedure TfmMain.FormShow(Sender: TObject);
begin
  OldSaveProc := Designer.SaveCmd.OnExecute;
  Designer.SaveCmd.OnExecute := BeforeExecuteSave;
end;

i najważniejsze nasza nowa procedura BeforeExecuteSave:

procedure TfmMain.BeforeExecuteSave(Sender: TObject);
begin
  inherited;
  //To co potrzebujemy i następnie oryginalne wywołanie zdarzenia
  OldSaveProc(Sender);
 //i kolejne operacje po wywołaniu zdarzenia
end;

W kilku sytuacjach ta konstrukcja uratowała mi życie :)

0

Dziękuję za pomoc. Rzeczywiście to nie delphi a Typhon.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.