View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0005326 | JEDI VCL | 03 Donations | public | 2010-09-08 16:59 | 2012-02-29 16:53 |
| Reporter | gwark | Assigned To | AHUser | ||
| Priority | normal | Severity | feature | Reproducibility | N/A |
| Status | resolved | Resolution | fixed | ||
| Product Version | 3.39 | ||||
| Target Version | Fixed in Version | 3.45 | |||
| Summary | 0005326: Inverted gradient progressbar feature | ||||
| Description | I'd like to contribute a new "inverted" property to the JvGradientProgressBar. See the attached file. I hope one can review and maby commit it to the trunk. Thanks. | ||||
| Tags | No tags attached. | ||||
|
2010-09-08 16:59
|
JvProgressBar.pas (20,590 bytes) |
|
2010-09-10 22:24
|
Inverted_JvGradientProgressBar.patch (5,636 bytes)
Index: jvcl/run/JvProgressBar.pas
===================================================================
--- jvcl/run/JvProgressBar.pas (revision 12842)
+++ jvcl/run/JvProgressBar.pas (working copy)
@@ -14,7 +14,8 @@
Portions created by S�bastien Buysse are Copyright (C) 2001 S�bastien Buysse.
All Rights Reserved.
-Contributor(s): Michael Beck [mbeck att bigfoot dott com].
+Contributor(s): Michael Beck [mbeck att bigfoot dott com]
+ Michiel Koot [makoot att gmx dott net] (inverted property)
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
located at http://jvcl.delphi-jedi.org
@@ -43,6 +44,7 @@
private
FBlockSize: Integer;
FSmooth: Boolean;
+ FInverted: Boolean;
FPosition: Integer;
FMin: Integer;
FMax: Integer;
@@ -55,6 +57,7 @@
procedure SetOrientation(Value: TProgressBarOrientation);
procedure SetPosition(Value: Integer);
procedure SetSmooth(const Value: Boolean);
+ procedure SetInverted(const Value: Boolean);
procedure SetBlockSize(const Value: Integer);
procedure SetBarColor(const Value: TColor);
procedure SetSteps(const Value: Integer);
@@ -84,6 +87,7 @@
property Orientation: TProgressBarOrientation read FOrientation write SetOrientation default pbHorizontal;
property Position: Integer read FPosition write SetPosition default 0;
property Smooth: Boolean read FSmooth write SetSmooth default False;
+ property Inverted: Boolean read FInverted write SetInverted default False; // Michiel Koot: enabling inverted drawing behaviour.
property OnChange: TNotifyEvent read FOnChange write FOnChange;
published
property Width default 150;
@@ -161,6 +165,7 @@
property Orientation;
property Position;
property Smooth;
+ property Inverted; // MK
property Align;
property Anchors;
@@ -331,6 +336,15 @@
end;
end;
+procedure TJvBaseProgressBar.SetInverted(const Value: Boolean);
+begin
+ if FInverted <> Value then
+ begin
+ FInverted := Value;
+ Invalidate;
+ end;
+end;
+
procedure TJvBaseProgressBar.DrawBar(ACanvas: TCanvas; BarSize: Integer);
var
R: TRect;
@@ -599,14 +613,20 @@
InflateRect(R, -1, -1);
if Orientation = pbHorizontal then
begin
- R.Right := BarSize;
+ if FInverted = false then
+ R.Right := BarSize
+ else
+ R.Left := R.Right - BarSize;
if R.Right > ClientWidth - 2 then
R.Right := ClientWidth - 2;
GradientFillRect(ACanvas, R, BarColorFrom, BarColorTo, fdLeftToRight, 255);
end
else
begin
- R.Top := R.Bottom - BarSize;
+ if FInverted = false then
+ R.Top := R.Bottom - BarSize
+ else
+ R.Bottom := R.Top + BarSize;
if R.Top < 2 then
R.Top := 2;
GradientFillRect(ACanvas, R, BarColorFrom, BarColorTo, fdBottomToTop, 255);
@@ -622,33 +642,71 @@
if Orientation = pbHorizontal then
begin
R := ClientRect;
- InflateRect(R, -2, -2);
- R.Right := R.Left + Round(LBlockSize);
- while R.Left <= BarSize do
- begin
- ACanvas.MoveTo(R.Left, R.Top);
- ACanvas.LineTo(R.Left, R.Bottom);
- Inc(I);
- R := ClientRect;
- InflateRect(R, -2, -2);
- R.Right := R.Left + Round(LBlockSize);
- OffsetRect(R, Round(I * LBlockSize), 0);
- end;
+ if FInverted = false then
+ begin
+ InflateRect(R, -2, -2);
+ R.Right := R.Left + Round(LBlockSize);
+ while R.Left <= BarSize do
+ begin
+ ACanvas.MoveTo(R.Left, R.Top);
+ ACanvas.LineTo(R.Left, R.Bottom);
+ Inc(I);
+ R := ClientRect;
+ InflateRect(R, -2, -2);
+ R.Right := R.Left + Round(LBlockSize);
+ OffsetRect(R, Round(I * LBlockSize), 0);
+ end;
+ end
+ else
+ // Inverted horizontal
+ begin
+ InflateRect(R, 2, 2);
+ R.Left := R.Right - Round(LBlockSize);
+ while (BarSize <> 0) and (R.Left >= (GetMaxBarSize - BarSize)) do
+ begin
+ ACanvas.MoveTo(R.Right, R.Top);
+ ACanvas.LineTo(R.Right, R.Bottom);
+ Inc(I);
+ R := ClientRect;
+ InflateRect(R, 2, 2);
+ R.Left := R.Right - Round(LBlockSize);
+ OffsetRect(R, -Round(I * LBlockSize), 0);
+ end;
+ end;
end
else
begin
R := ClientRect;
- InflateRect(R, -2, -2);
- R.Top := R.Bottom - Round(LBlockSize);
- while R.Bottom >= GetMaxBarSize - BarSize do
+ if FInverted = false then
begin
- ACanvas.MoveTo(R.Left, R.Bottom);
- ACanvas.LineTo(R.Right, R.Bottom);
- Inc(I);
- R := ClientRect;
InflateRect(R, -2, -2);
R.Top := R.Bottom - Round(LBlockSize);
- OffsetRect(R, 0, -Round(I * LBlockSize));
+ while R.Bottom >= GetMaxBarSize - BarSize do
+ begin
+ ACanvas.MoveTo(R.Left, R.Bottom);
+ ACanvas.LineTo(R.Right, R.Bottom);
+ Inc(I);
+ R := ClientRect;
+ InflateRect(R, -2, -2);
+ R.Top := R.Bottom - Round(LBlockSize);
+ OffsetRect(R, 0, -Round(I * LBlockSize));
+ end;
+ end
+ else
+ // Inverted vertical
+ begin
+ InflateRect(R, 2, 2);
+ R.Bottom := R.Top + Round(LBlockSize);
+ while (BarSize <> 0) and (R.Top <= BarSize) do
+ begin
+ ACanvas.MoveTo(R.Left, R.Top);
+ ACanvas.LineTo(R.Right, R.Top);
+ Inc(I);
+ R := ClientRect;
+ InflateRect(R, 2, 2);
+ R.Bottom := R.Top + Round(LBlockSize);
+ OffsetRect(R, 0, Round(I * LBlockSize));
+ end;
end;
end;
end;
|
|
2010-09-10 22:25
|
|
|
|
I've added a patch, patched against https://jcl.svn.sourceforge.net:443/svnroot/jvcl/trunk revision 12842 (current latest). And preview jpg. |
|
2010-09-10 22:49
|
JvGradientProgressBar_v2.patch (6,420 bytes)
Index: jvcl/run/JvProgressBar.pas
===================================================================
--- jvcl/run/JvProgressBar.pas (revision 12842)
+++ jvcl/run/JvProgressBar.pas (working copy)
@@ -14,7 +14,8 @@
Portions created by S�bastien Buysse are Copyright (C) 2001 S�bastien Buysse.
All Rights Reserved.
-Contributor(s): Michael Beck [mbeck att bigfoot dott com].
+Contributor(s): Michael Beck [mbeck att bigfoot dott com]
+ Michiel Koot [makoot att gmx dott net] (inverted property)
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
located at http://jvcl.delphi-jedi.org
@@ -42,7 +43,7 @@
TJvBaseProgressBar = class(TGraphicControl)
private
FBlockSize: Integer;
- FSmooth: Boolean;
+ FSmooth: Boolean;
FPosition: Integer;
FMin: Integer;
FMax: Integer;
@@ -54,7 +55,7 @@
procedure SetMin(Value: Integer);
procedure SetOrientation(Value: TProgressBarOrientation);
procedure SetPosition(Value: Integer);
- procedure SetSmooth(const Value: Boolean);
+ procedure SetSmooth(const Value: Boolean);
procedure SetBlockSize(const Value: Integer);
procedure SetBarColor(const Value: TColor);
procedure SetSteps(const Value: Integer);
@@ -83,7 +84,7 @@
property Min: Integer read FMin write SetMin default 0;
property Orientation: TProgressBarOrientation read FOrientation write SetOrientation default pbHorizontal;
property Position: Integer read FPosition write SetPosition default 0;
- property Smooth: Boolean read FSmooth write SetSmooth default False;
+ property Smooth: Boolean read FSmooth write SetSmooth default False;
property OnChange: TNotifyEvent read FOnChange write FOnChange;
published
property Width default 150;
@@ -138,11 +139,14 @@
private
FBarColorFrom: TColor;
FBarColorTo: TColor;
+ FInverted: Boolean;
procedure SetBarColorFrom(Value: TColor);
procedure SetBarColorTo(const Value: TColor);
+ procedure SetInverted(const Value: Boolean);
public
property BarColorFrom: TColor read FBarColorFrom write SetBarColorFrom;
property BarColorTo: TColor read FBarColorTo write SetBarColorTo;
+ property Inverted: Boolean read FInverted write SetInverted default False; // Michiel Koot: enabling inverted drawing behaviour.
end;
TJvCustomGradientProgressBar = class(TJvBaseGradientProgressBar)
@@ -161,6 +165,7 @@
property Orientation;
property Position;
property Smooth;
+ property Inverted; // MK
property Align;
property Anchors;
@@ -576,6 +581,15 @@
end;
end;
+procedure TJvBaseGradientProgressBar.SetInverted(const Value: Boolean);
+begin
+ if FInverted <> Value then
+ begin
+ FInverted := Value;
+ Invalidate;
+ end;
+end;
+
//=== { TJvGradientProgressBar } =============================================
constructor TJvCustomGradientProgressBar.Create(AOwner: TComponent);
@@ -599,14 +613,20 @@
InflateRect(R, -1, -1);
if Orientation = pbHorizontal then
begin
- R.Right := BarSize;
+ if FInverted = false then
+ R.Right := BarSize
+ else
+ R.Left := R.Right - BarSize;
if R.Right > ClientWidth - 2 then
R.Right := ClientWidth - 2;
GradientFillRect(ACanvas, R, BarColorFrom, BarColorTo, fdLeftToRight, 255);
end
else
begin
- R.Top := R.Bottom - BarSize;
+ if FInverted = false then
+ R.Top := R.Bottom - BarSize
+ else
+ R.Bottom := R.Top + BarSize;
if R.Top < 2 then
R.Top := 2;
GradientFillRect(ACanvas, R, BarColorFrom, BarColorTo, fdBottomToTop, 255);
@@ -622,33 +642,71 @@
if Orientation = pbHorizontal then
begin
R := ClientRect;
- InflateRect(R, -2, -2);
- R.Right := R.Left + Round(LBlockSize);
- while R.Left <= BarSize do
- begin
- ACanvas.MoveTo(R.Left, R.Top);
- ACanvas.LineTo(R.Left, R.Bottom);
- Inc(I);
- R := ClientRect;
- InflateRect(R, -2, -2);
- R.Right := R.Left + Round(LBlockSize);
- OffsetRect(R, Round(I * LBlockSize), 0);
- end;
+ if FInverted = false then
+ begin
+ InflateRect(R, -2, -2);
+ R.Right := R.Left + Round(LBlockSize);
+ while R.Left <= BarSize do
+ begin
+ ACanvas.MoveTo(R.Left, R.Top);
+ ACanvas.LineTo(R.Left, R.Bottom);
+ Inc(I);
+ R := ClientRect;
+ InflateRect(R, -2, -2);
+ R.Right := R.Left + Round(LBlockSize);
+ OffsetRect(R, Round(I * LBlockSize), 0);
+ end;
+ end
+ else
+ // Inverted horizontal
+ begin
+ InflateRect(R, 2, 2);
+ R.Left := R.Right - Round(LBlockSize);
+ while (BarSize <> 0) and (R.Left >= (GetMaxBarSize - BarSize)) do
+ begin
+ ACanvas.MoveTo(R.Right, R.Top);
+ ACanvas.LineTo(R.Right, R.Bottom);
+ Inc(I);
+ R := ClientRect;
+ InflateRect(R, 2, 2);
+ R.Left := R.Right - Round(LBlockSize);
+ OffsetRect(R, -Round(I * LBlockSize), 0);
+ end;
+ end;
end
else
begin
R := ClientRect;
- InflateRect(R, -2, -2);
- R.Top := R.Bottom - Round(LBlockSize);
- while R.Bottom >= GetMaxBarSize - BarSize do
+ if FInverted = false then
begin
- ACanvas.MoveTo(R.Left, R.Bottom);
- ACanvas.LineTo(R.Right, R.Bottom);
- Inc(I);
- R := ClientRect;
InflateRect(R, -2, -2);
R.Top := R.Bottom - Round(LBlockSize);
- OffsetRect(R, 0, -Round(I * LBlockSize));
+ while R.Bottom >= GetMaxBarSize - BarSize do
+ begin
+ ACanvas.MoveTo(R.Left, R.Bottom);
+ ACanvas.LineTo(R.Right, R.Bottom);
+ Inc(I);
+ R := ClientRect;
+ InflateRect(R, -2, -2);
+ R.Top := R.Bottom - Round(LBlockSize);
+ OffsetRect(R, 0, -Round(I * LBlockSize));
+ end;
+ end
+ else
+ // Inverted vertical
+ begin
+ InflateRect(R, 2, 2);
+ R.Bottom := R.Top + Round(LBlockSize);
+ while (BarSize <> 0) and (R.Top <= BarSize) do
+ begin
+ ACanvas.MoveTo(R.Left, R.Top);
+ ACanvas.LineTo(R.Right, R.Top);
+ Inc(I);
+ R := ClientRect;
+ InflateRect(R, 2, 2);
+ R.Bottom := R.Top + Round(LBlockSize);
+ OffsetRect(R, 0, Round(I * LBlockSize));
+ end;
end;
end;
end;
|
|
|
I yet noticed a small conflict-bug with the base class. Fixed it in a new patchfile JvGradientProgressBar_v2.patch. Please use this one instead of the other file. |
|
|
Thanks, this will be looked at |
|
|
Added to TJvGradientProgressBar in svn revision 12902. |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2010-09-08 16:59 | gwark | New Issue | |
| 2010-09-08 16:59 | gwark | File Added: JvProgressBar.pas | |
| 2010-09-10 22:24 | gwark | File Added: Inverted_JvGradientProgressBar.patch | |
| 2010-09-10 22:25 | gwark | File Added: Inverted_JvGradientProgressBar.jpg | |
| 2010-09-10 22:27 | gwark | Note Added: 0017662 | |
| 2010-09-10 22:49 | gwark | File Added: JvGradientProgressBar_v2.patch | |
| 2010-09-10 22:51 | gwark | Note Added: 0017664 | |
| 2010-10-08 16:34 | obones | Note Added: 0017835 | |
| 2010-10-08 16:34 | obones | Status | new => acknowledged |
| 2010-11-27 12:33 | AHUser | Note Added: 0018175 | |
| 2010-11-27 12:33 | AHUser | Status | acknowledged => resolved |
| 2010-11-27 12:33 | AHUser | Fixed in Version | => Daily / SVN |
| 2010-11-27 12:33 | AHUser | Resolution | open => fixed |
| 2010-11-27 12:33 | AHUser | Assigned To | => AHUser |
| 2012-02-29 16:53 | obones | Fixed in Version | Daily / SVN => 3.45 |