1. Events are not plain procedures, but methods (declared as "procedure of object" - which means, procedures declared inside the class definition, procedures that belong to an object). So, you should declare your ChkClk procedure inside your TForm1 (or whatever) class:
TForm1 = class(TForm)
private
{ private declarations }
procedure ChkClk(Sender: TObject); // declared inside the TForm1 class
...
end;
and implemented later in same unit (note "TForm1." prefix in front of method name):
procedure TForm1.ChkClk(Sender: TObject);
...
2. if you use mode objfpc (which is default in Lazarus, so you probably do), you should use the adress operator (that is @ operator) in front of the method variable:
CheckBox1.OnClick := @ChkClk;
3. In your code Sender.Checked is wrong, because Sender is of TObject type, which does not have Checked property. However, you can check if Sender is actually of TCheckBox type and use cast:
procedure TForm1.ChkClk(Sender: TObject);
begin
if Sender is TCheckBox then begin
if TCheckBox(Sender).Checked then
ShowMessage('checked')
else
ShowMessage('not checked');
end;
end;