<div dir="ltr"><div class="gmail_extra"><div class="gmail_extra">Here is another test, a bit more complex. It fails when trying to pass a procedure reference to the Execute<T, A>. This is a bit different than trying to get a reference to a generic routine. Routines like ControlMove and ShapeColor and not generic.</div><div class="gmail_extra"><br></div><div class="gmail_extra">{$mode delphi}</div><div class="gmail_extra"><br></div><div class="gmail_extra">type</div><div class="gmail_extra">  TForEach<T, A> = procedure(Item: T; Arg: A);<br></div><div class="gmail_extra"><br></div><div class="gmail_extra">// inside TMainForm declaration</div><div class="gmail_extra"><br></div><div class="gmail_extra">procedure Execute<T: TComponent; A>(ForEach: TForEach<T, A>; Arg: A);<br></div><div class="gmail_extra"><br></div><div class="gmail_extra">// implementation</div><div class="gmail_extra"><br></div><div class="gmail_extra">procedure TMainForm.Execute<T, A>(ForEach: TForEach<T, A>; Arg: A);<br></div><div class="gmail_extra">var</div><div class="gmail_extra">  I: Integer;</div><div class="gmail_extra">begin</div><div class="gmail_extra">  for I := 0 to ComponentCount - 1 do</div><div class="gmail_extra">    if Components[I] is T then</div><div class="gmail_extra">      ForEach(Components[I] as T, Arg);</div><div class="gmail_extra">end;</div><div class="gmail_extra"><br></div><div class="gmail_extra">procedure ControlMove(Item: TControl; Arg: Integer);</div><div class="gmail_extra">begin</div><div class="gmail_extra">  Item.Left := Arg;</div><div class="gmail_extra">end;</div><div class="gmail_extra"><br></div><div class="gmail_extra">procedure ShapeColor(Item: TShape; Arg: TColor);</div><div class="gmail_extra">begin</div><div class="gmail_extra">  Item.Brush.Color := Arg;</div><div class="gmail_extra">end;</div><div class="gmail_extra"><br></div><div class="gmail_extra">procedure TMainForm.ExecuteButtonClick(Sender: TObject);</div><div class="gmail_extra">begin</div><div class="gmail_extra">  // below fails after "Integer>" with Compilation raised exception internally</div><div class="gmail_extra">  Execute<TControl, Integer>(ControlMove, Mouse.CursorPos.X);</div><div class="gmail_extra">  if ColorDialog.Execute then</div><div class="gmail_extra">    Execute<TShape, TColor>(ShapeColor, ColorDialog.Color);</div><div class="gmail_extra">end;  </div></div></div>