unit mythreaddisplay;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, StdCtrls, ExtCtrls, ComCtrls, Dialogs, Buttons, Windows;
type
TThreadInfo = record
Position : Integer;
Caption : String;
end;
TMyThreadDisplay = class(TCustomControl)
private
flblLabel : array[0..4] of TLabel;
fprbProgressbar : array[0..4] of TProgressBar;
fThreadInfo : array[0..4] of TThreadInfo;
function GetThreadInfo(Index: Integer): TThreadInfo;
procedure SetThreadInfo(Index: Integer; AValue: TThreadInfo);
protected
public
constructor Create(AOwner : TComponent); override;
property ThreadInfo[Index: Integer]: TThreadInfo read GetThreadInfo write SetThreadInfo;
published
property Align;
end;
procedure Register;
implementation
function TMyThreadDisplay.GetThreadInfo(Index: Integer): TThreadInfo;
begin
Result := fThreadInfo[Index];
end;
procedure TMyThreadDisplay.SetThreadInfo(Index: Integer; AValue: TThreadInfo);
begin
if fThreadInfo[Index].Caption <> AValue.Caption then
begin
fThreadInfo[Index].Caption := AValue.Caption;
flblLabel[Index].Caption := AValue.Caption;
end;
if fThreadInfo[Index].Position <> AValue.Position then
begin
fThreadInfo[Index].Position := AValue.Position;
fprbProgressbar[Index].Position := AValue.Position;
end;
end;
constructor TMyThreadDisplay.Create(AOwner : TComponent);
var
iTEMP : Integer;
begin
inherited Create(AOwner);
for iTEMP := 4 downto 0 do
begin
fprbProgressbar[iTEMP] := TProgressBar.Create(Self);
with fprbProgressbar[iTEMP] do
begin
fThreadInfo[iTEMP].Position := 0;
Align := alTop;
Parent := Self;
Position := fThreadInfo[iTEMP].Position;
end;
flblLabel[iTEMP] := TLabel.Create(Self);
with flblLabel[iTEMP] do
begin
fThreadInfo[iTEMP].Caption := 'Thread ' + iTEMP.ToString;
Caption := fThreadInfo[iTEMP].Caption;
Align := alTop;
Parent := Self;
ParentFont := True;
end;
end;
Constraints.MinHeight := 205;
Constraints.MinWidth := 100;
SetBounds(0, 0, 100, 205);
end;
procedure Register;
begin
RegisterComponents('Misc', [TMyThreadDisplay]);
end;
end.