// fix for high res screens
var
  FPrefixEdit  : TvxTextBox;
  FSequenceEdit: TvxTextBox;

  procedure btnGetValClick(Sender: TObject);
  var
    ALastVal:   Integer;
    APrefix:    WideString;
  begin
    APrefix := Trim(FPrefixEdit.Text);
    if (APrefix = '') then
       Say('Error - Please enter a file prefix.');
    else
    begin
      ALastVal := ReadFromRegistry ('dlByPrefixLastVals', APrefix, 0);
      Inc(ALastVal);
      FSequenceEdit.Text := IntToStr(ALastVal);
    end;
  end;

  procedure PrefixEditChange(Sender: TObject);
  begin
    if FPrefixEdit.Text <> '' then
      btnGetValClick(Sender)
    else
      FSequenceEdit.Text := '';
  end;

  function BuildForm: TvxSceneForm;
  var
    ALabel: TvxLabel;
  begin
    result := TvxSceneForm.Create(nil);
    result.Caption := 'Download by Prefix - v0.21';
    result.Width := 360 * result.DPIFactor;
    result.Height := 150  * result.DPIFactor;

    ALabel := TvxLabel.Create(result);
    ALabel.TextAlign := vgTextAlignNear;
    ALabel.Width := 200;
    ALabel.Position.Point := vgPoint(20, 24);
    ALabel.Text := '1. Enter prefix for downloaded files';
    result.Root.AddObject(ALabel);

    FPrefixEdit := TvxTextBox.Create(result);
    FPrefixEdit.Width := 120;
    FPrefixEdit.Position.Point := vgPoint(210, 20);
    FPrefixEdit.Text := ReadFromRegistry ('dlByPrefixCurrent', 'prefix', '');
    FPrefixEdit.OnTyping := 'PrefixEditChange';

    result.Root.AddObject(FPrefixEdit);

    ALabel := TvxLabel.Create(result);
    ALabel.TextAlign := vgTextAlignNear;
    ALabel.Width := 200;
    ALabel.Position.Point := vgPoint(20, 64);
    ALabel.Text := '2. Edit sequence number if needed';
    result.Root.AddObject(ALabel);

    FSequenceEdit := TvxTextBox.Create(result);
    FSequenceEdit.Width := 120;
    FSequenceEdit.Position.Point := vgPoint(210, 60);
    result.Root.AddObject(FSequenceEdit);

    result.PrepareModal([mbOk, mbCancel]);

    PrefixEditChange(nil);
  end;

  procedure StartAction;
  var
    ALastVal: Integer;
    APrefix:  WideString;
    AValStr:  WideString;
    AValue:   Integer;
  begin
    APrefix := Trim(FPrefixEdit.Text);
    if (APrefix = '') then
    begin
      Say('Error - Please enter a file prefix.');
      Exit;
    end;

    AValStr := Trim(FSequenceEdit.Text);
    if (AValStr = '') then
    begin
      Say('Error - please enter a starting value');
      Exit;
    end;

    AValue := StrToInt(AValStr) - 1;

    // update the current* registry keys, so the renaming script can find them
    WriteToRegistry ('dlByPrefixLastVals', APrefix, AValue);
    WriteToRegistry ('dlByPrefixCurrent', 'prefix', APrefix);
    WriteToRegistry ('dlByPrefixCurrent', 'value', AValue);
    WriteToRegistry ('dlByPrefixCurrent', 'filename', '');
  end;

var
  AForm: TvxSceneForm;
begin
  AForm := BuildForm;
  AForm.ShowModal;

  if AForm.ModalResult = mrOk then
    StartAction;

  AForm.Free;
end;
