获取单击项目的返回值

时间:2014-01-21 23:37:06

标签: delphi delphi-xe2

我试图弄清楚如何在玩家点击对象后将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有关如何执行此操作的任何帮助?

1 个答案:

答案 0 :(得分:1)

Windows GUI程序是事件驱动的。您不应该考虑在主线程上调用一个函数,该函数将阻塞直到事件发生。

更重要的是,您对ShowMessage的调用会导致模态对话框。模态对话框禁用其拥有的窗口,这意味着用户无法单击您希望他们单击​​的对象。如果您希望显示带有指令的表单,那么至少它需要是一个无模式对话框。

这里的底线是,您需要根据事件驱动编程的概念调整您的想法。当用户单击某个对象时,将引发OnClick事件。将处理程序附加到该事件并在该处理程序执行时对其进行响应。如果您需要在不同时间对OnClick事件采取不同的行为,则需要在程序中维护某些状态以确定行为切换。