VB一个可以改变箭头方向的气泡提示
'新建一个类名。名称为clsTip
Option Explicit
'* 模块名称:clsTip.cls
'* 功能:一个可以改变箭头方向的气泡提示类
Private Type TOOLINFO
cbSize As Long
dwFlags As Long
hwnd As Long
dwID As Long
rtRect(3) As Long
hInst As Long
lpszText As String
lParam As Long
End Type
Private Declare Sub InitCommonControls Lib “comctl32” ()
Private Declare Function CreateWindowEx Lib “user32” Alias “CreateWindowExA” _
(ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, _
ByVal dwStyle As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, _
ByVal nHeight As Long, ByVal hwndParent As Long, ByVal hMenu As Long, _
ByVal hInstance As Long, lpParam As Any) As Long
Private Const TOOLTIPS_CLASS As String = “tooltips_class32”
Private Declare Function DestroyWindow Lib “user32” (ByVal hwnd As Long) As Long
’ ToolTips Style
Public Enum StyleConstants
TTS_COMMON = &H0
TTS_BALLOON = &H40
End Enum
Private Const TTS_ALWAYSTIP As Long = &H1
Private Const TTS_NOANIMATE As Long = &H10
Private Const TTS_NOFADE As Long = &H20
Private Const TTS_NOPREFIX As Long = &H2
Private Const TTDT_AUTOPOP = 2
Private Const TTDT_INITIAL = 3
’ ToolTips Flags
Private Const TTF_ABSOLUTE As Long = &H80
Private Const TTF_CENTERTIP As Long = &H2
Private Const TTF_DI_SETITEM As Long = &H8000
Private Const TTF_IDISHWND As Long = &H1
Private Const TTF_RTLREADING As Long = &H4
Private Const TTF_SUBCLASS As Long = &H10
Private Const TTF_TRACK As Long = &H20
Private Const TTF_TRANSPARENT As Long = &H100
’ ToolTips Icon
Public Enum IconConstants
TTI_NONE = 0
TTI_INFO = 1
TTI_WARNING = 2
TTI_ERROR = 3
End Enum
'ToolTips Arrow Orientation
Public Enum OrientationConstants
Down = 0
Up = 1
End Enum
’ ToolTips Message
Private Const WM_USER As Long = &H400
Private Const TTM_SETDELAYTIME As Long = (WM_USER + 3)
Private Const TTM_ADDTOOL As Long = (WM_USER + 4)
Private Const TTM_DELTOOL As Long = (WM_USER + 5)
Private Const TTM_SETTOOLINFO As Long = (WM_USER + 9)
Private Const TTM_UPDATETIPTEXTA = (WM_USER + 12)
Private Const TTM_TRACKACTIVATE As Long = (WM_USER + 17)
Private Const TTM_TRACKPOSITION As Long = (WM_USER + 18)
Private Const TTM_SETTIPBKCOLOR As Long = (WM_USER + 19)
Private Const TTM_SETTIPTEXTCOLOR As Long = (WM_USER + 20)
Private Const TTM_SETTITLE As Long = (WM_USER + 32)
Private Declare Function GetCursorPos Lib “user32” (ByVal lpPoint As Long) As Long
Private Declare Function SetCursorPos Lib “user32” (ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function ShowCursor Lib “user32” (ByVal bShow As Long) As Long
Private Declare Function GetForegroundWindow Lib “user32” () As Long
Private Declare Function ClientToScreen Lib “user32” (ByVal hwnd As Long, ByVal lpPoint As Long) As Long
Private Declare Function GetClientRect Lib “user32” (ByVal hwnd As Long, ByVal lpRect As Long) As Long
Private Declare Function SendMessage Lib “user32” Alias “SendMessageA” (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function PostMessage Lib “user32” Alias “PostMessageA” (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function GetWindowLong Lib “user32” Alias “GetWindowLongA” (ByVal hwnd As Long, _
ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib “user32” Alias “SetWindowLongA” (ByVal hwnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GWL_STYLE = (-16)
Private Declare Function SetWindowPos Lib “user32” (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const HWND_NOTOPMOST = -2
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOZORDER = &H4
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_SHOWWINDOW = &H40
Private Declare Function CallWindowProc Lib “user32” Alias “CallWindowProcA” (ByVal lpPrevWndFunc As Long, _
ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Sub CopyMemory Lib “kernel32” Alias “RtlMoveMemory” (Destination As Any, _
Source As Any, ByVal Length As Long)
Private Declare Function SetTimer Lib “user32” (ByVal hwnd As Long, ByVal nIDEvent As Long, _
ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib “user32” (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Private Declare Function GetWindowRect Lib “user32” (ByVal hwnd As Long, ByVal lpRect As Long) As Long
Dim m_hwndTip As Long
Dim m_hwndParent As Long
Dim m_TipInfo As TOOLINFO
Dim m_Title As String
Dim m_Icon As IconConstants
Dim m_Style As StyleConstants
Dim m_Orientation As OrientationConstants
Dim m_Delay As Long
Dim m_ForeColor As Long, m_BackColor As Long
Dim m_idTimer As Long
Private Sub Class_Initialize()
InitCommonControls
m_Icon = TTI_INFO
m_TipInfo.cbSize = Len(m_TipInfo)
m_TipInfo.dwFlags = TTF_IDISHWND Or TTF_TRANSPARENT Or TTF_SUBCLASS 'Or TTF_TRACK
m_TipInfo.hInst = App.hInstance
m_Delay = 2000
End Sub
Private Sub Class_Terminate()
If m_idTimer <> 0 Then KillTimer 0, m_idTimer
If m_hwndTip <> 0 Then DestroyWindow m_hwndTip
m_idTimer = 0
m_hwndTip = 0
End Sub
Public Sub Show(ByVal hwndParent As Long, Optional ByVal szText As String = vbNullString, _
Optional ByVal szTitle As String = vbNullString, Optional X As Long, Optional Y As Long)
Dim hwnd As Long
Dim objPos(1) As Long, rtWin(3) As Long, ptPos As LongCall Class_Terminatem_Title = szTitle
m_TipInfo.lpszText = szText
m_hwndParent = IIf(hwndParent, hwndParent, GetForegroundWindow)
m_hwndTip = CreateWindowEx(0, TOOLTIPS_CLASS, "", TTS_NOPREFIX Or TTS_ALWAYSTIP Or m_Style, _0, 0, 0, 0, m_hwndParent, 0, App.hInstance, ByVal 0&)
m_TipInfo.hwnd = m_hwndParent
m_TipInfo.dwID = m_hwndParentIf X > 0 And Y > 0 ThenobjPos(0) = X: objPos(1) = YClientToScreen m_hwndParent, VarPtr(objPos(0))
ElseGetCursorPos VarPtr(objPos(0))
End If
ptPos = objPos(1) * &H10000 + objPos(0)SendMessage m_hwndTip, TTM_SETDELAYTIME, TTDT_INITIAL, ByVal 0
SendMessage m_hwndTip, TTM_SETTITLE, m_Icon, ByVal m_Title
If m_ForeColor <> Empty Then SendMessage m_hwndTip, TTM_SETTIPTEXTCOLOR, m_ForeColor, 0&
If m_BackColor <> Empty Then SendMessage m_hwndTip, TTM_SETTIPBKCOLOR, m_BackColor, 0&
SendMessage m_hwndTip, TTM_ADDTOOL, 0&, m_TipInfoIf m_Orientation = Up ThenSendMessage m_hwndTip, TTM_TRACKPOSITION, 0, ByVal ptPosSendMessage m_hwndTip, TTM_TRACKACTIVATE, 1, m_TipInfo
ElseSendMessage m_hwndTip, TTM_TRACKACTIVATE, 1, m_TipInfoGetWindowRect m_hwndTip, VarPtr(rtWin(0))objPos(0) = objPos(0) - 16objPos(1) = objPos(1) - (rtWin(3) - rtWin(1)) + 1SetWindowPos m_hwndTip, HWND_NOTOPMOST, objPos(0), objPos(1), 0, 0, _SWP_NOSIZE Or SWP_NOZORDER Or SWP_NOACTIVATE Or SWP_SHOWWINDOW
End If
m_idTimer = SetTimer(0, 0, m_Delay, GetClassProcAddr(Me, 22))
End Sub
Public Sub Hide()
Call Class_Terminate
End Sub
Public Property Get Title() As String
Title = m_Title
End Property
Public Property Let Title(ByVal New_Value As String)
m_Title = New_Value
If m_hwndTip <> 0 Then SendMessage m_hwndTip, TTM_SETTITLE, m_Icon, ByVal m_Title
End Property
Public Property Get Text() As String
Text = m_TipInfo.lpszText
End Property
Public Property Let Text(ByVal New_Value As String)
m_TipInfo.lpszText = New_Value
If m_hwndTip <> 0 Then SendMessage m_hwndTip, TTM_UPDATETIPTEXTA, 0&, m_TipInfo
End Property
Public Property Get Style() As StyleConstants
Style = m_Style
End Property
Public Property Let Style(ByVal New_Value As StyleConstants)
m_Style = New_Value
End Property
Public Property Get Icon() As IconConstants
Icon = m_Icon
End Property
Public Property Let Icon(ByVal New_Value As IconConstants)
m_Icon = New_Value
If m_hwndTip <> 0 Then SendMessage m_hwndTip, TTM_SETTITLE, m_Icon, ByVal m_Title
End Property
Public Property Get Orientation() As OrientationConstants
Orientation = m_Orientation
End Property
Public Property Let Orientation(ByVal New_Value As OrientationConstants)
m_Orientation = New_Value
If New_Value = Up Then
m_TipInfo.dwFlags = TTF_IDISHWND Or TTF_TRANSPARENT Or TTF_TRACK
Else
m_TipInfo.dwFlags = TTF_IDISHWND Or TTF_TRANSPARENT Or TTF_SUBCLASS
End If
End Property
Public Property Get BackColor() As OLE_COLOR
BackColor = m_BackColor
End Property
Public Property Let BackColor(ByVal New_Value As OLE_COLOR)
m_BackColor = New_Value
If m_hwndTip <> 0 Then SendMessage m_hwndTip, TTM_SETTIPBKCOLOR, m_BackColor, 0&
End Property
Public Property Get ForeColor() As OLE_COLOR
ForeColor = m_ForeColor
End Property
Public Property Let ForeColor(ByVal New_Value As OLE_COLOR)
m_ForeColor = New_Value
If m_hwndTip <> 0 Then SendMessage m_hwndTip, TTM_SETTIPTEXTCOLOR, m_ForeColor, 0&
End Property
Public Property Get Delay() As Long
Delay = m_Delay
End Property
Public Property Let Delay(ByVal New_Value As Long)
m_Delay = New_Value
End Property
Private Function GetClassProcAddr(obj As Object, ByVal Index As Long, _
Optional ByVal ParamCount As Long = 4, Optional ByVal HasReturnValue As Boolean) As Long
Static lReturn As Long, pReturn As Long
Static AsmCode(50) As Byte
Dim i As Long, pThis As Long, pVtbl As Long, pFunc As Long
pThis = ObjPtr(obj)
CopyMemory pVtbl, ByVal pThis, 4
CopyMemory pFunc, ByVal pVtbl + (6 + Index) * 4, 4
pReturn = VarPtr(lReturn)For i = 0 To UBound(AsmCode) '填充nopAsmCode(i) = &H90
Next
AsmCode(0) = &H55 'push ebp
AsmCode(1) = &H8B: AsmCode(2) = &HEC 'mov ebp,esp
AsmCode(3) = &H53 'push ebx
AsmCode(4) = &H56 'push esi
AsmCode(5) = &H57 'push edi
If HasReturnValue ThenAsmCode(6) = &HB8 'mov offset lReturnCopyMemory AsmCode(7), pReturn, 4AsmCode(11) = &H50 'push eax
End If
For i = 0 To ParamCount - 1 'push dword ptr[ebp+xx]AsmCode(12 + i * 3) = &HFFAsmCode(13 + i * 3) = &H75AsmCode(14 + i * 3) = (ParamCount - i) * 4 + 4
Next
i = i * 3 + 12
AsmCode(i) = &HB9 'mov ecx,this
CopyMemory AsmCode(i + 1), pThis, 4
AsmCode(i + 5) = &H51 'push ecx
AsmCode(i + 6) = &HE8 'call 相对地址
CopyMemory AsmCode(i + 7), pFunc - VarPtr(AsmCode(i + 6)) - 5, 4
If HasReturnValue ThenAsmCode(i + 11) = &HB8 'mov eax,offset lReturnCopyMemory AsmCode(i + 12), pReturn, 4AsmCode(i + 16) = &H8B 'mov eax,dword ptr[eax]AsmCode(i + 17) = &H0
End If
AsmCode(i + 18) = &H5F 'pop edi
AsmCode(i + 19) = &H5E 'pop esi
AsmCode(i + 20) = &H5B 'pop ebx
AsmCode(i + 21) = &H8B: AsmCode(i + 22) = &HE5 'mov esp,ebp
AsmCode(i + 23) = &H5D 'pop ebp
AsmCode(i + 24) = &HC3 'ret
GetClassProcAddr = VarPtr(AsmCode(0))
End Function
Private Sub TimerProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, _
ByVal dwTime As Long)
Call Class_Terminate
End Sub
'----------------------------------------------------------------------------------------
'窗口调用,窗口添加两个Command
Option Explicit
Dim m_Tip As clsTip
Private Sub Command1_Click()
Me.Circle (20, 50), 2, vbRed
m_Tip.Orientation = Down
m_Tip.Delay = 1500 '1500毫秒后气泡自动消失
m_Tip.Show Me.hwnd, “这是一个可以指定位置和箭头方向气泡提示!” & vbCrLf & _
“第二行信息”, “信息”, 20, 50
End Sub
Private Sub Command2_Click()
m_Tip.Hide '也可以手动消失
End Sub
Private Sub Form_Load()
Set m_Tip = New clsTip
m_Tip.Style = TTS_BALLOON
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set m_Tip = Nothing
End Sub
相关文章:
VB一个可以改变箭头方向的气泡提示
新建一个类名。名称为clsTip Option Explicit * 模块名称:clsTip.cls * 功能:一个可以改变箭头方向的气泡提示类 Private Type TOOLINFO cbSize As Long dwFlags As Long hwnd As Long dwID As Long rtRect(3) As Long hInst As Long lpszText As String…...
STM8、STM8S003F3P6 双机串口通信(片上串口)
背景 这里为什么要写串口通信,因为实际项目上使用了串口,STM8S003F3P6的串口简单啊,不值得一提。本文写的串口确实简单,因为这里我想先从简单的写起来,慢慢的把难的引出来。这里呢,做个提纲说明࿰…...
FPGA基于AXI 1G/2.5G Ethernet Subsystem实现千兆UDP通信 提供工程源码和技术支持
目录 1、前言2、我这里已有的UDP方案3、详细设计方案传统UDP网络通信方案本方案详细设计说明UDP层设计AXIS-FIFOAXI 1G/2.5G Ethernet Subsystem:输出 4、vivado工程详解5、上板调试验证并演示系统配置UDP数据回环测试注意事项 6、福利:工程代码的获取 1…...
机器学习基础知识之多模型性能对比评价方法
文章目录 1、交叉验证t检验2、Friedman检验与Nemenyi后续检验 在进行预测或分类对比实验时,通常需要比较两个或两个以上的模型性能,因此,下面将介绍两个常用的多模型性能对比评价方法,一种是交叉验证t检验,该方法主要用…...
对敏感信息脱敏,如对姓名、证件号码、手机号码、银行卡号码进行脱敏
一、姓名脱敏 1、脱敏规则一:显示姓名中的第一个字,其它用*号代替。 显示姓名中的第一个字,如为英文等其他语种,也是显示第一个字母。其它用*号代替。 ① 举例 张* 王** A**** ② 实现方法 hideName(name) {if (!n…...
创建型——单例模式C++实现
单例模式即保证一个类只有一个实例,并提供一个访问该单例的接口。 实例 1.懒汉式 用的时候才创建单例,“懒”。 Singleton.h #ifndef SINGLETON_H_ #define SINGLETON_H_#include <iostream> #include <string> #include <mutex>…...
【华为OD统一考试B卷 | 100分】执行时长(C++ Java JavaScript Python)
文章目录 题目描述输入描述输出描述ACM输入输出模式用例机考代码查重C++javascriptjavapython题目描述 为了充分发挥GPU[算力],需要尽可能多的将任务交给GPU执行,现在有一个任务数组,数组元素表示在这1秒内新增的任务个数且每秒都有新增任务。 假设GPU最多一次执行n个任务,…...
操作系统原理 —— 内存管理的概念(十八)
为什么要有内存管理 为什么要对内存进行管理,需要解决什么问题? 要回答这个问题,首先我们需要明白:进程运行时,需放在内存才能运行。比如在执行一个程序时,需将该程序的相关数据与指令装入内存才能运行。…...
GPT-4国内怎么用
GPT-4是OpenAI推出的最新的生成式AI模型,作为ChatGPT的进化版,它在回答准确性、识图能力、生成歌词和创意文本等方面有了显著的提升。然而,由于网络限制,国内用户无法直接访问官方网站。那么,GPT-4在国内如何使用呢&am…...
搭建LightPicture开源免费图床系统「公网远程控制」
文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 转载自cpolar极点云的文章:【搭建私人图床】使用LightPicture开源…...
shell编程lesson06
流控制 while 和 until 循环 #!/bin/bash# while-count:display a series of numbersi1 while [ $i -le 5 ];doecho $ii$((i1)) done echo "Finished!"while命令的语法结构如下: while commands;do commands;done 我们可以使用while循环改进上一节中的…...
国内免费可用的ChatGPT网页版
ChatGPT 一、ChatGPT是个啥?二、16个国内免费的ChatGPT网站。三、ChatGPT使用方式 一、ChatGPT是个啥? chat:表示“聊天”。 GPT:则是Generative、Pre-trained、Transformer的缩写,表示“预训练语言模型”࿰…...
用同样的关键词测试不同的人工智能
测试词汇:用“电商、接口、店群”写一篇关于API接口的推广软文 返回结果: 人工智能1: 电商行业已经进入了全面数字化转型的时代,而API接口技术正是数字化转型的重要组成部分。随着移动端、小程序等终端越来越普及,A…...
shell变量类型含义 长方形面积计算 截取相应字段方法
1.总结变量的类型及含义? 2.实现课堂案例计算长方形面积?(6种方式) 3.定义变量urlhttps://blog.csdn.net/weixin_45029822/article/details/103568815(通过多种方法实现) 1)截取网站访问的协议 …...
Java:从单线程计数器到多线程数据同步synchronized和原子类Atomic
目录 使用单线程使用多线程使用多线程 synchronized使用多线程 原子类AtomicLong 使用单线程 单线程修改计数器的值,没有发生问题,每次运行结果都是10000,不过程序耗时较长 package com.example;/*** 计数器*/ class Counter {private st…...
提前进入行业顶尖阵营:高性能计算实习的竞争优势
如今就业越来越内卷,尤其是计算机行业更是如此。加上GPT以及大模型的加持,各大企业纷纷降本增效,普通程序员逐渐失去竞争力。想要在竞争激烈的就业市场中脱颖而出,提前进入行业顶尖阵营是一个明智的选择。而高性能计算实习将为您提…...
Java程序设计入门教程--标识符和关键字
目录 标识符 标识符的约定 标识符 1. 定义 用来标识类名,变量名,方法名,类型名,数组名,文件名的有效序列称为标识符。简单地说,标识符就是一个名字。 2. 标识符命名规则 (1)大小…...
国产IC芯片自动化测试系统ATECLOUD,助力芯片测试自动化
IC芯片测试成本是影响制造和加工成本的重要因素。在某些情况下,测试成本可能占到器件总成本的40%左右。为了降低测试成本,可以优化测试程序并研发多工位测试。同时,必须平衡良品率和测试时间,以实现最佳的成本控制。本篇文章纳米软…...
BeanFactory和ApplicationContext有什么区别?
BeanFactory和ApplicationContext有什么区别? BeanFactory和ApplicationContext有什么区别? BeanFactory和ApplicationContext有什么区别? BeanFactory (轻量级) 和ApplicationContext(高级特性和框架)是Spring的两大核心接口,都…...
js的BOM对象中的window、location使用
说明:BOM的全称是Browser Object Model,浏览器对象模型,有Window(浏览器窗口)、Navigator(浏览器)、Screen(屏幕)、History(历史记录)和Location&…...
别只盯着代码了!用Multisim仿真带你理解74LS90和555的‘数字心脏’
用Multisim仿真揭秘数字电路:从555脉冲到74LS90计数的实战之旅 当你第一次看到数字电路时,是否觉得那些密密麻麻的芯片引脚和抽象的逻辑符号令人望而生畏?作为一名软件开发者,我曾经也有同样的困惑——直到发现Multisim这个神奇的…...
Vivado报错[Opt 31-430]?别慌,手把手教你从网表里揪出那个‘没爹妈’的FDCE
Vivado报错[Opt 31-430]全流程诊断手册:从网表逆向追踪到代码修复 当Vivado在opt_design阶段抛出[Opt 31-430] Found a FDCE that its data pin is undriven时,多数FPGA开发者的第一反应是检查代码中的寄存器定义。但真实情况往往更复杂——这个报错可能…...
Vue-Touch错误处理与调试:常见问题及解决方案大全
Vue-Touch错误处理与调试:常见问题及解决方案大全 【免费下载链接】vue-touch Hammer.js wrapper for Vue.js 项目地址: https://gitcode.com/gh_mirrors/vu/vue-touch 在移动优先的Web开发时代,Vue-Touch作为Vue.js的触摸事件插件,为…...
CubeIDE用户看过来:当你的STM32板载CMSIS-DAP不被支持时,3种实用的替代烧录方案
CubeIDE用户实战指南:当CMSIS-DAP不被支持时的3种高效烧录方案 作为一名长期使用STM32CubeIDE的开发者,你一定遇到过这样的尴尬场景——手头的开发板明明集成了CMSIS-DAP仿真器,却因为CubeIDE的兼容性问题无法直接使用。这种"看得见却用…...
OpenClaw办公自动化:Qwen3-14B处理Excel与邮件实战
OpenClaw办公自动化:Qwen3-14B处理Excel与邮件实战 1. 为什么选择OpenClaw处理办公自动化 上个月我需要每周手动处理几十份销售报表,总是要加班到深夜。直到同事推荐了OpenClaw——这个能像人类一样操作电脑的开源智能体框架。经过一个月的实战&#x…...
STM32 HAL库中那些‘魔法数字’的秘密:以GPIO模式宏定义为例,看懂位域操作与寄存器配置
STM32 HAL库中那些‘魔法数字’的秘密:以GPIO模式宏定义为例,看懂位域操作与寄存器配置 第一次翻开STM32 HAL库的头文件时,那些密密麻麻的十六进制数字和位移操作符就像一串串神秘的咒语。0x3uL << GPIO_MODE_Pos、~(GPIO_OSPEEDR_OSPE…...
OpenClaw技能开发入门:为Phi-3-vision-128k-instruct定制自动化流程
OpenClaw技能开发入门:为Phi-3-vision-128k-instruct定制自动化流程 1. 为什么需要为Phi-3开发OpenClaw技能? 去年夏天,我接手了一个图像处理自动化项目。当时每天要手动处理数百张产品图,用Photoshop调整尺寸、添加水印、生成缩…...
第一次遇见动态规划
一、什么是动态规划 动态规划是对问题的各状态维度进行分阶段、有顺序、无重复、决策性的遍历求解的算法思想。 “状态”、“阶段”、“决策”是构成动态规划算法的三要素。 问题能用动态规划求解需要满足三个基本条件: 1、子问题重叠性:动态规划算法…...
W5500 TCP客户端实战 | 02 - 从寄存器配置到数据收发的完整流程解析
1. W5500网络寄存器配置详解 第一次接触W5500芯片时,我被它密密麻麻的寄存器地址搞得头晕眼花。后来发现只要抓住几个核心寄存器,配置起来就像填快递单一样简单。先说说最关键的四个本地网络寄存器,它们相当于设备的"身份证"&#…...
SEO关键词长尾词优化工具源码解析:站长流量增长的秘密武器
一、长尾关键词优化的核心价值长尾关键词通常由3个以上词汇组成,例如“适合初学者的Python编程教程”或“2026年性价比最高的智能手表推荐”。这类关键词虽然单个搜索量较低,但整体覆盖了用户搜索意图的细分场景,具有以下优势:精准…...
