Menu

[r2017]: / trunk / Src / UMemoProgBarMgr.pas  Maximize  Restore  History

Download this file

206 lines (181 with data), 5.8 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
{
* UMemoProgBarMgr.pas
*
* Class that manages a progress bar that is displayed within a memo control and
* aligned to text in the control.
*
* $Rev$
* $Date$
*
* ***** BEGIN LICENSE BLOCK *****
*
* Version: MPL 1.1
*
* 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/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* The Original Code is UMemoProgBarMgr.pas
*
* The Initial Developer of the Original Code is Peter Johnson
* (http://www.delphidabbler.com/).
*
* Portions created by the Initial Developer are Copyright (C) 2006-2011 Peter
* Johnson. All Rights Reserved.
*
* Contributor(s)
* NONE
*
* ***** END LICENSE BLOCK *****
}
unit UMemoProgBarMgr;
interface
uses
// Delphi
StdCtrls, ComCtrls;
type
{
TMemoProgBarMgr:
Manages a progress bar that is displayed within a memo control and aligned
to text in the control.
}
TMemoProgBarMgr = class(TObject)
strict private
fMemo: TMemo;
{Memo control in which progress bar is displayed}
fProgressBar: TProgressBar;
{Reference to displayed progress bar. Nil when not displayed}
fPosition: Integer;
{Value of progress bar's Position property. Persists value when progress
bar is not instantiated}
fMax: Integer;
{Value of progress bar's Max property. Persists value when progress bar is
not instantiated}
procedure SetMax(const Value: Integer);
{Write accessor for Max property.
@param Value [in] Required property value.
}
procedure SetPosition(const Value: Integer);
{Write accessor for Position property.
@param Value [in] Required property value.
}
procedure SetBounds(const MemoLine: Integer);
{Sets bounds of progress bar to fit after a memo line.
@param MemoLine [in] Index of memo line after which progress bar is
displayed.
}
public
constructor Create(const Memo: TMemo);
{Class constructor. Creates object that displays progress bar in a
specified memo.
@param Memo [in] Memo to contain progress bar.
}
destructor Destroy; override;
{Class destructor. Ensures progress bar is removed from memo control.
}
procedure Show(const MemoLine: Integer);
{Displays progress bar adjacent to specified line in memo control.
@param MemoLine [in] Index of memo line after which progress bar is
displayed.
}
procedure Hide;
{Hides progress bar.
}
property Max: Integer read fMax write SetMax;
{Maximum value displayed by progress bar}
property Position: Integer read fPosition write SetPosition;
{Position of progress bar}
end;
implementation
uses
// Delphi
SysUtils,
// Project
UMemoHelper;
{ TMemoProgBarMgr }
constructor TMemoProgBarMgr.Create(const Memo: TMemo);
{Class constructor. Creates object that displays progress bar in a specified
memo.
@param Memo [in] Memo to contain progress bar.
}
begin
Assert(Assigned(Memo), ClassName + '.Create: Memo is nil');
inherited Create;
fMemo := Memo;
end;
destructor TMemoProgBarMgr.Destroy;
{Class destructor. Ensures progress bar is removed from memo control.
}
begin
Hide;
inherited;
end;
procedure TMemoProgBarMgr.Hide;
{Hides progress bar.
}
begin
FreeAndNil(fProgressBar);
end;
procedure TMemoProgBarMgr.SetBounds(const MemoLine: Integer);
{Sets bounds of progress bar to fit after a memo line.
@param MemoLine [in] Index of memo line after which progress bar is
displayed.
}
var
MemoHelper: TMemoHelper; // object providing info about memo control
Top: Integer; // top of progress bar
Left: Integer; // left of progress bar
Width: Integer; // width of progress bar
Height: Integer; // height of progress bar
begin
Assert(Assigned(fProgressBar), ClassName + '.SetBounds: fProgressBar is nil');
MemoHelper := TMemoHelper.Create(fMemo);
try
// Progress bar is placed after end of text on memo line and sized to fit
// between end of line and right of memo control client area
Left := MemoHelper.LineLeft(MemoLine) + MemoHelper.LineWidth(MemoLine);
Top := MemoHelper.LineTop(MemoLine) + 1;
Width := fMemo.ClientWidth - Left - 2;
Height := MemoHelper.LineHeight(MemoLine);
fProgressbar.SetBounds(Left, Top, Width, Height);
finally
FreeAndNil(MemoHelper);
end;
end;
procedure TMemoProgBarMgr.SetMax(const Value: Integer);
{Write accessor for Max property.
@param Value [in] Required property value.
}
begin
fMax := Value;
if Assigned(fProgressBar) then
fProgressBar.Max := fMax;
end;
procedure TMemoProgBarMgr.SetPosition(const Value: Integer);
{Write accessor for Position property.
@param Value [in] Required property value.
}
begin
fPosition := Value;
if Assigned(fProgressBar) then
fProgressBar.Position := fPosition;
end;
procedure TMemoProgBarMgr.Show(const MemoLine: Integer);
{Displays progress bar adjacent to specified line in memo control.
@param MemoLine [in] Index of memo line after which progress bar is
displayed.
}
begin
fProgressBar := TProgressBar.Create(fMemo);
fProgressBar.Parent := fMemo;
fProgressBar.Min := 0;
fProgressBar.Max := fMax;
fProgressBar.Position := fPosition;
fProgressBar.Smooth := True;
SetBounds(MemoLine);
end;
end.
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.