Recent

Author Topic: how to assign onClick event for checbox  (Read 4343 times)

vks

  • New Member
  • *
  • Posts: 33
how to assign onClick event for checbox
« on: March 12, 2015, 11:54:06 am »
Hello..

I am dynamically creating checkboxes based on database values.
How to create the OnClick event for that CheckBoxes ?
I tried assigning procedure to onclick property of check box.

Code: [Select]
procedure ChkClk(Sender: TCheckBox);
begin
  if ( Sender.Checked=True) then
   ShowMessage('checked')
   Else
     ShowMessage('not checked');
end;


Code: [Select]
CheckBox.OnClick := ChkClk(CheckBox);
But it shows error 'untype' found. expected "<procedure variable type of procedure(TObject) of object;Register>".
Please do help me solve it.
« Last Edit: March 12, 2015, 11:56:44 am by vks »

Zoran

  • Hero Member
  • *****
  • Posts: 1830
    • http://wiki.lazarus.freepascal.org/User:Zoran
Re: how to assign onClick event for checbox
« Reply #1 on: March 12, 2015, 12:27:11 pm »
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:
Code: [Select]
  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):

Code: [Select]
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:
Code: [Select]
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:
Code: [Select]
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;
« Last Edit: March 12, 2015, 12:30:10 pm by Zoran »

vks

  • New Member
  • *
  • Posts: 33
Re: how to assign onClick event for checbox
« Reply #2 on: March 12, 2015, 12:48:16 pm »
Hey Zoran..

hats off.. your suggestion helped me a lot.
Thanks so much  :D :D :D :)

vks

  • New Member
  • *
  • Posts: 33
Re: how to assign onClick event for checbox
« Reply #3 on: March 17, 2015, 08:16:07 am »
Hello,

Can't I assign a custom string value to any of checkbox properties, apart from checkbox.caption?

howardpc

  • Hero Member
  • *****
  • Posts: 4144
Re: how to assign onClick event for checbox
« Reply #4 on: March 17, 2015, 09:56:48 am »
Only to those checkbox properties that are strings (or equivalent to strings), such as

Hint
HelpKeyword
AccessibleValue
AccessibleDescription

vks

  • New Member
  • *
  • Posts: 33
Re: how to assign onClick event for checbox
« Reply #5 on: March 17, 2015, 10:08:05 am »
Thanks howardpc  :) (y)

 

TinyPortal © 2005-2018