[Lazarus] How do you set an event at runtime?
Peter Williams
pewilliams2010 at live.com
Tue Jan 4 19:51:20 CET 2011
Hi Frank,
Date: Tue, 4 Jan 2011 17:56:54 +0000
From: vfclists at gmail.com
To: lazarus at lists.lazarus.freepascal.org
Subject: [Lazarus] How do you set an event at runtime?
>I need to create some databases at runtime which use same event handling code as a component created at design time.
>Is there some way to set the event handling property of a component at runtime?
I am not sure about databases but with a TMainMenu's TMenuItems component, in Delphi 7 I do this:
This code is all ten+ years old !
// modified by P.Williams 28 Sept 2000
uses collect_two_wd_cmd;
procedure TeditForm.CommandHandler(Sender: TObject);
begin
// do whatever you like
end;
procedure TeditForm.define_commands_menu;
var
j : integer;
amenuitem : tmenuitem;
begin
commands1.clear;
amenuitem := tmenuitem.create( self );
amenuitem.caption := '<New 2 Word Command>';
amenuitem.OnClick := CommandHandler;
commands1.add( amenuitem );
for j := 0 to command.count - 1 do
if command.items[ j ].command_name <> '' then
begin
amenuitem := tmenuitem.create( self );
amenuitem.caption := command.items[ j ].command_name;
amenuitem.OnClick := CommandHandler;
commands1.add( amenuitem );
end;
end; { define_commands_menu }
{---------------------------------------------------------}
// Collect_two_wd_cmd.PAS -- defines the custom components TNodeList and TNode, based
// on the Delphi components TCollection and TCollectionItem,
// respectively. Author: Steve Koterski; 9/4/97.
//
// modified by P.Williams 11 Oct 2000
unit collect_two_wd_cmd;
interface
uses
Windows, SysUtils, Classes, collect2;
// collect2 is one of my own components
type
string20 = string[20];
TNode = class(TCollectionItem)
private
// this is the private data variables
fcommand_name: string20;
fcommand_effect_table: t2_wd_cmd_sub_nodelist;
protected
public
published
procedure Assign(Source: TPersistent); override;
// this is the published data variables
property command_name: string20 read fcommand_name write fcommand_name;
property command_effect_table: t2_wd_cmd_sub_nodelist
read fcommand_effect_table write fcommand_effect_table;
end;
T2_wd_cmd_NodeList = class(TCollection)
private
FOwner: TPersistent;
function GetItem(Index: Integer): TNode;
procedure SetItem(Index: Integer; Value: TNode);
protected
function GetOwner: TPersistent; override;
public
constructor Create(Owner: TPersistent);
// destructor Destroy; override;
procedure Add(command_name: string20; command_effect_table: t2_wd_cmd_sub_nodelist);
property Items[Index: Integer]: TNode read GetItem write SetItem; default;
published
end;
implementation
{TNode}
procedure TNode.Assign(Source: TPersistent);
begin
command_name := TNode(Source).command_name;
command_effect_table := TNode(Source).command_effect_table;
end;
{TNodeList}
constructor T2_wd_cmd_NodeList.Create(Owner: TPersistent);
begin
FOwner := Owner;
inherited Create(TNode);
end;
{
destructor T2_wd_cmd_NodeList.Destroy;
var
i: Integer;
begin
for i := 0 to Count - 1 do
if Assigned(Items[i]) then
Items[i].Free;
Inherited;
end;
}
function T2_wd_cmd_NodeList.GetItem(Index: Integer): TNode;
begin
Result := TNode(inherited GetItem(Index));
end;
procedure T2_wd_cmd_NodeList.SetItem(Index: Integer; Value: TNode);
begin
inherited SetItem(Index, TCollectionItem(Value));
end;
procedure T2_wd_cmd_NodeList.Add(command_name: string20;
command_effect_table: t2_wd_cmd_sub_nodelist);
var
n: TNode;
begin
n := TNode(inherited Add);
n.command_name := command_name;
n.command_effect_table := command_effect_table;
end;
function T2_wd_cmd_NodeList.GetOwner: TPersistent;
begin
Result := FOwner;
end;
end.
// COLLECT.PAS -- defines the custom components TNodeList and TNode, based
// on the Delphi components TCollection and TCollectionItem,
// respectively. Author: Steve Koterski; 9/4/97.
//
// modified by P.Williams 28 Sept 2000
unit collect2;
interface
uses
Windows, SysUtils, Classes;
type
TNode = class(TCollectionItem)
private
// this is the private data variables
fobject_no,
feffect_code,
fconditional_on: integer;
protected
public
published
procedure Assign(Source: TPersistent); override;
// this is the published data variables
property object_no: integer read fobject_no write fobject_no;
property effect_code: integer read feffect_code write feffect_code;
property conditional_on: integer read fconditional_on write fconditional_on;
end;
T2_wd_cmd_sub_NodeList = class(TCollection)
private
FOwner: TPersistent;
function GetItem(Index: Integer): TNode;
procedure SetItem(Index: Integer; Value: TNode);
protected
function GetOwner: TPersistent; override;
public
constructor Create(Owner: TPersistent);
// destructor Destroy; override;
procedure Add(object_no, effect_code, conditional_on: integer);
property Items[Index: Integer]: TNode read GetItem write SetItem; default;
published
end;
implementation
{TNode}
procedure TNode.Assign(Source: TPersistent);
begin
object_no := TNode(Source).object_no;
effect_code := TNode(Source).effect_code;
conditional_on := TNode(Source).conditional_on;
end;
{TNodeList}
constructor T2_wd_cmd_sub_NodeList.Create(Owner: TPersistent);
begin
FOwner := Owner;
inherited Create(TNode);
end;
{
destructor T2_wd_cmd_sub_NodeList.Destroy;
var
i: Integer;
begin
for i := 0 to Count - 1 do
if Assigned(Items[i]) then
Items[i].Free;
Inherited;
end;
}
function T2_wd_cmd_sub_NodeList.GetItem(Index: Integer): TNode;
begin
Result := TNode(inherited GetItem(Index));
end;
procedure T2_wd_cmd_sub_NodeList.SetItem(Index: Integer; Value: TNode);
begin
inherited SetItem(Index, TCollectionItem(Value));
end;
procedure T2_wd_cmd_sub_NodeList.Add(object_no, effect_code, conditional_on: integer);
var
n: TNode;
begin
n := TNode(inherited Add);
n.object_no := object_no;
n.effect_code := effect_code;
n.conditional_on := conditional_on;
end;
function T2_wd_cmd_sub_NodeList.GetOwner: TPersistent;
begin
Result := FOwner;
end;
end.
pew
--
>Frank Church
>=======================
>http://devblog.brahmancreations.com
--
_______________________________________________
Lazarus mailing list
Lazarus at lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20110105/faf81845/attachment-0003.html>
More information about the Lazarus
mailing list