主页
Top.Mail.Ru Yandeks.Metrika
论坛:“主要”;
当前存档:2002.07.29;
下载:[xml.tar.bz2];

向下

阻止事件方法On * 找到类似的分支


Ученик   (2002-07-16 08:43) [0]

有一个表单设计器,例如扩展库(http://www.delphikingdom.com/mastering/poligon/extlib.htm),
在运行时在表单上执行
PageControl,在表单设计模式下,当用鼠标选择PageControl页面时,必须阻止对TPageControl.OnChange方法的调用,以及其他方法。
是否有一种通用的方法来阻止对运行时对象的事件方法的调用?



GenBr   (2002-07-16 08:56) [1]

好吧,可能是这样的YourComponent.YourEvent = nil;



Anatoly Podgoretsky   (2002-07-16 09:08) [2]

如果在ComponentState中的csDesigning在您需要的每个处理程序中都是自然的
或者你谈到RunTime然后该属性真的是反向的:= nil;



Ученик   (2002-07-16 09:16) [3]

问题是,不知道对象确定了哪些事件,以及挂起了哪些处理过程。 这是一种通用的方法,即 对于表单设计期间,禁用所有事件方法,将csDesigning嵌入到每个检查中都是错误的。



NickBy   (2002-07-16 16:44) [4]

通过RTTI,您将获得所有对象事件的列表并指定指向nil的指针。
保存以保存之前需要较旧的指针,以防将来需要从编辑模式中删除表单。



Ученик   (2002-07-16 17:26) [5]

>尼克
谢谢,没有复选框,我想知道,Delphi也这样做,还是完全不同?



Skier   (2002-07-16 17:35) [6]

>学生
可以在运行时删除csDesigning标志。
虽然这是一个丑陋的方法......



Anatoly Podgoretsky   (2002-07-16 17:41) [7]

学生(16.07.02 09:16)
这正是正确的方法,此标志专门用于此目的;冲突解决设计
但是我仍然不明白它与运行时间的对应时间



Юрий Зотов   (2002-07-16 18:55) [8]

既然你想要使用设计时“Delphi本身的机制 - 那么最终使用它们。这就是我必须做同样的事情,就像IDE本身一样无聊。

对ALL表单单次调用SetDesigning(True,True)可以解决问题。 最后 - 为她设置SetDesigning(False,True)。



Skier   (2002-07-16 18:57) [9]

> Yuri Zotov
如此短 - SetDesigning(True)和SetDesigning(False):)



Ученик   (2002-07-16 19:05) [10]

> Yuri Zotov
如果你给我,那么这就是表单设计者所使用的,它是关于在表单的用户设计时阻止事件方法的调用,开发人员在开发程序时确定。



Юрий Зотов   (2002-07-16 20:32) [11]

>滑雪者©(16.07.02 18:57)
默认参数是专门指出的 - 以强调它。

>学生(16.07.02 19:05)
我明白了,我明白了。 你试过用我写的东西吗? 试试吧。 如果你使用的设计师写得正确,那么这就解决了这个问题。



Ученик   (2002-07-16 21:18) [12]

> Yuri Zotov
如果不打扰你,如果条件如下,如何正确编写表单设计器:

在具有多个页面的PageControl表单上,开发人员定义了TPageControl.OnChange事件

procedure TForm1.PageControl1Change(Sender:TObject);
开始
ShowMessage(“PageControl1Change”)
结束;

用户通过按钮输入表单设计,即 调用TFriendForm(Self).SetDesigning(True,True)并定义Form1.Designer,用户用鼠标单击第二个选项卡PageControla,应该进行页面切换,但不应出现消息“PageControl1Change”,
就像在Delphi中发生的那样。



Юрий Зотов   (2002-07-16 21:53) [13]

>如何正确编写表单设计器

所以你在写你的设计师? 或者从扩展库中准备好所有相同的用途?

如果您 - 我建议您退出此活动并使用例如Dream Controls包。 为什么退出 - 通过查看此包来了解自己。 一个人在那里工作了大约一年 - 即便如此,只要他已经知道几乎所有德尔福的厨房。

如果准备好了,你的问题意味着什么 - “怎么写”? 他已经写过了。 不幸的是,我不熟悉扩展库中的设计师,我不能说任何事情。

但是,如果设计师,无论他是什么,正确创建一个设计时环境,那么SetDesigning应该可行。 对于所有组件的所有事件 - 没有PageControl与它无关。



Ученик   (2002-07-16 22:01) [14]

> Yuri Zotov
谢谢,但这不是答案,但可惜。



Юрий Зотов   (2002-07-17 09:25) [15]

