在运行时更改TBitBtn字形

时间:2018-08-15 20:05:29

标签: vcl c++builder-10.2-tokyo

我有一个VCL表单,上面有一个TBitBtn和一个包含2个位图的TImageList。在运行时,我运行以下代码行,将其中一张位图放在我的TBitBtn上:

OnActionExecutingAsync

这成功地将位图放在TBitBtn上。然后,稍后我运行下面的代码行来更改位图,但是什么也没发生:

ImageList1->GetBitmap(1, BitBtn1->Glyph);

两个位图都出现在图像列表中(0和1)。我可以交换代码行,并证明imagelist没问题。 Here is的一个旧帖子,似乎有人在Delphi中解决了这个问题。我在想我必须首先以某种方式清除Glyph,但我不知道在C ++中如何使用。

1 个答案:

答案 0 :(得分:1)

这是使用它的一种方法的示例,该方法使用临时TImageListTBitBtn->OnClick检索图像并将其在运行时放入字形中。在此示例中,此事件是在void __fastcall TForm1::btn1Click(TObject *Sender) { // FOdd is a bool variable defined in the form's private section. // It's just being used here as a toggle to flip between the images this->FOdd = !this->FOdd; TBitmap *bmp = new Graphics::TBitmap(); try { bmp->SetSize(this->ImageList1->Width, this->ImageList1->Height); this->ImageList1->GetBitmap(int(FOdd), bmp); this->BitBtn1->Glyph->Assign(bmp); } __finally { delete bmp; } } 事件处理程序上执行的。

<rule name="OrderDetails" stopProcessing="true">
      <match url="^projects/offer_details.aspx$" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="true">
        <add input="{QUERY_STRING}" pattern="artistID=(\d+)" />
        <add input="{QUERY_STRING}" pattern="projectID=(\d+)" />
        <add input="{QUERY_STRING}" pattern="recordID=(\d+)" />
        <add input="{QUERY_STRING}" pattern="selection=(\d+)" />
        <add input="{QUERY_STRING}" pattern="salesTypeID=(\d+)" />
      </conditions>
      <action type="Redirect" url="/OfferDetails/{C:1}/{C:2}/{C:3}/{C:4}/{C:5}" appendQueryString="false" />
    </rule>

@ relayman357为try ..__ finally块提供了正确的代码,以使此答案更合适。