qt: fix few TrackBar issues (, )

git-svn-id: trunk@15443 -
This commit is contained in:
paul 2008-06-17 01:58:28 +00:00
parent 1d22108b2f
commit 4e53453599
3 changed files with 51 additions and 29 deletions

View File

@ -57,7 +57,7 @@ constructor TCustomTrackBar.Create (AOwner : TComponent);
begin
inherited Create (aOwner);
fCompStyle := csTrackbar;
Caption := 'TrackBar';
ControlStyle := ControlStyle - [csCaptureMouse];
FLineSize := 1;
FMax := 10;
FMin := 0;
@ -67,9 +67,9 @@ begin
FOrientation := trHorizontal;
FScalePos := trTop;
FScaleDigits := 0;
FTickMarks:=tmBottomRight;
FTickStyle:=tsAuto;
TabStop := true;
FTickMarks := tmBottomRight;
FTickStyle := tsAuto;
TabStop := True;
SetInitialBounds(0,0,GetControlClassDefaultSize.X,GetControlClassDefaultSize.Y);
end;
@ -193,7 +193,7 @@ end;
------------------------------------------------------------------------------}
procedure TCustomTrackBar.SetMax(Value: Integer);
begin
if FMax<>Value then SetParams(FPosition,FMin,Value);
if FMax <> Value then SetParams(FPosition,FMin,Value);
end;
{------------------------------------------------------------------------------
@ -293,8 +293,8 @@ end;
------------------------------------------------------------------------------}
procedure TCustomTrackBar.ApplyChanges;
begin
if HandleAllocated and (not (csLoading in ComponentState))
then TWSTrackBarClass(WidgetSetClass).ApplyChanges(Self);
if HandleAllocated and (not (csLoading in ComponentState)) then
TWSTrackBarClass(WidgetSetClass).ApplyChanges(Self);
end;
{------------------------------------------------------------------------------

View File

@ -510,6 +510,7 @@ type
TQtTrackBar = class(TQtAbstractSlider)
private
FInUpdate: Boolean;
protected
function CreateWidget(const AParams: TCreateParams):QWidgetH; override;
public
@ -522,6 +523,9 @@ type
procedure SlotSliderMoved(p1: Integer); cdecl; override;
procedure SlotValueChanged(p1: Integer); cdecl; override;
procedure SlotRangeChanged(minimum: Integer; maximum: Integer); cdecl; override;
procedure BeginUpdate;
procedure EndUpdate;
function InUpdate: Boolean; inline;
end;
{ TQtLineEdit }
@ -4560,6 +4564,7 @@ begin
{$ifdef VerboseQt}
WriteLn('TQtTrackBar.Create');
{$endif}
FInUpdate := False;
Result := QSlider_create();
end;
@ -4617,14 +4622,11 @@ begin
{$ifdef VerboseQt}
writeln('TQtTrackBar.SlotSliderMoved()');
{$endif}
FillChar(Msg, SizeOf(Msg), #0);
Msg.Msg := LM_CHANGED;
try
if (TTrackBar(LCLObject).Position<>p1) then
LCLObject.WindowProc(Msg);
except
Application.HandleException(nil);
if (TTrackBar(LCLObject).Position <> p1) and not InUpdate then
begin
FillChar(Msg, SizeOf(Msg), #0);
Msg.Msg := LM_CHANGED;
DeliverMessage(Msg);
end;
end;
@ -4636,14 +4638,11 @@ begin
writeln('TQtTrackBar.SlotValueChanged()');
{$endif}
FillChar(Msg, SizeOf(Msg), #0);
Msg.Msg := LM_CHANGED;
try
if not SliderPressed and (TTrackBar(LCLObject).Position<>p1) then
LCLObject.WindowProc(Msg);
except
Application.HandleException(nil);
if not SliderPressed and (TTrackBar(LCLObject).Position <> p1) and not InUpdate then
begin
FillChar(Msg, SizeOf(Msg), #0);
Msg.Msg := LM_CHANGED;
DeliverMessage(Msg);
end;
end;
@ -4654,10 +4653,28 @@ begin
{$ifdef VerboseQt}
writeln('TQtTrackBar.SlotRangeChanged()');
{$endif}
FillChar(Msg, SizeOf(Msg), #0);
if not InUpdate then
begin
FillChar(Msg, SizeOf(Msg), #0);
Msg.Msg := LM_CHANGED;
DeliverMessage(Msg);
Msg.Msg := LM_CHANGED;
DeliverMessage(Msg);
end;
end;
procedure TQtTrackBar.BeginUpdate;
begin
FInUpdate := True;
end;
procedure TQtTrackBar.EndUpdate;
begin
FInUpdate := False;
end;
function TQtTrackBar.InUpdate: Boolean;
begin
Result := FInUpdate;
end;

View File

@ -246,9 +246,9 @@ implementation
const
TickMarkToQtSliderTickPositionMap: array[TTickMark] of QSliderTickPosition =
(
{tmBoth } QSliderTicksBothSides,
{tmBottomRight} QSliderTicksBelow,
{tmTopLeft } QSliderTicksAbove,
{tmBottomRight} QSliderTicksBelow
{tmBoth } QSliderTicksBothSides
);
TrackBarOrientationToQtOrientationMap: array[TTrackBarOrientation] of QtOrientation =
@ -358,10 +358,14 @@ var
QtTrackBar: TQtTrackBar;
begin
QtTrackBar := TQtTrackBar(ATrackBar.Handle);
QtTrackBar.BeginUpdate;
QtTrackBar.setRange(ATrackBar.Min, ATrackBar.Max);
QtTrackBar.SetTickPosition(TickMarkToQtSliderTickPositionMap[ATrackBar.TickMarks]);
if ATrackBar.TickStyle = tsNone then
QtTrackBar.SetTickPosition(QSliderNoTicks)
else
QtTrackBar.SetTickPosition(TickMarkToQtSliderTickPositionMap[ATrackBar.TickMarks]);
if QtTrackBar.getPageStep <> ATrackBar.PageSize then
QtTrackBar.setPageStep(ATrackBar.PageSize);
@ -378,6 +382,7 @@ begin
QtTrackBar.setInvertedControls(False);
QtTrackBar.Show;
end;
QtTrackBar.EndUpdate;
end;
class function TQtWSTrackBar.GetPosition(const ATrackBar: TCustomTrackBar): integer;