gpt4 book ai didi

racket - 如何接受拖放到 Racket Canvas 上的剪贴板数据

转载 作者:行者123 更新时间:2023-12-01 01:11:14 25 4
gpt4 key购买 nike

我正在使用 Racket 编写一个 UI 应用程序,并且希望能够从其他应用程序拖放项目,例如图像。具体来说,我想在浏览器(例如 Chrome 或 FF)中从网页中拖动图像并将其拖放到 canvas% 上。在应用程序中,接收原始图像数据作为结果(应用程序将在接受丢弃的图像之前检查 PNG 元数据)。
canvas% 上没有直接的功能(我可以找到)与剪贴板事件相关的类或父类(super class)。

我熟悉 Swing 和 Win32 等其他框架中的剪贴板 d-n-d。

它看起来像 clipboard-client% class 是必需的,但是 Racket 文档很难将点连接到将其附加到窗口类之一。

有什么好的教程或示例代码可以引用吗?

更新:我查看了 clipboard.rkt 的 Racket 源代码(OSX),它似乎只能访问“通用”粘贴板。 OSX 有一个单独的粘贴板用于拖放操作。

因此,看起来在 OSX 上的 Racket 中无法使用 d-n-d,我将不得不使用 Objective-C FFI 来实现所需的功能并将我的用户限制为使用 Mac 的用户。

结束这个问题。

最佳答案

据我所知,Racket gui 库仅通过 accept-drop-files 处理"file"的拖放。和 on-drop-file window<%> 的方法接口(interface),其中canvas%实现。我不熟悉 dnd 协议(protocol),但至少在 Linux 上,从 Firefox 拖动的图像不算作文件,因此它们不被接受,而从 nautilus 拖动的文件是。

这是我用来测试它的小程序:

#lang racket/gui

(define my-canvas%
(class canvas%
(define/override (on-drop-file file)
(printf "got file: ~s\n" file)
(super on-drop-file file))
(super-new)))

(define f (new frame% (width 400) (height 400) (label "frame")))
(define c (new my-canvas% (parent f)))
(send c accept-drop-files #t)
(send f show #t)

我建议在 Racket mailing list 上询问.

关于racket - 如何接受拖放到 Racket Canvas 上的剪贴板数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15397623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com