这与您提出的问题完全相同:
>“如果有条件,如何正确编写表单设计器
>以下内容:(进一步关于禁用PageControl.OnChange)“

首先,PageControl和OnChange与它有什么关系? 它会立即关闭(所有组件的所有事件)),或者什么都不关闭。 这是一个设计师。

其次,目前尚不清楚您是从扩展库编写设计器还是使用现成的设计器。

第三,如果设计师(你的,或者完成的 - 没关系)不是曲线,那么SetDesigning解决了这个问题(虽然理论上,设计师本人应该这样做)。 如果曲线 - 你不禁用任何东西。

第四,“如何正确编写表单设计器”是什么意思? 你会立即问 - “如何正确编写你的Delphi”。 什么是小东西? 我很快,15的分钟和100的线路告诉它是如何完成的。 小事,对吧? 而且,当然,我知道它很好 - 毕竟,没有一个Delphi写过(虽然一个非常简化,仍然写道)。

因此,考虑到问题的SUCH措辞,我说:“如果你自己写设计师,就放弃它。” 我希望你理解为什么?

并添加 - 寻找梦想控制。 因为你使用的设计师(你的设计师或完成的设计师无关紧要),从已经出现的问题来判断,是一条曲线。 使用Dream Controls的设计人员,您将完全按照将组件放到表单上的时间来解决您的任务。 没有任何问题。

还有什么可以预料到这个问题的其他答案?



Ученик   (2002-07-17 09:45) [16]

> Yuri Zotov
至少为了体面,你查看了源代码,你无法回答 - 正如你以前所说:我经过,所以要聪明。



MAxiMum   (2002-07-17 10:49) [17]

伙计们,但在我看来,你们两个都说得对,只说不同的语言。 互相倾听,不要发誓。



Skier   (2002-07-17 11:18) [18]

>学生
我写了我的表单设计师。
所以,如果有问题,我会尽力回答......



Ученик   (2002-07-17 11:29) [19]

>滑雪者
在具有多个页面的PageControl表单上,开发人员定义了TPageControl.OnChange事件

procedure TForm1.PageControl1Change(Sender:TObject);
开始
ShowMessage(“PageControl1Change”)
结束;

用户通过按钮输入表单设计,即 调用TFriendForm(Self).SetDesigning(True,True)并定义Form1.Designer,用户用鼠标单击第二个选项卡PageControla,应该进行页面切换,但不应出现消息“PageControl1Change”,
就像在Delphi中发生的那样。




Skier   (2002-07-17 11:50) [20]

>学生

您需要为您的设计师编写以下处理程序。
(你将“滑倒”而不是IDesigner)

function TSomeClass.IsDesignMsg(Sender:TControl; var Message:TMessage):Boolean; 开始 WM_MOUSEFIRST..WM_MOUSELAST:开始 // .......................... 结果:= MouseMessage(发件人,消息); // .......................... 结束; // WM_MOUSEFIRST .. 结束;

MouseMessage方法(包含我的一些内部变量,
懒得干净:))

function TSomeClass.MouseMessage(ASender:TControl; const消息:TMessage):布尔值; //这个“bun”将“切换”PageControl页面 //(在我们的例子中) function DispatchDesignHitTest(Sender:TControl; Message:TWMMouse):Boolean; 开始 Message.Msg:= CM_DESIGNHITTEST; Message.Result:= 0; Sender.Dispatch(消息); 结果:=(Message.Result <> 0); 结束; // DispatchDesignHitTest VAR AShift:TShiftState; ADesignMessage:Boolean; 开始 结果:= FRubberBandPainting; 如果没有结果然后开始 ADesignMessage:= DispatchDesignHitTest(ASender,TWMMouse (消息)); 结果:=结果与否ADesignMessage; 结束; //如果 AShift:= KeysToShiftState(TWMMouse(Message).Keys); case Message.Msg of WM_LBUTTONDOWN,WM_LBUTTONDBLCLK,WM_RBUTTONDOWN:开始 如果结果和(Message.Msg = WM_LBUTTONDOWN)那么 FDesignHitDispatched:= False 其他 FDesignHitDispatched:= True; DesignMouseDown(ASender,GetMouseButton(Message.Msg),AShift, TWMMouse(消息).XPos,TWMMouse (留言).YPos); 结束; // WM_LBUTTONDOWN WM_MOUSEMOVE:开始 DesignMouseMove(ASender,AShift,TWMMouse(Message).XPos, TWMMouse(留言).YPos); 结束; // WM_MOUSEMOVE WM_LBUTTONUP,WM_RBUTTONUP:开始 DesignMouseUp(ASender,GetMouseButton(Message.Msg),AShift, TWMMouse(消息).XPos,TWMMouse(消息).YPos); 结束; // WM_LBUTTONDOWN 结束; //案例 结束;



Ученик   (2002-07-17 11:57) [21]

> Skyer
并且没有出现“PageControl1Change”消息?
肯定是调色板中的相同组件,如果不难尝试(那些)。



Skier   (2002-07-17 12:01) [22]

>学生
我知道你想通过两次点击来编写一个表单设计器
老鼠“还是希望我为你工作!
对不起,当然,但在那种情况下,我会回避自己...



Ученик   (2002-07-17 12:07) [23]

>滑雪者
对不起,如果我被冒犯了,我没想到,设计师已经写好了,有点问题,我想知道我或者每个人,我试过扩展库,同样的消息出现了,
对不起了。



Skier   (2002-07-17 12:12) [24]

>学生
是的,我没有被冒犯:)
您是否有机会在设计师中自己编写
事件处理程序? (它的宏语言还是什么?)



Ученик   (2002-07-17 12:16) [25]

>滑雪者
编写程序时,开发人员没有定义任何事件,
当用户进入设计模式时,必须禁用事件处理On ????,以PageControl的问题为例,用户编写处理程序
我的设计师的事件不能。



Skier   (2002-07-17 12:19) [26]

>学生
你如何通过TReader从文件中读取表单?



Skier   (2002-07-17 12:23) [27]

>学生


>并且没有出现“PageControl1Change”消息?



在狗狗:如果你“阻止”IDesigner并写
我的IsDesignMsg处理程序(如我所示),那么事件不应该
出现......



Ученик   (2002-07-17 12:27) [28]

>滑雪者
如果我们在讨论表单上控件的用户状态,那么它将从ini文件中读取。



Ученик   (2002-07-17 12:33) [29]

>滑雪者
如果IDesigner被“阻止”并且IsDesignMsg被处理并且DispatchDesignHitTest(即它的等价物)被定义了?
这就是为什么我要求尝试,但显然没有成功)))



Skier   (2002-07-17 12:37) [30]

>学生

>它是从ini文件中读取的

我建议你不要从INI文件中读取控件的格式和状态,
编写自己的TWriter和TReader类更好(我已经完成了
就像那样)。 当然,更麻烦,但它会给予良好的灵活性
和速度。
使用这种方法,您可以以二进制形式存储表单,以及
因此将它们写在文件和blob字段中
(Tobish数据库)。

然后,如果你需要在INI文件中存储TImage的图片,你会怎么做?

通过你的TWriter,你会冷静地写下来......




Страницы: 1 整个分支

论坛:“主要”;
当前存档:2002.07.29;
下载:[xml.tar.bz2];

楼上









内存:0.68 MB
时间:0.059 c
3-95263
aliasman
2002-07-08 10:05
2002.07.29
请帮助!!!!!!


14-95504
NEOX
2002-07-01 23:31
2002.07.29
在线拼写检查


3-95260
ALex_Aby
2002-07-07 14:10
2002.07.29
我寻找没有BDE ADO的数据访问


1-95433
eruc
2002-07-16 18:16
2002.07.29
XML ????


1-95415
Igor_
2002-07-16 13:30
2002.07.29
有关对象字段的信息





南非荷兰语 阿尔巴尼亚人 阿拉伯语 亚美尼亚 阿塞拜疆 巴斯克 白俄罗斯 保加利亚语 加泰罗尼亚 简体中文 中国(繁体) 克罗地亚 捷克 丹麦语 荷兰人 英语 爱沙尼亚语 菲律宾人 芬兰 法文
加利亚西语 格鲁吉亚语 德语 希腊语 海地克里奥尔语 希伯来语 印地语 匈牙利 北日耳曼语 印度尼西亚人 爱尔兰语 意大利语 日本性玩偶 韩语 拉脱维亚 立陶宛 马其顿 马来语 马耳他语 挪威语
波斯语 波兰语 葡萄牙语 罗马尼亚 俄语 塞尔维亚 斯洛伐克 斯洛文尼亚 西班牙语 斯瓦希里 瑞典语 泰国人 土耳其 乌克兰 乌尔都语 越南人 威尔士语 意第绪语 孟加拉 波斯尼亚
宿务 世界语 古吉拉特语 豪萨语 苗族 伊博 爪哇 卡纳达语 高棉 老挝 拉丁语 毛利 马拉 蒙古人 尼泊尔 旁遮普 索马里 泰米尔人 泰卢固语 约鲁巴语
祖鲁
英文 Французский Немецкий Итальянский Португальский 俄文 Испанский