{"id":5722,"date":"2023-09-07T11:16:06","date_gmt":"2023-09-07T03:16:06","guid":{"rendered":"https:\/\/blog.qdac.cc\/?p=5722"},"modified":"2023-09-07T11:19:04","modified_gmt":"2023-09-07T03:19:04","slug":"%e6%95%99%e7%a8%8b-zvaluewatch-%e6%95%99%e7%a8%8b%e4%b9%8b%e4%ba%8c%ef%bc%9a%e5%9c%a8%e7%ba%bf%e7%a8%8b%e4%b8%ad%e5%a4%84%e7%90%86%e5%9b%be%e7%89%87","status":"publish","type":"post","link":"https:\/\/blog.qdac.cc\/?p=5722","title":{"rendered":"[\u6559\u7a0b] ZValueWatch \u6559\u7a0b\u4e4b\u4e8c\uff1a\u5728\u7ebf\u7a0b\u4e2d\u5904\u7406\u56fe\u7247"},"content":{"rendered":"\n<p>\u524d\u9762\u7684\u6559\u7a0b\u4e2d\uff0c\u6211\u4eec\u6f14\u793a\u4e86\u4e00\u4e2a\u8fdb\u5ea6\u66f4\u65b0\u548c\u4f4d\u7f6e\u8c03\u6574\u7684\u793a\u4f8b\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u6f14\u793a\u5982\u4f55\u521b\u5efa\u4e00\u4e2a\u7279\u5b9a\u7c7b\u578b\u7684\u76d1\u89c6\u5bf9\u8c61\u6765\u52a8\u6001\u66f4\u65b0\u4e00\u4e2a\u7279\u6b8a\u7c7b\u578b\u7684\u5c5e\u6027\u3002<\/p>\n\n\n\n<p>1\u3001\u5728\u754c\u9762\u4e0a\u653e\u7f6e\u9700\u8981\u7684\u7ec4\u4ef6\uff0c\u6211\u4eec\u8981\u5728\u7ebf\u7a0b\u4e2d\u52a8\u6001\u66f4\u65b0\u56fe\u50cf\u5185\u5bb9\uff0c\u7136\u540e\u5728\u524d\u53f0\u663e\u793a\uff08\u672c\u793a\u4f8b\u4f9d\u8d56\u4e8e Graphics32\uff09\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.qdac.cc\/wp-content\/uploads\/2023\/09\/\u56fe\u7247.png\"><img loading=\"lazy\" decoding=\"async\" width=\"644\" height=\"481\" src=\"https:\/\/blog.qdac.cc\/wp-content\/uploads\/2023\/09\/\u56fe\u7247.png\" alt=\"\" class=\"wp-image-5723\"\/><\/a><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>TForm1 = class(TForm)\n    Panel1: TPanel;\n    Image1: TImage;\n    SpeedButton1: TSpeedButton;\n    Panel2: TPanel;\n    ZWatcher1: TZWatcher;\n    procedure SpeedButton1Click(Sender: TObject);\n  private\n    { Private declarations }\n    FThread: TThread;\n    FImageWatch: IZValueWatch&lt;TBitmap32&gt;;\n  public\n    { Public declarations }\n  end;<\/code><\/pre>\n\n\n\n<p>2\u3001\u8bbe\u7f6e ZWatcher\u7684Kind\u4e3awkMessage\u6216 wkTimer\u3002<\/p>\n\n\n\n<p>3\u3001\u521b\u5efa\u4e00\u4e2a TPictureWatch \u7c7b\u578b\u7684\u76d1\u89c6\u7c7b\u5b9a\u4e49\uff0c\u91cd\u8f7d DoSetValue \u51fd\u6570\uff0c\u6765\u8bbe\u7f6e\u76ee\u6807\u7f13\u5b58\u7684\u503c\uff0c\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type\n  TPictureWatch = class(TZObjectWatchItem&lt;TBitmap32&gt;)\n  protected\n    procedure DoSetValue(var ATarget: TBitmap32;\n      const ANewValue: TBitmap32); override;\n  public\n  end;\nimplementation\n\nprocedure TPictureWatch.DoSetValue(var ATarget: TBitmap32;\nconst ANewValue: TBitmap32);\nbegin\n  if not Assigned(ATarget) then\n    ATarget := TBitmap32.Create(ANewValue.Width, ANewValue.Height);\n  ATarget.Assign(ANewValue);\nend;\n\ninitialization\n\nTZWatchItems.Register&lt;TBitmap32&gt;(TPictureWatch);<\/code><\/pre>\n\n\n\n<p>4\u3001\u5728 SpeedButton1 \u7684 OnClick \u4e8b\u4ef6\u4e2d\uff0c\u6211\u4eec\u52a0\u5165\u76f8\u5e94\u7684\u4ee3\u7801\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if not Assigned(FImageWatch) then\n    <strong>FImageWatch := TZWatchItems.Current.CreateWatch&lt;TBitmap32&gt;(\n      procedure(const ABitmap: TBitmap32)\n      begin\n        Image1.Picture.Assign(ABitmap);\n      end);<\/strong>\n  SpeedButton1.Enabled := false;\n  FThread := TThread.CreateAnonymousThread(\n    procedure\n    var\n      ABitmap: TBitmap32;\n    begin\n      ABitmap := TBitmap32.Create(200, 100);\n      try\n        while not Application.Terminated do\n        begin\n          ABitmap.FillRect(0, 0, 200, 100, clWhite32);\n          for var I := 0 to 9 do\n          begin\n            ABitmap.FrameRectS(I * 10, I * 5, 200 - I * 10, 100 - I * 5,\n              Color32(255 * I div 10, 255 * I div 10, 255 * I div 10, 255));\n            if not Application.Terminated then\n              FImageWatch.Value := ABitmap\n            else\n              break;\n            Sleep(50);\n          end;\n        end;\n      finally\n        FreeAndNil(ABitmap);\n        TThread.Queue(nil,\n          procedure\n          begin\n            SpeedButton1.Enabled := true;\n            FreeAndNil(FThread);\n          end);\n      end;\n    end);\n  FThread.Start;<\/code><\/pre>\n\n\n\n<p>\u6211\u4eec\u521b\u5efa\u4e86 FImageWatch\uff0c\u5e76\u5728\u540e\u53f0\u7ebf\u7a0b\u4e2d\uff0c\u76f4\u63a5\u8bbf\u95ee\u5e76\u5bf9\u5b83\u7684 Value \u8fdb\u884c\u4e86\u8d4b\u503c\u64cd\u4f5c\u3002<\/p>\n\n\n\n<p>\u6211\u4eec\u5728\u7ebf\u7a0b\u7684\u56fe\u50cf\u5904\u7406\u4ee3\u7801\u4e2d\uff0c\u521b\u5efa\u4e86\u4e00\u4e2a TBitmap32 \u5bf9\u8c61\u7684\u5b9e\u4f8b\uff0c\u5e76\u5bf9\u5176\u8fdb\u884c\u7ed8\u5236\uff0c\u6bcf\u969450ms\u66f4\u65b0\u4e00\u5e27\uff0c\u4fdd\u6301\u7ea6 20 fps \u7684\u5237\u65b0\u901f\u5ea6\u3002<\/p>\n\n\n\n<p>5\u3001\u5b8c\u6210\uff0c\u6211\u4eec\u770b\u4e0b\u7a0b\u5e8f\u8fd0\u884c\u6548\u679c\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.qdac.cc\/wp-content\/uploads\/2023\/09\/\u5f55\u5c4f_\u9009\u62e9\u533a\u57df_20230907111331.gif\"><img loading=\"lazy\" decoding=\"async\" width=\"632\" height=\"470\" src=\"https:\/\/blog.qdac.cc\/wp-content\/uploads\/2023\/09\/\u5f55\u5c4f_\u9009\u62e9\u533a\u57df_20230907111331.gif\" alt=\"\" class=\"wp-image-5725\"\/><\/a><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u9762\u7684\u6559\u7a0b\u4e2d\uff0c\u6211\u4eec\u6f14\u793a\u4e86\u4e00\u4e2a\u8fdb\u5ea6\u66f4\u65b0\u548c\u4f4d [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[8,797,603],"tags":[820,821],"class_list":["post-5722","post","type-post","status-publish","format-standard","hentry","category-delphi","category-projectz","category-603","tag-zbar","tag-zvaluewatch"],"views":2443,"_links":{"self":[{"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=\/wp\/v2\/posts\/5722","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5722"}],"version-history":[{"count":5,"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=\/wp\/v2\/posts\/5722\/revisions"}],"predecessor-version":[{"id":5729,"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=\/wp\/v2\/posts\/5722\/revisions\/5729"}],"wp:attachment":[{"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5722"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5722"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5722"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}