git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.jvcl@19 7f62d464-2af8-f54e-996c-e91b33f51cbe
235 lines
6.4 KiB
ObjectPascal
235 lines
6.4 KiB
ObjectPascal
{-----------------------------------------------------------------------------
|
|
The contents of this file are subject to the Mozilla Public License
|
|
Version 1.1 (the "License"); you may not use this file except in compliance
|
|
with the License. You may obtain a copy of the License at
|
|
http://www.mozilla.org/MPL/MPL-1.1.html
|
|
|
|
Software distributed under the License is distributed on an "AS IS" basis,
|
|
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
|
|
the specific language governing rights and limitations under the License.
|
|
|
|
The Original Code is: JvPrgrss.PAS, released on 2002-07-04.
|
|
|
|
The Initial Developers of the Original Code are: Fedor Koshevnikov, Igor Pavluk and Serge Korolev
|
|
Copyright (c) 1997, 1998 Fedor Koshevnikov, Igor Pavluk and Serge Korolev
|
|
Copyright (c) 2001,2002 SGB Software
|
|
All Rights Reserved.
|
|
|
|
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
|
|
located at http://jvcl.delphi-jedi.org
|
|
|
|
Known Issues:
|
|
-----------------------------------------------------------------------------}
|
|
// $Id: JvProgressUtils.pas 12461 2009-08-14 17:21:33Z obones $
|
|
|
|
unit JvProgressUtils;
|
|
|
|
{$I jvcl.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFDEF UNITVERSIONING}
|
|
JclUnitVersioning,
|
|
{$ENDIF UNITVERSIONING}
|
|
Controls, ComCtrls, SysUtils, Classes;
|
|
|
|
|
|
|
|
procedure RegisterProgressControl(AClass: TControlClass;
|
|
const MaxPropName, MinPropName, ProgressPropName: string);
|
|
procedure UnRegisterProgressControl(AClass: TControlClass);
|
|
function SupportsProgressControl(Control: TControl): Boolean;
|
|
|
|
procedure SetProgressMax(Control: TControl; MaxValue: Longint);
|
|
procedure SetProgressMin(Control: TControl; MinValue: Longint);
|
|
procedure SetProgressValue(Control: TControl; ProgressValue: Longint);
|
|
|
|
{$IFDEF UNITVERSIONING}
|
|
const
|
|
UnitVersioning: TUnitVersionInfo = (
|
|
RCSfile: '$URL: https://jvcl.svn.sourceforge.net/svnroot/jvcl/tags/JVCL3_39/run/JvProgressUtils.pas $';
|
|
Revision: '$Revision: 12461 $';
|
|
Date: '$Date: 2009-08-14 19:21:33 +0200 (ven., 14 août 2009) $';
|
|
LogPath: 'JVCL\run'
|
|
);
|
|
{$ENDIF UNITVERSIONING}
|
|
|
|
implementation
|
|
|
|
uses
|
|
TypInfo;
|
|
|
|
type
|
|
TProgressProp = (ppMax, ppMin, ppProgress);
|
|
|
|
PProgressData = ^TProgressData;
|
|
TProgressData = record
|
|
ControlClass: TControlClass;
|
|
MaxProperty: string{$IFNDEF RTL200_UP}[63]{$ENDIF ~RTL200_UP};
|
|
MinProperty: string{$IFNDEF RTL200_UP}[63]{$ENDIF ~RTL200_UP};
|
|
ProgressProperty: string{$IFNDEF RTL200_UP}[63]{$ENDIF ~RTL200_UP};
|
|
end;
|
|
|
|
TJvProgressList = class(TList)
|
|
public
|
|
constructor Create;
|
|
destructor Destroy; override;
|
|
procedure Add(AClass: TControlClass;
|
|
const MaxPropName, MinPropName, ProgressPropName: string);
|
|
function FindClass(AClass: TControlClass): Integer;
|
|
procedure Remove(AClass: TControlClass);
|
|
function SetControlProperty(Control: TControl; Prop: TProgressProp;
|
|
Value: Longint): Boolean;
|
|
end;
|
|
|
|
constructor TJvProgressList.Create;
|
|
begin
|
|
inherited Create;
|
|
Add(TProgressBar, 'Max', 'Min', 'Position');
|
|
end;
|
|
|
|
destructor TJvProgressList.Destroy;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to Count - 1 do
|
|
Dispose(PProgressData(Items[I]));
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TJvProgressList.Add(AClass: TControlClass;
|
|
const MaxPropName, MinPropName, ProgressPropName: string);
|
|
var
|
|
NewRec: PProgressData;
|
|
begin
|
|
New(NewRec);
|
|
with NewRec^ do
|
|
begin
|
|
ControlClass := AClass;
|
|
MaxProperty := MaxPropName;
|
|
MinProperty := MinPropName;
|
|
ProgressProperty := ProgressPropName;
|
|
end;
|
|
inherited Add(NewRec);
|
|
end;
|
|
|
|
function TJvProgressList.FindClass(AClass: TControlClass): Integer;
|
|
var
|
|
P: PProgressData;
|
|
begin
|
|
for Result := Count - 1 downto 0 do
|
|
begin
|
|
P := PProgressData(Items[Result]);
|
|
if AClass.InheritsFrom(P.ControlClass) then
|
|
Exit;
|
|
end;
|
|
Result := -1;
|
|
end;
|
|
|
|
procedure TJvProgressList.Remove(AClass: TControlClass);
|
|
var
|
|
I: Integer;
|
|
P: PProgressData;
|
|
begin
|
|
for I := Count - 1 downto 0 do
|
|
begin
|
|
P := PProgressData(Items[I]);
|
|
if P.ControlClass.InheritsFrom(AClass) then
|
|
begin
|
|
Dispose(P);
|
|
Delete(I);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function TJvProgressList.SetControlProperty(Control: TControl;
|
|
Prop: TProgressProp; Value: Longint): Boolean;
|
|
var
|
|
PropInfo: PPropInfo;
|
|
I: Integer;
|
|
PropName: string;
|
|
begin
|
|
Result := False;
|
|
if Control <> nil then
|
|
begin
|
|
I := FindClass(TControlClass(Control.ClassType));
|
|
if I >= 0 then
|
|
begin
|
|
case Prop of
|
|
ppMax:
|
|
PropName := PProgressData(Items[I]).MaxProperty;
|
|
ppMin:
|
|
PropName := PProgressData(Items[I]).MinProperty;
|
|
else {ppProgress}
|
|
PropName := PProgressData(Items[I]).ProgressProperty;
|
|
end;
|
|
PropInfo := GetPropInfo(Control.ClassInfo, PropName);
|
|
if (PropInfo <> nil) and
|
|
(PropInfo^.PropType^.Kind
|
|
in [tkInteger, tkFloat, tkVariant]) then
|
|
begin
|
|
SetOrdProp(Control, PropInfo, Value);
|
|
Result := True;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
var
|
|
ProgressList: TJvProgressList = nil;
|
|
|
|
function GetProgressList: TJvProgressList;
|
|
begin
|
|
if ProgressList = nil then
|
|
ProgressList := TJvProgressList.Create;
|
|
Result := ProgressList;
|
|
end;
|
|
|
|
function SupportsProgressControl(Control: TControl): Boolean;
|
|
begin
|
|
if Control <> nil then
|
|
Result := GetProgressList.FindClass(TControlClass(Control.ClassType)) >= 0
|
|
else
|
|
Result := False;
|
|
end;
|
|
|
|
procedure RegisterProgressControl(AClass: TControlClass;
|
|
const MaxPropName, MinPropName, ProgressPropName: string);
|
|
begin
|
|
GetProgressList.Add(AClass, MaxPropName, MinPropName, ProgressPropName);
|
|
end;
|
|
|
|
procedure UnRegisterProgressControl(AClass: TControlClass);
|
|
begin
|
|
GetProgressList.Remove(AClass);
|
|
end;
|
|
|
|
procedure SetProgressMax(Control: TControl; MaxValue: Longint);
|
|
begin
|
|
GetProgressList.SetControlProperty(Control, ppMax, MaxValue);
|
|
end;
|
|
|
|
procedure SetProgressMin(Control: TControl; MinValue: Longint);
|
|
begin
|
|
GetProgressList.SetControlProperty(Control, ppMin, MinValue);
|
|
end;
|
|
|
|
procedure SetProgressValue(Control: TControl; ProgressValue: Longint);
|
|
begin
|
|
GetProgressList.SetControlProperty(Control, ppProgress, ProgressValue);
|
|
end;
|
|
|
|
initialization
|
|
{$IFDEF UNITVERSIONING}
|
|
RegisterUnitVersion(HInstance, UnitVersioning);
|
|
{$ENDIF UNITVERSIONING}
|
|
|
|
finalization
|
|
FreeAndNil(ProgressList);
|
|
{$IFDEF UNITVERSIONING}
|
|
UnregisterUnitVersion(HInstance);
|
|
{$ENDIF UNITVERSIONING}
|
|
|
|
end.
|