(200分)求一组件及其原码(线上等待,急急急急急急急),Up有分!!!(200分)

  • 主题发起人 主题发起人 sunnyahniu
  • 开始时间 开始时间
S

sunnyahniu

Unregistered / Unconfirmed
GUEST, unregistred user!
一个类似于ApplicationEvents组件,使起完成一类控件的事件:
如完成一个Form1上的所有TLabel的OnClick事件。
 
这是一段利用rtti实现的代码,你稍改一下就能用。
uses Typinfo;
procedure TForm1.Button1Click(Sender: TObject);
var
pp:ppropinfo;
i:integer;
begin
for i:=0 to componentcount-1 do
begin
pp:=getpropinfo(components,'onclick');
if pp<>nil then
if pp^.PropType^.Kind =tkmethod then
setmethodprop(components,pp,getmethodprop(button2,'onclick'));
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
form1.Caption :='执行成功';
end;

 
我想要的是组件的的原码,说白的是组件开发。
 
sorry,算我白说.
 
To:桦树皮!
首先的感谢你的回复,我现在真的很急!
我想要的是一个组件及其原码,功能我已经实现方法为:
一个ApplicationEvents.OnMessage,但现在我想写个组件有如下声明:
interface

uses
Windows, Messages, SysUtils, Classes, Controls, AppEvnts,
Graphics,StdCtrls,Dialogs;

type
TTALabelsEvent = class(Tcustomapplicationevents)
private
{ Private declarations }
FValue:String;
property OnMessage;
procedure OnMouseEnter(var Msg:TMessage);message cm_MouseEnter;
procedure OnMouseLeave(var Msg:TMessage);message cm_MouseLeave;
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
property Value :String read FValue write FValue;
procedure OnClick;
end;

procedure Register;

implementation

………………………………………………

请您帮我写实现部分,我就给你200分!!!!!!
 
怎么这么多懒人
 
RX是有的
 
to: blmt
不是懒啊,小弟从未写过组件,实在是不会,所以才求救!![red][/red]
 
支持楼主,表示同情!
 
我来学习
 
真的是RX有
如果要写,何必一定要 用组件封装?代码不复杂。
 
都不知道你在说什么,把你的功能实现代码贴出来,以及你想要做什么!
 
to:seven_918
基本原码如下:


unit UTALabelsEvent;

interface

uses
Windows, Messages, SysUtils, Classes,
AppEvnts,Graphics, StdCtrls,
Forms, Controls, Dialogs;

type
TMessageEvent = procedure (var Msg: TMessage; var Handled: Boolean) of object;
TControlType = (TLabel);
TDoSomething = procedure(Sender:TObject) of Object;
TTALabelsEvent = class(Tcomponent)
private
{ Private declarations }
FEnable :Boolean;
FControlType:TControlType;
FValue:String;
FDoSomething:TDoSomething;
procedure appMsg(var Msg:tagMSG;var handled:boolean);
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner:TComponent);override;
destructor Destroy;override;
published
{ Published declarations }
property Enable:boolean read FEnable write FEnable;
property Value:String read FValue write FValue;
property ControlType:TControlType read FControlType write FControlType;
property DoSomething:TDoSomething read FDoSomething write FDoSomething;
end;


procedure Register;

implementation

procedure Register;
begin
RegisterComponents('TA', [TTALabelsEvent]);
end;

constructor TTALabelsEvent.Create(AOwner:TComponent);
begin
Inherited Create(AOwner);
if not (csDesigning in ComponentState) then
begin
end;
end;

destructor TTALabelsEvent.Destroy;
begin
inherited Destroy;
end;

procedure TTALabelsEvent.appMsg(var Msg:tagMSG;var handled:boolean);
begin
if (Msg.message = WM_LBUTTONDOWN)and Enable then
begin
if assigned(FDoSomething) then
DoSomething(Self);
end;
end;
end.
 
。。。。。。
type
TMessageEvent = procedure (var Msg: TMessage; var Handled: Boolean) of object;
{TControlType = (TLabel); 这里不要使用TLabel做元素,会出错}
TControlType = (ctLabel);
TDoSomething = procedure(Sender:TObject) of Object;
TTALabelsEvent = class(TComponent)
private
FAppEvent: TApplicationEvents;
FEnable: Boolean;
FControlType: TControlType;
FValue: String;
FDoSomething: TDoSomething;
procedure SetEnable(Value: Boolean); // 在设置Enable属性时做必要的处理
procedure appMsg(var Msg: tagMSG; var handled: boolean);
procedure CreateAppEvent; // 创建TApplicationEvents
procedure FreeAppEvent; // 释放TApplicationEvents
public
constructor Create(AOwner: TComponent);override;
destructor Destroy; override;
published
property Enable: boolean read FEnable write SetEnable;
{不知道你这个属性是干什么的,不过建议不要使用Value这个敏感的词来做属性}
{property Value:String read FValue write FValue;}
property ControlType: TControlType read FControlType write FControlType;
property DoSomething: TDoSomething read FDoSomething write FDoSomething;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('TA', [TTALabelsEvent]);
end;

