| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
免费IT实战开发视频教程合集分享千里之行 始于足下
共有 1480 人关注过本帖
标题:大牛帮看下这个程序 为什么没反应。
只看楼主 加入收藏
有容就大
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
结帖率:99.34%
  已结贴   问题点数:100  回复次数:23   
大牛帮看下这个程序 为什么没反应。
RT 我想要的效果是 通过在窗体上点击鼠标 创建焦点所在RadioButton指示的控件。
 也就是这个样子。

我写了个程序 打包如下 热心人帮看看。
顺便发下工程文件和源文件。
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: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:9
帖 子:1102
专家分:4268
注 册:2012-6-19
  得分:20 
pascal呀 以前学过 早忘了 切点分
2012-12-19 11:13
有容就大
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
  得分:0 
回复 2楼 信箱有效
信箱大帅哥 帮看下啊
搞这么久WIN32编程 这个对于你没什么难度啦
可是我刚搞 师傅叫我自学 他急着赶项目不好打扰他啊
再说这个东西我检查多次应该没写错代码啊 奇怪的东东。。。

梅尚程荀
马谭杨奚







                                                       
2012-12-19 11:18
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:367
帖 子:12740
专家分:49749
注 册:2012-10-18
  得分:80 


貌似没啥问题啊
附件: 您没有浏览附件的权限,请 登录注册

DO IT YOURSELF !
2012-12-19 11:20
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:367
帖 子:12740
专家分:49749
注 册:2012-10-18
  得分:0 
程序代码:
procedure TCRefForm1.FormMouseDown(
  Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
Var
  NewCtrl: TControl;
  CtrlName: string;
begin
  //showmessage('ok');   //你加一句这个试试  如果能获得控制权  再注释或删除之
  // 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;

DO IT YOURSELF !
2012-12-19 11:21
有容就大
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
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:367
帖 子:12740
专家分:49749
注 册:2012-10-18
  得分:0 
那2006和7还不一样

我一个字都没动你的代码 啊  

DO IT YOURSELF !
2012-12-19 11:45
有容就大
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
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:367
帖 子:12740
专家分:49749
注 册:2012-10-18
  得分:0 
有容对c++里的类 是不是熟悉啊

delphi把面向对象发挥的非常出色

所以最好事件函数别自己写

DO IT YOURSELF !
2012-12-19 12:05







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

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