anchor.diff:          else
             Result:= 'False';
         end;
  -    avrRect:
  -      Result:= Format('(%d,%d,%d,%d)', [V.Rect.Left, V.Rect.Top, V.Rect.Right, V.Rect.Bottom]);
  +    else
  +      raise Exception.Create('Unhandled type in AppVariantToString');
     end;
   end;
   
  
positive.code:   end;
  end;
  
  
  function AppVariantToString(const V: TAppVariant): string;
  begin
    case V.Typ of
  
negative.code:     Result:= AppDir_Home+Copy(Result, 3, MaxInt);
  end;
  
  function AppVariantNil: TAppVariant;
  begin
    FillChar(Result, SizeOf(Result), 0);
    Result.Typ:= avrNil;
  end;
  
  function AppVariant(Value: boolean): TAppVariant;
  begin
    FillChar(Result, SizeOf(Result), 0);
    Result.Typ:= avrBool;
    Result.Bool:= Value;
  end;
  
  function AppVariant(const Value: Int64): TAppVariant;
  begin
    FillChar(Result, SizeOf(Result), 0);
    Result.Typ:= avrInt;
    Result.Int:= Value;
  end;
  
  function AppVariant(const Value: string): TAppVariant;
  begin
    FillChar(Result, SizeOf(Result), 0);
    Result.Typ:= avrStr;
    Result.Str:= Value;
  end;
  
  function AppVariant(const Value: TRect): TAppVariant;
  begin
    FillChar(Result, SizeOf(Result), 0);
    Result.Typ:= avrTupleInt;
    Result.TupleLen:= 4;
    Result.TupleItems[0]:= Value.Left;
    Result.TupleItems[1]:= Value.Top;
    Result.TupleItems[2]:= Value.Right;
    Result.TupleItems[3]:= Value.Bottom;
  end;
  
  function AppVariant(const Value: array of integer): TAppVariant;
  var
    i: integer;
  begin
    FillChar(Result, SizeOf(Result), 0);
    Result.Typ:= avrTupleInt;
    Result.TupleLen:= Length(Value);
    for i:= 0 to Min(Length(Value), Length(Result.TupleItems))-1 do
      Result.TupleItems[i]:= Value[i];
  end;
  
  
  