首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在TTabSheet的选项卡上显示活动的简单方法

在TTabSheet的选项卡上显示活动的简单方法
EN

Stack Overflow用户
提问于 2012-02-02 06:29:23
回答 2查看 838关注 0票数 4

基本上,我想要一个活动指标,将一目了然地显示,有一个积极的计算在该选项卡上进行。我正在寻找一些非常简单的东西,比如在标签上显示一个gif,或者显示一系列随计时器变化的字符串。我不想要复杂的解决方案或需要新组件的解决方案。

我已经有了一个实现,但是我遇到了一个问题,我在这里请求一个更具体的解决方案:How to show backslash in a japanese locale

在另一个问题没有解决方案的情况下,或者有一个明显更好的方法来做到这一点,我问的是更一般的问题。在任何情况下,我相信还会有其他人可以使用一种好的方法来做到这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-02 06:45:28

更新:

最简单的方法可能是:

  • 将定时器添加到窗体中。
  • 将动画图像添加到图像列表中。
  • 将常量cMaxImageIndex设置为动画列表的最后一个索引。<

>H19将定时器连接到tabsheet a函数appropriate.

  • In cMaxImageIndex

timer事件时,设置tabsheetD18属性。

请参见代码:

代码语言:javascript
复制
Const
  cMaxImageIndex = 5;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FImageIndex := 0;
end;

function TForm1.NextImageIndex: Integer;
begin
  Inc(FImageIndex);
  if (FImageIndex > cMaxImageIndex) then FImageIndex:= 0;
  Result := FImageIndex;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  PageControl1.Pages[0].ImageIndex := NextImageIndex;
end;

注意:在激活计时器之前,将FImageIndex设置为零,当工作完成时,您可能还会有一些逻辑来为选项卡提供默认图像。

票数 3
EN

Stack Overflow用户

发布于 2012-02-02 17:13:03

另一种方法是使用PageControl或TabControl的OnDrawTab事件。同样,您需要一种机制来触发重绘,但您可以直接在选项卡的画布上绘制图像,也可以切换星号或在一系列点之间循环。这种方法为您提供了很大的灵活性。这里有一个OnTabDraw事件,它只是使用静态渐变来绘制选项卡;您可以将其作为起点。

代码语言:javascript
复制
procedure TabDraw(Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect; Active: Boolean);
const
  TCM_GETITEMRECT = $130A;
type
  TRIVERTEX = packed record
    X, Y: DWORD;
    Red, Green, Blue, Alpha: Word;
  end;
var
  vert: array[0..1] of TRIVERTEX;
  gRect: GRADIENT_RECT;
  iHeight,
  iWidth: Integer;
begin
  with FTabControl.Canvas do begin
    if Active then begin
      Brush.Color := TAB_ACTIVECOLOUR;
      FillRect(Rect);
    end
    else begin
      vert[0] .x := Rect.Left;
      vert[0] .y := Rect.Top;
      vert[0] .Red := $ab00;
      vert[0] .Green := $ab00;
      vert[0] .Blue := $ab00;
      vert[0] .Alpha := $ab00;
      vert[1] .x := Rect.Right;
      vert[1] .y := Rect.Bottom;
      vert[1] .Red := $ef00;
      vert[1] .Green := $ef00;
      vert[1] .Blue := $fe00;
      vert[1] .Alpha := $0000;
      gRect.UpperLeft  := 0;
      gRect.LowerRight := 1;
      GradientFill(FTabControl.Canvas.Handle, @vert, 2, @gRect, 1, GRADIENT_FILL_RECT_V);
    end;
    iHeight := (Rect.Bottom - Rect.Top) - TextHeight(FTabControl.Tabs[TabIndex]);
    if not Active then
      Inc(iHeight, 4);
    iWidth := (Rect.Right - Rect.Left) - TextWidth(FTabControl.Tabs[TabIndex]);
    Brush.Style := bsClear;
    TextOut(Rect.Left + (iWidth div 2), Rect.Top + (iHeight div 2), FTabControl.Tabs[TabIndex]);
  end;
end;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9104348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档