peiman F.
peiman F.

Reputation: 1658

Delphi TTrackBar doesn't have on complete event

Delphi TTrackBar has two event for tracking changes:

  1. OnChange

  2. OnTracking

But both of them do the same thing. For example:

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  ShowMessage(TrackBar1.Value.ToString);
end;

On any small change it shows 10 message.

How can I detect last change on mobile phones? Change must happens after all tracking?

Upvotes: 1

Views: 790

Answers (1)

Jerry Dodge
Jerry Dodge

Reputation: 27276

Those two events only do the same thing when Tracking is enabled (by default). Disabling the Tracking will make it so that OnChange is only fired after user is finished.

Here's a brief demo to show what I mean:

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.Controls.Presentation;

type
  TForm1 = class(TForm)
    TrackBar1: TTrackBar;
    lblChange: TLabel;
    lblTrack: TLabel;
    procedure TrackBar1Change(Sender: TObject);
    procedure TrackBar1Tracking(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    FChangeCount: Integer;
    FTrackCount: Integer;
  public
    procedure DoUpdate;
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.DoUpdate;
begin
  lblChange.Text:= 'Changes:  '+IntToStr(FChangeCount);
  lblTrack.Text:= 'Tracking: '+IntToStr(FTrackCount);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FChangeCount:= 0;
  FTrackCount:= 0;
  DoUpdate;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  Inc(FChangeCount);
  DoUpdate;
end;

procedure TForm1.TrackBar1Tracking(Sender: TObject);
begin
  Inc(FTrackCount);
  DoUpdate;
end;

end.

And then the FMX file:

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 480
  ClientWidth = 640
  FormFactor.Width = 320
  FormFactor.Height = 480
  FormFactor.Devices = [Desktop]
  OnCreate = FormCreate
  DesignerMasterStyle = 0
  object TrackBar1: TTrackBar
    CanParentFocus = True
    Orientation = Horizontal
    Position.X = 112.000000000000000000
    Position.Y = 96.000000000000000000
    Size.Width = 217.000000000000000000
    Size.Height = 19.000000000000000000
    Size.PlatformDefault = False
    TabOrder = 0
    Tracking = False
    OnChange = TrackBar1Change
    OnTracking = TrackBar1Tracking
  end
  object lblChange: TLabel
    Position.X = 112.000000000000000000
    Position.Y = 152.000000000000000000
    Text = 'lblChange'
  end
  object lblTrack: TLabel
    Position.X = 112.000000000000000000
    Position.Y = 200.000000000000000000
    Text = 'lblTrack'
  end
end

Upvotes: 5

Related Questions