Обрезанный Caption в меню

Здравствуйте.
Динамически добавляю пункты в меню, но надпись в первом пункте всегда обрезана. Хотя, если идти дебаггером, то видно, что в Caption первого пункта меню содержится полная строка.
Почему он ее обрезает и как сделать, чтобы не обрезал?

function TYouTubeVideo.GetDisplayString;
begin
  if Pos('audio', MimeType) > 0 then
  Result := IntToStr(Tag) + ', audio, '+ FileExtension + ', ' +
    MimeType + ', ' + DivSize(File_Size) + ', 12345678901234567890' else
  Result := IntToStr(Tag) + ', video, ' +
   IntToStr(Width) + 'x' + IntToStr(Height) + ', ' + FileExtension + ', ' +
   QualityLabel + ', ' + MimeType + ', ' + '12345678901234567890';
end;

procedure TYouTubeFrameVideo.ThreadGetInfoTerminate(Sender: TObject);
var
  thr : TThreadGetInfo;
  i, n : Integer;
  pt : TPoint;
  MenuItem : TMenuItem;
begin
  thr := sender as TThreadGetInfo;

  PopupMenuDownloads.Items.Clear;

  for I := 0 to Length(VideoFormats) - 1 do
  VideoFormats[i].Destroy;
  SetLength(VideoFormats, 0);
  for I := 0 to Length(AudioFormats) - 1 do
  AudioFormats[i].Destroy;
  SetLength(AudioFormats, 0);

  for I := 0 to Length(thr.fInfoVideo) - 1 do
  begin
    n := Length(VideoFormats);
    SetLength(VideoFormats, n + 1);
    VideoFormats[n] := thr.fInfoVideo[i];
    MenuItem := TMenuItem.Create(nil);
    MenuItem.Caption := thr.fInfoVideo[i].GetDisplayString;
    MenuItem.Tag := i;
    MenuItem.GroupIndex := Byte(GROUP_VIDEO);
    MenuItem.OnClick := MenuItemDownloadClick;
    PopupMenuDownloads.Items.Add(MenuItem);
  end;

  if Length(thr.fInfoAudio) > 0 then
  begin
    MenuItem := TMenuItem.Create(nil);
    MenuItem.Caption := '-';
    PopupMenuDownloads.Items.Add(MenuItem);
    SetLength(AudioFormats, length(thr.fInfoAudio));
    for I := 0 to Length(thr.fInfoAudio) - 1 do
    begin
      AudioFormats[i] := thr.fInfoAudio[i];
      MenuItem := TMenuItem.Create(nil);
      MenuItem.Caption := thr.fInfoAudio[i].GetDisplayString;
      MenuItem.Tag := i;
      MenuItem.GroupIndex := Byte(GROUP_AUDIO);
      MenuItem.OnClick := MenuItemDownloadClick;
      PopupMenuDownloads.Items.Add(MenuItem);
    end;
  end;

  pt := btnDownload.ClientToScreen(TPoint.Create(btnDownload.Width,0));
  btnDownload.Enabled := True;
  PopupMenuDownloads.Popup(pt.X, pt.Y);
end;

Раз тут упомянут TThread, может тут что-то не так с синхронизацией?
Хотя если это в OnTerminate, то он выполняется в основном потоке.

Если после этого продолжить нормальное выполнение, то так же будет отображаться?

Если в дебаггере посмотреть на Caption - всё нормально. После продолжения выполнения - обрезается. Без дебаггера тоже обрезается.
Хотя вот сейчас уже вроде нормально стало. Чё за приколы? Я код не менял.

При неправильной работе с потоками бывает такое.
Поэтому лучше не брать Дельфи и С++ без необходимости, во всяких СиШарпах сложнее наткнуться на подобное :kolobokbatya:

Ну или какая-нибудь хитрая ошибка в другом месте кода.

например?

почему всегда исключается вероятность глюка или ошибки в самой среде?

Обращение к компонентам формы не из основного потока/без Synchronize.

Бывает, но редко. И если не самая новая версия, то скорее всего кто-то бы уже нашел и гуглилось бы.

такого точно нет

а как доказать что ошибка в вашем коде, а не глюк?

Исходники VCL доступны в Дельфи (может быть кроме самого дешевого издания) и отладчик по идее должен знать о них.

Сложнее если баг в компиляторе или библиотеках винды.
Для первого можно изучать дизасм своей программы.
Для второго — можно просто проверить, что функция вызывающая проблемы ведет себя не так, как описано в документации. Либо тоже пробовать смотреть дизасм библиотеки.

Еще баги могут быть в драйверах, железе/прошивках/биосе, и мониторе (например) :slight_smile:

Сейчас написал на си-шарпе

string t = ",ktr5jy";
Clipboard.SetText(t);

и при первом же запуске получил экскепшеном по морде :frowning:
Си-Шарпу я не нравлюсь. Это потому что я чёрный.

Так зато сразу понятный экзепшн, а не непонятно что позже )