基本上,我想要一个活动指标,将一目了然地显示,有一个积极的计算在该选项卡上进行。我正在寻找一些非常简单的东西,比如在标签上显示一个gif,或者显示一系列随计时器变化的字符串。我不想要复杂的解决方案或需要新组件的解决方案。
我已经有了一个实现,但是我遇到了一个问题,我在这里请求一个更具体的解决方案:How to show backslash in a japanese locale
在另一个问题没有解决方案的情况下,或者有一个明显更好的方法来做到这一点,我问的是更一般的问题。在任何情况下,我相信还会有其他人可以使用一种好的方法来做到这一点。
发布于 2012-02-02 06:45:28
更新:
最简单的方法可能是:
cMaxImageIndex设置为动画列表的最后一个索引。<>H19将定时器连接到tabsheet a函数appropriate.
cMaxImageIndextimer事件时,设置tabsheetD18属性。
请参见代码:
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设置为零,当工作完成时,您可能还会有一些逻辑来为选项卡提供默认图像。
发布于 2012-02-02 17:13:03
另一种方法是使用PageControl或TabControl的OnDrawTab事件。同样,您需要一种机制来触发重绘,但您可以直接在选项卡的画布上绘制图像,也可以切换星号或在一系列点之间循环。这种方法为您提供了很大的灵活性。这里有一个OnTabDraw事件,它只是使用静态渐变来绘制选项卡;您可以将其作为起点。
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;https://stackoverflow.com/questions/9104348
复制相似问题