| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1480 人关注过本帖
标题:大牛帮看下这个程序 为什么没反应。
取消只看楼主 加入收藏
有容就大
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
结帖率:99.34%
收藏
已结贴  问题点数:100 回复次数:10 
大牛帮看下这个程序 为什么没反应。
RT 我想要的效果是 通过在窗体上点击鼠标 创建焦点所在RadioButton指示的控件。
 也就是这个样子。
图片附件: 游客没有浏览图片的权限,请 登录注册

我写了个程序 打包如下 热心人帮看看。
12_19_ClassRef.rar (178.09 KB)

顺便发下工程文件和源文件。
CRefRorm.pas
程序代码:
unit CRefForm;

interface

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

type
  // Class reference type (redeclaration)
  TControlClass = class of TControl;

  TCRefForm1 = class(TForm)
    Panel1: TPanel;
    RbtnRadio: TRadioButton;
    RbtnButton: TRadioButton;
    RbtnEdit: TRadioButton;
    procedure RbtnEditClick(Sender: TObject);
    procedure RbtnButtonClick(Sender: TObject);
    procedure RbtnRadioClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
    ClassRef: TControlClass;
    Counter: Integer;
  public
    { Public declarations }
  end;

var
  CRefForm1: TCRefForm1;

implementation

{$R *.dfm}

procedure TCRefForm1.RbtnButtonClick(Sender: TObject);
begin
  ClassRef := TButton;
end;

procedure TCRefForm1.RbtnEditClick(Sender: TObject);
begin
  ClassRef := TEdit;
end;

procedure TCRefForm1.RbtnRadioClick(Sender: TObject);
begin
  ClassRef := TRadioButton;
end;

procedure TCRefForm1.FormCreate(Sender: TObject);
begin
  ClassRef := TRadioButton;
end;

procedure TCRefForm1.FormMouseDown(
  Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
Var
  NewCtrl: TControl;
  CtrlName: string;
begin
  // Create the Control
  NewCtrl := ClassRef.Create(Self);
  // hide it temporarily, to avoid flickering
  NewCtrl.Visible := False;
  // set parent and position
  NewCtrl.Parent := Self;
  NewCtrl.Left := X;
  NewCtrl.Top := Y;
  // compute the unique name (and caption)
  Inc(Counter);
  CtrlName := ClassRef.ClassName + IntToStr(Counter);
  Delete (CtrlName, 1, 1);
  NewCtrl.Name := CtrlName;
  NewCtrl.Visible := True;
end;

end.
ClassReference.bdsproj
程序代码:
program ClassReference;

uses
  Forms,
  CRefForm in 'CRefForm.pas' {CRefForm1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TCRefForm1, CRefForm1);
  Application.Run;
end.


检查了多次 那里有问题 为什么我点击鼠标没反应?

图片附件: 游客没有浏览图片的权限,请 登录注册

百分求解。。。
搜索更多相关主题的帖子: 源文件 Windows reference 
2012-12-19 11:11
有容就大
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 2楼 信箱有效
信箱大帅哥 帮看下啊
搞这么久WIN32编程 这个对于你没什么难度啦
可是我刚搞 师傅叫我自学 他急着赶项目不好打扰他啊
再说这个东西我检查多次应该没写错代码啊 奇怪的东东。。。

梅尚程荀
马谭杨奚







                                                       
2012-12-19 11:18
有容就大
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 5楼 wp231957
谢谢W版帮忙
我加了 不过运行后没反应 没有OK的消息框出来。。
我想了下 有几个问题想弄明白。
在我制作这个东西时有的步骤可能有问题:
我是先添加Tpanel控件的 但是当时不知道这个东西有什么用
在后面添加TRadioButton控件时 就没放到它上面 后来才移动到它上面的 这样会有问题么?

还有就是那个FormCreate()函数 我是自己写的 也就是说没有在Form窗体上双击 这样是不是会让自己写的函数无效?


[ 本帖最后由 有容就大 于 2012-12-19 11:31 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-12-19 11:30
有容就大
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
再补充下 我那个FormMouseDown()函数也是自己写的 没有在窗体的event里双击选择OnMouseDown来进行自动编码
是不是就是这个问题?
为什么DELPHI大部分东西都能自动生成 和以前的大不同啊

梅尚程荀
马谭杨奚







                                                       
2012-12-19 11:36
有容就大
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用wp231957在2012-12-19 11:45:55的发言:

那2006和7还不一样

我一个字都没动你的代码 啊  
我想应该是先点击一个控件的EVENT事件自动生成函数 然后再添加代码才行
我这个BDS2006有900多M 不知道怎么传啊。。。

梅尚程荀
马谭杨奚







                                                       
2012-12-19 11:48
有容就大
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 10楼 wp231957
呵呵 去试验了下 果然 自己写的事件函数是无效的 即使和IDE自动生成的函数一模一样。
这个就神奇了 为什么呢?

梅尚程荀
马谭杨奚







                                                       
2012-12-19 12:22
有容就大
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用wp231957在2012-12-19 12:21:15的发言:

我用家里的d7 又测试了一下

貌似就是没有双击event的原因,你也不用重写代码

就在那个event里重新双击一下  凡是应该双击的 你都双击一下
呵呵 好的 看来用DELPHI程序员的代码负担要轻松许多啊。

梅尚程荀
马谭杨奚







                                                       
2012-12-19 12:24
有容就大
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
呵呵 双击后运行出来预期的结果了 速度结贴了 给你个大头吧 2 / 8开。

梅尚程荀
马谭杨奚







                                                       
2012-12-19 12:26
有容就大
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 15楼 wp231957
我开始就是没双击 直接写的粉色代码 然后又在后面添加它们的实现代码的 呵呵
。。。

梅尚程荀
马谭杨奚







                                                       
2012-12-19 12:28
有容就大
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用wp231957在2012-12-19 12:32:46的发言:

但是工程里面的event一栏 是空的
这下明白究竟了 谢谢W版如此热心哈 呵呵 奉茶

梅尚程荀
马谭杨奚







                                                       
2012-12-19 12:36
快速回复:大牛帮看下这个程序 为什么没反应。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043100 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved