我试图弄清楚如何在玩家点击对象后将TObject(TLabel或TCard)作为返回值。
就这样
Player plays a spell //
Spell says hey i need a target //
spell calls get a target //
player selects a target //
target is returned to spell//
spell does xx with target//
以下是代码示例。
procedure TSpell.Spell;
var
secondTarget : Tobject;
begin
if true then
begin
secondTarget := GetSecondTarget(); //how??
if SecondTarget.classname = TCard then
begin
showmessage('you selected a TCard');
end
if SecondTarget.classname = TLabel then
begin
showmessage('you selected a label');
end
end
GetSecondTarget() : TObject;
begin
showmessage('Select a Target');
//wait for user to click something
//return the TObject to TSpell.spell
end;
我不知道如何进行GetSecondTarget ...如何等待用户点击某些内容然后将其返回给TSpell.Spell有关如何执行此操作的任何帮助?
答案 0 :(得分:1)
Windows GUI程序是事件驱动的。您不应该考虑在主线程上调用一个函数,该函数将阻塞直到事件发生。
更重要的是,您对ShowMessage
的调用会导致模态对话框。模态对话框禁用其拥有的窗口,这意味着用户无法单击您希望他们单击的对象。如果您希望显示带有指令的表单,那么至少它需要是一个无模式对话框。
这里的底线是,您需要根据事件驱动编程的概念调整您的想法。当用户单击某个对象时,将引发OnClick
事件。将处理程序附加到该事件并在该处理程序执行时对其进行响应。如果您需要在不同时间对OnClick
事件采取不同的行为,则需要在程序中维护某些状态以确定行为切换。