登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: [macos/appkit] nsview 如何实现 delphi 的 hint 提示 [未验证]     [回主站]     [分站链接]
[macos/appkit] nsview 如何实现 delphi 的 hint 提示 [未验证]
clq
浏览(58) - 2024-07-13 19:27:28 发表 编辑

关键字:

[macos/appkit] nsview 如何实现 delphi 的 hint 提示

百度搜索 “macos appkit 显示鼠标移动时显示提示” 可知 nsview 自身是没有这个功能的,不过和 delphi 一样可以用鼠标进入和离开事件来实现。

--------------------------------------------------------
Mac开发,实现移动鼠标到指定区域显示提示

// 设置监听

[self.itemButton addTrackingArea:[[NSTrackingArea alloc] initWithRect:self.bounds options:NSTrackingActiveAlways|NSTrackingInVisibleRect|NSTrackingMouseEnteredAndExited owner:self userInfo:nil]];



- (void)mouseEntered:(NSEvent *)event

{

[super mouseEntered:event];

_theMenu = [[NSMenu alloc] initWithTitle:@""];

NSMenuItem *item = [[NSMenuItem alloc]init];

item.title = @"你好啊";

[_theMenu addItem:item3];

[NSMenu popUpContextMenu:_theMenu withEvent:event forView:self.itemButton];

}



- (void)mouseExited:(NSEvent *)event

{

[super mouseExited:event];

[_theMenu removeAllItems];

_theMenu = nil;

}


//--------------------------------------------------------
下面是这个关键词的百度 ai 回答。感觉百度还是弱了点,我多次要 objectc 的,但它一直给我 swift 的提示 ...


在macOS中,要显示鼠标移动时的提示,可以使用NSTrackingArea来跟踪鼠标事件,并使用NSView的addTrackingArea(_:)方法添加一个跟踪区域。以下是一个简单的例子,演示如何在自定义的NSView子类中实现这一功能:

swift
import Cocoa

class CustomView: NSView {
private var trackingArea: NSTrackingArea?

override func updateTrackingAreas() {
super.updateTrackingAreas()

// Remove existing tracking area if any.
if let oldTrackingArea = trackingArea {
self.removeTrackingArea(oldTrackingArea)
}

let options: NSTrackingArea.Options = [.mouseEnteredAndExited, .mouseMoved, .activeInKeyWindow]
trackingArea = NSTrackingArea(rect: self.bounds, options: options, owner: self, userInfo: nil)
if let trackingArea = trackingArea {
self.addTrackingArea(trackingArea)
}
}

override func mouseEntered(with event: NSEvent) {
// 鼠标进入视图时的处理
NSCursor.pointingHand.set() // 例如,改变鼠标光标为指针光标
}

override func mouseMoved(with event: NSEvent) {
// 鼠标在视图内移动时的处理
// 显示提示信息,例如使用弹窗
let message = "Mouse moved at location: \(event.locationInWindow)"
let alert = NSAlert()
alert.messageText = "Mouse Moved"
alert.informativeText = message
alert.runModal()
}

override func mouseExited(with event: NSEvent) {
// 鼠标离开视图时的处理
NSCursor.arrow.set() // 例如,恢复鼠标光标为箭头
}
}

class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ aNotification: Notification) {
// 创建自定义视图并添加到主窗口
let view = CustomView(frame: NSRect(x: 0, y: 0, width: 400, height: 300))
let window = NSApplication.shared.windows.first!
window.contentView = view
window.makeKeyAndOrderFront(nil)
}
}

// 在AppDelegate设置应用的代理并启动运行循环
NSApplication.shared.delegate = AppDelegate()
_ = NSApplicationMain(nil, nil)

在这个例子中,CustomView类是一个自定义的NSView子类,它实现了鼠标进入、移动和退出时的处理方法。在mouseEntered方法中,你可以改变鼠标光标或者做其他与鼠标进入相关的处理。在mouseMoved方法中,你可以显示一个提示框,告诉用户鼠标的当前位置。在mouseExited方法中,你可以恢复默认的鼠标光标。

在AppDelegate中,当应用程序完成启动后,创建了一个CustomView实例,并将其设置为主窗口的内容视图。

这个例子提供了一个基本框架,你可以根据自己的需求对其进行扩展和定制。









总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1