Wyliczanie zmiennej typu Int64 po kliknięciu w progresbar

0

Jest taki problem

procedure TfmNagrania.pbPercentMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  newPosition: Int64;
begin
  inherited;
  newPosition := Round(x * pbPercent.Max / pbPercent.ClientWidth);
  imePlay.IO.DShowParams.Position := newPosition;
end; 

X = 237
pbPercent.Max = 253130000
pbPercent.ClientWidth = 952

Z matematycznego punktu widzenia newPosition powinna posiadać wartość: 63016607
Natomiast w delphi zmienna newPosition przybiera wartość: -144677

Przez co pozycja wraca na 0 przy każdym kliknięciu w progressbara. Czy możecie coś podpowiedzieć?

1

Na Delphi się nie znam, ale podejrzewam overflow. Zastanów się czy dobrze dobrałeś rozmiar zmiennej. Masz tam jakiś debugger?

0

Spróbuj

newPosition := Round(x * Int64(pbPercent.Max) / pbPercent.ClientWidth);
0

Napisałem szybciej niż pomyślałem ... poniżej działające rozwiązanie:

procedure TfmNagrania.pbPercentMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  newPosition: integer;
  vmax: Int64;
begin
  inherited;
  vMax := pbPercent.Max div 100000;
  newPosition := Round(x * vMax / pbPercent.ClientWidth);
  imePlay.IO.DShowParams.Position := newPosition * 100000;
end; 

1 użytkowników online, w tym zalogowanych: 0, gości: 1