我正在使用社区版,但是在这方面没有任何限制。
我已通过//
// DragReorderCollectionViewController.swift
// SW4Temp
//
// Created by Don Mag on 7/25/18.
//
import UIKit
private let reuseIdentifier = "DragMeCell"
class DragMeCell: UICollectionViewCell {
@IBOutlet var theLabel: UILabel!
}
class DragReorderCollectionViewController: UICollectionViewController {
fileprivate var longPressGesture: UILongPressGestureRecognizer!
fileprivate var dataArray = Array(0 ..< 25)
override func viewDidLoad() {
super.viewDidLoad()
longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(self.handleLongGesture(gesture:)))
if let cv = self.collectionView {
cv.addGestureRecognizer(longPressGesture)
}
}
@objc func handleLongGesture(gesture: UILongPressGestureRecognizer) {
if let cv = self.collectionView,
let gestureView = gesture.view {
switch(gesture.state) {
case .began:
guard let selectedIndexPath = cv.indexPathForItem(at: gesture.location(in: cv)) else {
break
}
cv.beginInteractiveMovementForItem(at: selectedIndexPath)
case .changed:
cv.updateInteractiveMovementTargetPosition(gesture.location(in: gestureView))
case .ended:
cv.endInteractiveMovement()
default:
cv.cancelInteractiveMovement()
}
}
}
// MARK: UICollectionViewDelegate
override func collectionView(_ collectionView: UICollectionView, canMoveItemAt indexPath: IndexPath) -> Bool {
return true
}
override func collectionView(_ collectionView: UICollectionView, moveItemAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
let i = dataArray[sourceIndexPath.item]
dataArray.remove(at: sourceIndexPath.item)
dataArray.insert(i, at: destinationIndexPath.item)
}
// MARK: UICollectionViewDataSource
override func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return dataArray.count
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! DragMeCell
// Configure the cell
cell.theLabel.text = "\(dataArray[indexPath.item])"
return cell
}
}
导入了mstscax.dll
并选择了“ ActiveX”。该组件未显示在组件面板中,直接编辑DFM以包括TMsRdpClient [digit]组件会导致表单生成器错误,指出找不到该组件。
但是,如果这些错误是“已取消”而不是“被忽略”,则可以使一个预制项目(RDPWrap的RDPCheck)生成并运行。还必须解决错误mentioned here。
在一个我自己创建的项目中,我能够将生成的文件Component |> Import Component...
添加到uses子句,并可以将MSTSCLib_TLB
类型的变量添加到表单。例如,在TMsRdpClient7
函数中,我可以调用FormCreate
,然后访问对象的属性。如果我设置了足够的属性(请参见下文),则会显示授权弹出窗口,并在调用TMsRdpClient7.Create(Self)
之后看到登录屏幕。
TMsRdpClient7.Connect
答案 0 :(得分:0)
导入MSTScax.Dll在Delphi 10.2.3上对我来说工作正常,并导致25个组件从ActiveX
组件开始显示在组件面板的TMsTScaxNotSafeForScripting
选项卡上。
我可以发布使用的确切步骤,但是我想知道您是否只是缺少一个步骤:
在将ConnectWithEndpoint
属性类型更正为OleVariant
并编译了包含导入单元MSTSCLib_TLB.Pas
的包之后,我们将其称为RDP.Pkg,您需要转到Project Manager
,右键单击RDP.Bpl
,然后单击Install
-然后,它应显示在ActiveX
标签上。这样对您有用吗?
顺便说一句,我以普通的方式从Win10 64位的桌面停止链接中启动Delphi,而不使用诸如“以管理员身份运行”之类的特殊措施。