资讯详情

资讯详情

Delphi图象截取编程示例(6):用TaoToken统一Key接入AI辅助截图代码生成

1. Delphi 图象截取场景与 AI 辅助接入的痛点Delphi 图象截取编程示例走到第 6 篇核心场景已经很明确做一个全屏半透明遮罩窗体鼠标拖拽画出选区松手后把选区内容从预先抓好的屏幕位图中裁出来。这个功能本身不复杂BitBlt抓全屏、DrawFocusRect画橡皮筋框、FormMouseUp里ModalResult : mrOK关闭窗体一套流程下来几十行代码。但真正写起来麻烦的地方在于TBitmap的像素格式、Canvas.CopyRect的坐标换算、多显示器下的Screen.Width取值、以及DrawFocusRect在双缓冲下的闪烁问题每一个都能让你调半天。我试过在 Cline 里让 AI 帮我补全FormMouseUp里裁剪选区的那段逻辑结果它给的代码用了CopyRect但没处理fRect归一化——鼠标从右下往左上拖的时候Right Left裁出来是空图。这类细节 AI 不是不会而是需要你把上下文喂清楚。问题在于如果你同时用 Cline 写 Delphi、用另一个工具查文档、再开一个窗口跑 Claude Code每个工具都要单独配 Key、单独管额度切换成本很高。TaoToken 在这里的作用就是把这些工具的 API 通道统一成一个 Key。你不需要在每个工具里填不同的 base_url 和 token只需要在settings.json骨架里指向同一个入口Cline、CC Switch、Claude Code 都能复用。对于 Delphi 这种偏门技术栈来说AI 辅助的价值恰恰在于它能帮你回忆那些你记不清的 VCL 细节而统一 Key 让你不用在工具切换上浪费精力。这篇要交付的东西很具体一份可复制的settings.json配置片段加上一次截图功能的验证动作。目标是在不改动你原有 Delphi 工程结构的前提下把 AI 工具接进来。2. TaoToken 前置准备Key 与通道在写配置之前你需要先拿到一个可用的 Key。访问官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册后进入控制台创建 API Key。这个 Key 就是你后面所有工具共用的凭证。TaoToken 的 API 入口是 https://taotoken.net/api注意这个地址不带 UTM 参数配置里填的就是它。如果你用的是 OpenAI 兼容模式的工具base_url 通常填https://taotoken.net/api/v1如果是 Anthropic 兼容模式则填https://taotoken.net/api。具体填哪个取决于你用的工具走的是哪套协议。注意Key 只在创建时显示一次复制后存到安全的地方。不要把它硬编码进会提交到 Git 的工程文件里。对于 Delphi 开发者来说你大概率会在 ClineVS Code 插件或 CC SwitchClaude Code 的配置切换工具里用这个 Key。Cline 走的是 OpenAI 兼容协议CC Switch 走的是 Anthropic 协议。两者共用同一个 Key但 base_url 的路径不同。下面分别给出配置骨架。如果你还没有 Key先去控制台创建一个https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。创建完 Key 之后顺手看一眼 API Keys 管理页确认 Key 的状态是启用https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。3. 可复制配置settings.json 骨架Cline 的配置在 VS Code 的settings.json里CC Switch 的配置在它自己的配置文件里。这里给出两套骨架你可以直接复制后替换 Key。3.1 Cline 的 settings.json 片段Cline 作为 VS Code 插件它的 API 配置存在工作区或用户级的settings.json中。找到cline.apiProvider相关字段按下面的结构填{ cline.apiProvider: openai, cline.openAiApiKey: sk-你的TaoTokenKey, cline.openAiBaseUrl: https://taotoken.net/api/v1, cline.openAiModelId: claude-sonnet-4-20250514, cline.openAiModelInfo: { maxTokens: 8192, contextWindow: 200000, supportsImages: true, supportsPromptCache: false } }这里openAiBaseUrl填的是https://taotoken.net/api/v1因为 Cline 走 OpenAI 兼容协议。openAiModelId填你实际要用的模型名TaoToken 支持的模型列表可以在模型对话页查看https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。如果你用的是工作区级配置把这段放进.vscode/settings.json如果是全局配置放进用户 settings。区别在于工作区级只对当前项目生效全局对所有项目生效。对于 Delphi 项目建议用工作区级避免污染其他语言的工程。3.2 CC Switch 的配置骨架CC Switch 是 Claude Code 的配置切换工具它管理的是~/.claude/settings.json或项目级的.claude/settings.json。配置结构如下{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的TaoTokenKey, ANTHROPIC_MODEL: claude-sonnet-4-20250514 }, permissions: { allow: [ Read, Write, Bash ] } }注意这里ANTHROPIC_BASE_URL填的是https://taotoken.net/api不带/v1。因为 Claude Code 走的是 Anthropic 原生协议路径规则和 OpenAI 兼容模式不同。这是最容易踩的坑把/v1加到这里会导致 404。提示CC Switch 的好处是你可以保存多套配置比如一套指向 TaoToken一套指向其他通道用的时候一键切换。对于 Delphi 项目建议单独建一个 profile只在这个项目里启用。3.3 参数对照表配置项ClineOpenAI 兼容CC SwitchAnthropic 兼容base_urlhttps://taotoken.net/api/v1https://taotoken.net/apiKey 字段openAiApiKeyANTHROPIC_API_KEY模型字段openAiModelIdANTHROPIC_MODEL协议OpenAI Chat CompletionsAnthropic Messages这张表建议存下来以后换工具的时候对照着填能省不少排查时间。4. 验证请求让 AI 生成截图裁剪代码配置填好之后不要急着写完整工程先用一个最小验证动作确认通道是通的。打开 Cline 或 Claude Code输入下面这段 prompt我在写 Delphi 的屏幕区域截取功能。已经有一个全屏 TBitmapfBmp 和一个选区矩形 fRect: TRect。鼠标从右下往左上拖时fRect.Right 可能 小于 fRect.LeftfRect.Bottom 可能小于 fRect.Top。请给我一段 FormMouseUp 里的代码把 fBmp 中 fRect 对应的区域裁剪到一个新的 TBitmap 里并处理坐标归一化。用 Delphi 7 兼容的语法。如果通道正常AI 会返回类似下面的代码procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var tmpRect: TRect; cropBmp: TBitmap; begin if fDragging then begin Canvas.DrawFocusRect(fRect); fDragging : false; // 归一化矩形处理反向拖拽 tmpRect.Left : Min(fRect.Left, fRect.Right); tmpRect.Top : Min(fRect.Top, fRect.Bottom); tmpRect.Right : Max(fRect.Left, fRect.Right); tmpRect.Bottom : Max(fRect.Top, fRect.Bottom); // 裁剪选区 cropBmp : TBitmap.Create; try cropBmp.Width : tmpRect.Right - tmpRect.Left; cropBmp.Height : tmpRect.Bottom - tmpRect.Top; cropBmp.Canvas.CopyRect( Rect(0, 0, cropBmp.Width, cropBmp.Height), fBmp.Canvas, tmpRect ); // 这里可以把 cropBmp 保存或传给主窗体 cropBmp.SaveToFile(capture.bmp); finally cropBmp.Free; end; end; ModalResult : mrOK; end;这段代码的关键点是Min/Max归一化以及CopyRect的源矩形用归一化后的tmpRect。AI 能给出这个结果说明通道是通的模型也在正常工作。验证成功的标志有三个第一返回的代码里有Min/Max处理第二CopyRect的目标矩形从(0,0)开始第三语法是 Delphi 7 兼容的没有用泛型或匿名方法。如果这三点都满足说明你的配置没问题。如果你想让 AI 帮你把整个 Capture1.pas 补全可以把 excerpt 里的窗体骨架贴进去让它补FormCreate里的BitBlt和FormPaint里的Canvas.Draw。但注意不要一次贴太多Delphi 的uses列表和事件签名容易让模型混淆。5. 本篇常见错排查配置和验证过程中最容易遇到下面几类问题。5.1 404 或 401 错误404 通常是 base_url 路径填错。Cline 填https://taotoken.net/api/v1CC Switch 填https://taotoken.net/api两者不能混。401 则是 Key 无效或没填对检查 Key 是否复制完整、是否有多余空格。5.2 模型名不识别如果你填的模型名 TaoToken 不支持会返回 model not found。去模型对话页确认可用模型列表复制准确的模型 ID。注意模型 ID 是大小写敏感的claude-sonnet-4-20250514和Claude-Sonnet-4-20250514可能不一样。5.3 AI 返回的 Delphi 代码用了不兼容语法Delphi 7 和 Delphi 11 的语法差异不小。如果你用的是老版本prompt 里一定要写明「Delphi 7 兼容」。否则 AI 可能给你for var i : 0 to ...这种新语法在 Delphi 7 里编译不过。另外TBitmap的PixelFormat在旧版本里默认是pfDevice裁剪 PNG 透明通道时要注意。5.4 截图代码运行后是黑图这通常不是 AI 的问题而是BitBlt的时机。FormCreate里抓屏时如果窗体还没显示抓到的可能是桌面而不是当前屏幕内容。另外多显示器下Screen.Width只返回主屏宽度副屏内容抓不到。这些细节可以在 prompt 里补充说明让 AI 帮你处理。5.5 配置改了但工具没生效Cline 改完settings.json后需要重载窗口CtrlShiftP→ Reload Window。CC Switch 改完配置后需要重启 Claude Code 会话。如果改了没生效先确认改的是哪个层级的配置文件——工作区级会覆盖全局级。6. 长期编码与 Agent 场景的接入建议如果你只是偶尔用 AI 补几段 Delphi 代码上面的配置就够了。但如果你打算长期用 AI 辅助 Delphi 开发比如让 Agent 帮你重构整个截图模块、自动生成单元测试、或者批量处理图象格式转换那建议走 Coding Plan 通道。Coding Plan 针对长时间、多轮次的编码会话做了优化额度模型和按次调用不同更适合 Agent 场景。配置方式是在 CC Switch 里把ANTHROPIC_BASE_URL指向 Coding Plan 的入口具体地址在订阅后会在控制台显示。对于 Delphi 这种需要大量上下文比如你要把整个Capture1.pas和主窗体代码一起喂给 AI的场景Coding Plan 的上下文窗口和并发能力会更稳。接入文档在这里https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。里面有各工具的详细配置示例包括 Cline、Claude Code、Cursor 等。如果你用的是 Claude Code 原生客户端而不是 CC Switch参考这个页面https://taotoken.net/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。最后说一个实际经验Delphi 的 VCL 代码里Canvas.DrawFocusRect画出来的虚线框在双缓冲下会闪烁AI 一般不会主动帮你处理这个。你可以在 prompt 里加一句「用 DoubleBuffered 或手动双缓冲消除闪烁」它才会给你加TBitmap离屏绘制的逻辑。这类细节才是 AI 辅助 Delphi 开发真正省时间的地方。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →