{"id":5739,"date":"2023-10-26T16:43:31","date_gmt":"2023-10-26T08:43:31","guid":{"rendered":"https:\/\/blog.qdac.cc\/?p=5739"},"modified":"2023-10-26T16:43:31","modified_gmt":"2023-10-26T08:43:31","slug":"%e6%95%99%e7%a8%8b%e8%87%aa%e7%bb%98%e5%bc%80%e5%85%b3%e7%bb%84%e4%bb%b6%e6%95%88%e6%9e%9c","status":"publish","type":"post","link":"https:\/\/blog.qdac.cc\/?p=5739","title":{"rendered":"[\u6559\u7a0b]\u81ea\u7ed8\u5f00\u5173\u7ec4\u4ef6\u6548\u679c"},"content":{"rendered":"\n<p>\u76f4\u63a5\u7528PaintBox\u7ed8\u5236\u7684\u4f8b\u5b50\uff0c\u540c\u6837\u7684\u6548\u679c\u5185\u7f6e\u4e8e TZTextButtonBar \u4e2d\uff0c\u8bbe\u7f6e\u5bf9\u5e94\u7684\u6309\u94ae\u7684 ButtonKind \u4e3a bkSwitch \u5e76\u4e14 ThemeDraw \u4e3a False \u65f6\uff0c\u5373\u53ef\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>unit Unit1;\n\ninterface\n\nuses\n  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,\n  System.Classes, Vcl.Graphics, Vcl.GraphUtil,\n  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls;\n\ntype\n  TZSwitchPair = record\n    Background: TColor;\n    Font: TColor;\n    Text: String;\n    procedure Initialize(ABackgroundColor, AFontColor: TColor; AText: String);\n  end;\n\n  TZSwitchDrawer = record\n    OnSettings: TZSwitchPair;\n    OffSettings: TZSwitchPair;\n    DisabledSettings: TZSwitchPair;\n    Rad: TSize;\n    IsEnabled, IsOn: Boolean;\n    procedure Draw(ACanvas: TCanvas; R: TRect);\n  end;\n\n  TForm1 = class(TForm)\n    PaintBox1: TPaintBox;\n    procedure PaintBox1Paint(Sender: TObject);\n    procedure FormCreate(Sender: TObject);\n    procedure PaintBox1Click(Sender: TObject);\n  private\n    { Private declarations }\n    FSwitchDrawer: TZSwitchDrawer;\n  public\n    { Public declarations }\n  end;\n\nvar\n  Form1: TForm1;\n\nimplementation\n\n{$R *.dfm}\n\nprocedure TForm1.FormCreate(Sender: TObject);\nbegin\n  FSwitchDrawer.OnSettings.Initialize(clPurple, clHighlightText, '\u5df2\u5f00');\n  FSwitchDrawer.OffSettings.Initialize(clSkyBlue, clGrayText, '\u5df2\u5173');\n  FSwitchDrawer.DisabledSettings.Initialize(clLtGray, clMedGray, '\u72b6\u6001');\n  FSwitchDrawer.Rad.cx := 5;\n  FSwitchDrawer.Rad.cy := 5;\n  FSwitchDrawer.IsEnabled := true;\n  FSwitchDrawer.IsOn := true;\nend;\n\nprocedure TForm1.PaintBox1Click(Sender: TObject);\nbegin\n  FSwitchDrawer.IsOn := not FSwitchDrawer.IsOn;\n  PaintBox1.Invalidate;\nend;\n\nprocedure TForm1.PaintBox1Paint(Sender: TObject);\nbegin\n  FSwitchDrawer.Draw(PaintBox1.Canvas, PaintBox1.ClientRect);\nend;\n\n{ TZSwitchDrawer }\n\nprocedure TZSwitchDrawer.Draw(ACanvas: TCanvas; R: TRect);\nvar\n  AText: String;\n  ASavedColor: TColor;\n  X: Integer;\nbegin\n  if IsEnabled then\n  begin\n    if IsOn then\n    begin\n      ACanvas.Brush.Color := OnSettings.Background;\n      ACanvas.Pen.Color := GetHighLightColor(OnSettings.Background, 10);\n      ACanvas.Font.Color := OnSettings.Font;\n      AText := OnSettings.Text;\n    end\n    else\n    begin\n      ACanvas.Brush.Color := OffSettings.Background;\n      ACanvas.Pen.Color := GetShadowColor(OffSettings.Background, -10);\n      ACanvas.Font.Color := OffSettings.Font;\n      AText := OffSettings.Text;\n    end;\n  end\n  else\n  begin\n    ACanvas.Brush.Color := DisabledSettings.Background;\n    ACanvas.Pen.Color := GetShadowColor(OffSettings.Background, -10);\n    ACanvas.Font.Color := DisabledSettings.Font;\n    AText := DisabledSettings.Text;\n  end;\n  ACanvas.RoundRect(R, Rad.cx, Rad.cy);\n  ASavedColor := ACanvas.Brush.Color;\n  if not IsOn then\n  begin\n    X := R.Right - 4 - (R.Height - 8);\n    ACanvas.Brush.Color := ACanvas.Font.Color;\n    ACanvas.RoundRect(Rect(X, R.Top + 4, R.Right - 4, R.Bottom - 4),\n      Rad.cx, Rad.cy);\n    ACanvas.Brush.Color := ASavedColor;\n    R.Right := X;\n  end\n  else\n  begin\n    X := R.Left - 4 + R.Height;\n    ACanvas.Brush.Color := ACanvas.Font.Color;\n    ACanvas.RoundRect(Rect(R.Left + 4, R.Top + 4, X, R.Bottom - 4),\n      Rad.cx, Rad.cy);\n    ACanvas.Brush.Color := ASavedColor;\n    R.Left := X;;\n  end;\n  ACanvas.TextRect(R, AText, &#91;tfSingleLine, tfVerticalCenter, tfCenter]);\nend;\n\n{ TZSwitchPair }\n\nprocedure TZSwitchPair.Initialize(ABackgroundColor, AFontColor: TColor;\n  AText: String);\nbegin\n  Background := ABackgroundColor;\n  Font := AFontColor;\n  Text := AText;\nend;\n\nend.<\/code><\/pre>\n\n\n\n<p>\u5b9e\u9645\u8fd0\u884c\u6548\u679c\u52a8\u56fe<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.qdac.cc\/wp-content\/uploads\/2023\/10\/switch.gif\"><img loading=\"lazy\" decoding=\"async\" width=\"580\" height=\"280\" src=\"https:\/\/blog.qdac.cc\/wp-content\/uploads\/2023\/10\/switch.gif\" alt=\"\" class=\"wp-image-5740\"\/><\/a><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\u76f4\u63a5\u7528PaintBox\u7ed8\u5236\u7684\u4f8b\u5b50\uff0c\u540c\u6837\u7684 [&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,603],"tags":[823,822],"class_list":["post-5739","post","type-post","status-publish","format-standard","hentry","category-delphi","category-603","tag-switch","tag-822"],"views":2328,"_links":{"self":[{"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=\/wp\/v2\/posts\/5739","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=5739"}],"version-history":[{"count":1,"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=\/wp\/v2\/posts\/5739\/revisions"}],"predecessor-version":[{"id":5741,"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=\/wp\/v2\/posts\/5739\/revisions\/5741"}],"wp:attachment":[{"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5739"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5739"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.qdac.cc\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5739"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}