procedure TTALabelsEvent.SetEnable(Value: Boolean);
begin
if FEnable = Value then Exit; //当设置的属性值与当前不同时才做处理
FEnable := Value;
if FEnable then
begin
if not (csDesigning in ComponentState) then
CreateAppEvent;
end
else begin
FreeAppEvent;
end;
end;

procedure TTALabelsEvent.CreateAppEvent; // 创建TApplicationEvents
begin
FreeAppEvent;
FAppEvent := TApplicationEvents.Create(nil);
FAppEvent.OnMessage := appMsg;
end;

procedure TTALabelsEvent.FreeAppEvent; // 释放TApplicationEvents
begin
if Assigned(FAppEvent) then
begin
FAppEvent.OnMessage := nil;
FAppEvent.Free;
end;
end;

constructor TTALabelsEvent.Create(AOwner:TComponent);
begin
Inherited Create(AOwner);
if (not (csDesigning in ComponentState)) and FEnable then
CreateAppEvent;
end;

destructor TTALabelsEvent.Destroy;
begin
FreeAppEvent;
inherited Destroy;
end;

procedure TTALabelsEvent.appMsg(var Msg:tagMSG;var handled:boolean);
begin
if (Msg.message = WM_LBUTTONDOWN)and Enable then
begin
if assigned(FDoSomething) then
DoSomething(Self);
end;
end;

end.
 
to seven_918
非常非常的感谢你!
我现在就指望您能帮我解决此问题了,我现在详细的把我的设计目的告诉您:
在一个Form上有若干个TLabel,如
TLabel1,TLabel2,TLabel3......
其中TLabel1.Caption:='Hello',TLabel3.Caption:='Hello',TLabel2.Caption:='test'等等
在软件设计时:程序员设置
TTALabelsEvent.FEnabe:=True;
TTALabelsEvent.ControlType = ctLabel;
TTALabelsEvent.FValue:='Hello';
TTALabelsEvent.DoSomething(Sender:TObject);
begin
ShowMessage('Hello,Hello!');
end;
软件用户者操作的情况是:
只要把鼠标移动到一个TLabel上,如果TLabel的Caption='Hello' 那么
TLabel.Font改变,如变为斜体,如果在TLabel上点击鼠标,那么就显示信息:'Hello,Hello!'
我非常急需,下带改后的代码,请您修改一下,谢谢!

unit UTALabelsEvent;

interface

uses
Windows, Messages, SysUtils, Classes,
AppEvnts,Graphics, StdCtrls,
Forms, Controls, Dialogs;

type
TControlType = (TLabel);
TDoSomething = procedure(Sender:TObject) of Object;
TTALabelsEvent = class(Tcomponent)
private
{ Private declarations }
DES :Boolean;
FEnable :Boolean;
FControlType:TControlType;
FValue:String;
FDoSomething:TDoSomething;
FOnMouseLeave: TNotifyEvent;
FOnMouseEnter: TNotifyEvent;
procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner:TComponent);override;
destructor Destroy;override;
published
{ Published declarations }
property Enable:boolean read FEnable write FEnable;
property Value:String read FValue write FValue;
property ControlType:TControlType read FControlType write FControlType;
property DoSomething:TDoSomething read FDoSomething write FDoSomething;
end;


procedure Register;

implementation


procedure Register;
begin
RegisterComponents('TA', [TTALabelsEvent]);
end;

constructor TTALabelsEvent.Create(AOwner:TComponent);
begin
Inherited Create(AOwner);
if csDesigning in ComponentState then
begin
DES:=True;
end;
end;

destructor TTALabelsEvent.Destroy;
begin
inherited Destroy;
end;

procedure TTALabelsEvent.CMMouseEnter(var Msg:TMessage);
var
anObject:TObject;
begin
if not DES then
begin
inherited;
if Assigned(FOnMouseEnter) then
begin
FOnMouseEnter(Self);
anObject:=TObject(Msg.LParam);
if (anObject<>nil)and(anObject.ClassName='TLabel')then
begin
if Assigned(FDoSomething) then
FDoSomething(Self);
end;
end;
end;
end;
procedure TTALabelsEvent.CMMouseLeave(var Msg:TMessage);
var
anObject:TObject;
begin
if not DES then
begin
inherited;
if Assigned(FOnMouseLeave) then
begin
FOnMouseLeave(Self);
anObject:=TObject(Msg.LParam);
if (anObject<>nil)and(anObject.ClassName='TLabel')then
begin
ShowMessage('离开');
end;
end;
end;
end;

end.



 
前来学习中,
 
不懂,前来向你们学习!
 
分配分了,多少别介意[:D]
 
后退
顶部