问题标签 [wxhaskell]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - WxHaskell 和 DragAndDrop:如何创建自定义事件来触发 dropTargetOnData、dropTargetOnDrop、dropTargetOnEnter、dropTargetOnDragOver
WxHaskell 和 DragAndDrop
我想知道如何使用以下事件处理程序:dropTargetOnData、dropTargetOnDrop、dropTargetOnEnter、dropTargetOnDragOver….[1]
您能否检查一下我目前的看法是否正确:
- 从 wx Widgets/wxPython [2] / [3] / [4] 看来,它们似乎需要用于管理 DragAndDrog 的非平凡示例。
- 它们不能通过现有事件(如“拖动”等)来操作。
- 我尝试创建自己的活动。但它没有被“激活”。[7]
- 此外,从签名 [1] 来看,这些看起来像是在 DropTarget 上被激活的,这与 Reactive/Windows/Controls 上的其他事件不同。这是对的吗 ?
Heinrich 创建了自己的事件“onText”,(在反应香蕉中)但这是在控件上。[6]
有人可以确认这些事件在 WxHaskell 中有效地为他们工作,并可能暗示如何做到这一点
[1]:
from Graphics.UI.WXCore.Events , line 1933 onwards
Set an event handler that is called when the drop target can be filled with data. This function require to use 'dropTargetGetData' in your event handler to fill data. dropTargetOnData :: DropTarget a -> (Point -> DragResult -> IO DragResult) -> IO () ...
-- | Set an event handler for an drop command in a drop target. dropTargetOnDrop :: DropTarget a -> (Point -> IO Bool) -> IO ()
-- | Set an event handler for an enter command in a drop target. dropTargetOnEnter :: DropTarget a -> (Point -> DragResult -> IO DragResult) -> IO ()
-- | Set an event handler for a drag over command in a drop target. dropTargetOnDragOver :: DropTarget a -> (Point -> DragResult -> IO DragResult) -> IO ()
-- | Set an event handler for a leave command in a drop target. dropTargetOnLeave :: DropTarget a -> (IO ()) -> IO ()
[2]:http ://docs.wxwidgets.org/2.8/wx_wxdroptarget.html#wxdroptargetondrop
[3]:http ://wiki.wxpython.org/DragAndDrop
[4]: http: //www.blog.pythonlibrary.org/2012/06/20/wxpython-introduction-to-drag-and-drop/
[5]:http ://wewantarock.wordpress.com/2011/06/17/how-does-wxhaskell-event-handling-work-part-1/
[6]:https ://github.com/HeinrichApfelmus/reactive-banana/blob/master/reactive-banana-wx/src/Reactive/Banana/WX.hs L 88
[7]:
module Main where
haskell - 如何重新分发 wxHaskell 应用程序?
我正在使用 ghc 7.6.3。我从这里安装了 wxHaskell:https ://github.com/wxHaskell/wxHaskell
它工作,示例程序编译并成功运行。
现在唯一的问题是我想在 mac OS X 上分发一个 wxHaskell 应用程序。我尝试使用 macosx-app 和 cabal-macosx ( https://github.com/michaelt/cabal-macosx ) 制作一个“app”文件. 它在我的机器上运行良好,但无法在另一台计算机上运行。我收到以下错误:
我正在使用 OS X 10.8.4 (Mountain Lion),但我也有兴趣在 Windows 上编译应用程序并重新分发它们。
重新分发 wxHaskell 应用程序的最佳方式是什么?
安装程序.hs
wxHello.cabal:
以下是生成包中的 dylib 文件:
user-interface - 由于堆栈溢出,GUI 重新启动时 wxHaskell 段错误
当一个 wxHaskell GUI 启动并关闭,然后另一个 wxHaskell GUI 再次启动时,由于堆栈溢出,应用程序会出现分段错误。
简单演示源码:
看来这是一个旧错误,请参阅http://permalink.gmane.org/gmane.comp.lang.haskell.wxhaskell.general/789。这条消息有一个指向 wxHaskell 的 SourceForge 存储库中问题的链接,并且最近的一条评论提到了一个没有错误的 wxHaskell 版本(似乎是 wxWidgets 2.9 的开发分支)。
我正在使用带有 wxWidgets 2.8 的 Ubuntu 12.04,所以我必须使用 wxHaskell 0.13。我试图通过查看所谓的工作开发版本的更改日志来查找有关此错误的任何信息,但找不到任何信息。
可以为 wxHaskell 0.13 修复这种错误行为,或者至少可以做出某种解决方法吗?重写应用程序以使用一个持久的 GUI 似乎不必要的复杂。
macos - Haskell wx 无法安装 Macosx
我试图在我的 Mac(Osx Mavericks)上安装 wxHaskell。我用 gcc 解决了这个问题,我用 brew 安装了 wxmac(3.0 版)。不断出现的问题是hackage cabal 搜索wx 2.9,而我有3.0。它说它找不到:
我找不到任何方法通过 brew 安装不同版本的 wx。有没有人有修复?谢谢!
linux - 在 Linux 上安装 wxHaskell 时生成错误
我在 Ubuntu 13.10 上并尝试安装 wxHaskell。我从存储库安装了 wxWidgets 2.9 http://repos.codelite.org/wx3.0/ubuntu/
。
基本cabal install wx
让我
从 GitHub 存储库下载并从源代码构建让我:
这是怎么回事,需要什么来解决它?
haskell - 如何使用 MinGW/MSYS 在 Windows 上安装 wxHaskell
我试图将 wxHaskell 安装到运行 Windows XP64 的机器中,并使用 gcc 从源代码构建 MinGW/MSYS 和 wxWidget 3.0。我做了:
并得到一个错误:
我已经成功地使用 wxWidgets 用 C++ (gcc) 编写了一个示例应用程序。所以我确实有一个工作的 wxWidget 安装。我有wx-config
:
问题是这wx-config
是一个 unix shell 脚本,并且 cabal(从 MSYS 调用)以某种方式拒绝识别它,即使它在系统路径上也是如此。如果我wx-config
在 MSYS 中运行,我会得到如下信息:
我问了一个问题https://stackoverflow.com/questions/21998763/how-to-convert-msys-shell-scripts-to-windows-exe-files看看是否可以将脚本转换为 exe,但是没有人回应任何解决方案。
这里还有一个相关的问题,wxHaskell installation on windows,还有一个wx 0.90.0.1 failed to install on Haskell Platform 2012.2.0.0 (WinXP)。事实上,我找不到一个确认有效的答案。此外,这里的错误/设置似乎不同,或者其中的答案似乎无法解决我的问题。特别是,我根据http://www.haskell.org/haskellwiki/WxHaskell/Windows从https://sourceforge.net/projects/wxhaskell/files/wx-config-win/下载了一个外部 wx-config.exe 。但是运行 wx-config.exe 无法识别我的 wxWidget 安装,并且总是给我一个找不到 wxWidgets 的错误,如下所示:
知道如何解决这个问题吗?
谢谢,
- 更新 -
@JP 我试过了:
并得到
我调整 wxdirect.cabal 以绕过容器 >=0.2 && <0.5,但无法通过严格。
c++ - 针对 wxWidget 3.0 构建 wxHaskell 时对 wxLog::DoLog 错误的未定义引用
我正在尝试为 wxWidgets 3.0 构建 wxHaskell。我使用了来自https://github.com/wxHaskell/wxHaskell的最新 git 版本的 wxHaskell 。
我尝试install.txt
在 wxHaskell-master.zip 中进行操作,到目前为止我所做的是:
wxc
不会编译,因为它的 Setup.hs 需要 wxWidgets 2.9。我换了
和
然后做了:
所有编译都正常,但最后我得到了一些链接错误。最难解决的问题如下:
对应的源代码在wxc/src/cpp/eljlog.cpp
:
我不知道是什么导致了这个错误以及如何解决它。我对这个vtable
问题做了一些搜索,有人认为这是由于在子类中声明了一个虚函数而没有定义它。其他人建议这是在 g++ 命令行上给出目标文件的顺序。但这里似乎都不是这样。我尝试删除 functionELJLog::DoLog
函数或注释掉 virtual 关键字。奇怪的是,总是有一个链接错误/错误说明 ELJLog 的 vtable,并且指的是 wxLog::DoLog,即使没有出现 DoLog。
此外,作为旁注,wxLog::DoLog
wxWidgets 3.0 文档中似乎缺少。我不确定此功能是否已弃用。但是,它仍然以我无法理解的方式导致遗留派生类的错误。
有什么想法吗?
--- 编辑2 ---
如果我注释掉有问题的功能
我得到了不同的链接错误,如下所示:
- - 编辑 - -
我在 mingw.org 的 mingw32 下工作。我从源代码构建了 wxWidgets 3.0.0 稳定版本,我做的 stpes 如下:
haskell - 为什么 mingw32 和 tdm-gcc64 使用外部 gcc 的行为不同
我正在尝试cabal install
wxHaskell 的一个组件(针对 wxWidgets 3.0 的 Haskell 平台 2013.2)。我能够使用来自 mingw.org 的 32 位 mingw 编译 git 版本。但最终,安装的 wx 无法正常运行,并且运行一个最小示例会在 wxc.dll 中出现运行时异常。所以我尝试在 TDM-GCC 4.8.1 64 位下编译相同的东西,因为 wxWidgets 人以 TDM-GCC 编译的二进制文件的形式提供他们的二进制文件。
但是我立即遇到了 TDM-GCC 的编译错误,告诉我
错误:未在此范围内声明“strnlen”
令我惊讶的是,即使 mingw32 和 TDM-gcc 都使用来自 Haskell Platform 的相同外部 gcc c:\HaskellPlatform\2013.2.0.0\mingw\bin\gcc.exe
,一个会出错,而另一个编译得很好。
导致问题的第一个文件是src\cpp\eljaccelerator.cpp
. 在mingw32下编译OK:
但在 TDM-gcc 下给出错误:
我想知道是否有人有类似的经历。知道出了什么问题以及如何修复 TDM-GCC 的编译吗?我尝试添加#include <cstring>
,wxcrt.h
但它没有改变任何东西。
仅供参考,我已经分别从 mingw 和 tdm-gcc 版本的源代码编译了 wxWidgets 3.0.0,使用
如果需要,我可以提供更多详细信息。
haskell - 如何在 wxHaskell 中获取设备上下文 (DC)?
我正在使用 wxHaskell 来显示简单 Haskell 游戏的 GUI。
我有一个问题:我正在编写简单游戏的 GUI 部分。当游戏状态更新时,GUI 模块的功能之一被调用并传递新的游戏状态参数。现在必须更新 gui。GUI 是几个矩形,GUI 的更新只是在旧矩形上绘制一些新矩形。
但是,要绘制矩形,我需要将设备上下文 DC 作为参数传递。由于包含我的矩形的面板生成的“上漆”事件,板的第一次绘画完成了。在 Paint 处理程序上必须有签名:
当事件发生时,直流通过并显示板。
我的问题:如何获得 DC?
或替代问题:如果事件处理程序需要特定签名 - 我如何将其他参数传递给处理程序?
wxhaskell - 响应全球关键事件
无论当前哪个小部件具有焦点,我如何响应键盘事件?例如,以下程序仅在 textCtrl 没有被关注时响应带有“按下键”消息的键盘事件,这不是我想要的。