procedure DeleteXMPSidecarFor(AImage: TImageItem); var AXmp: TXMP; ASidecar: WideString; begin ASidecar := WideChangeFileExt(AImage.FileName, '.xmp'); if WideFileExists(ASidecar) then WideDeleteFile(ASidecar); ASidecar := AImage.FileName + '.xmp'; if WideFileExists(ASidecar) then WideDeleteFile(ASidecar); end; var i: Integer; AList: TStringList; AImage: TImageItem; ASidecar: WideString; APro: TxomProgress; begin if Selected.Count = 0 then begin Say2('No images selected.', 'Select one or more thumbnails and try again.'); exit; end; AList := TStringList.Create; for i := 0 to Selected.Count - 1 do begin AImage := Selected.Items[i]; AGo := False; ASidecar := WideChangeFileExt(AImage.FileName, '.xmp'); if WideFileExists(ASidecar) then AList.AddObject(AImage.FileName, AImage) else begin ASidecar := AImage.FileName + '.xmp'; if WideFileExists(ASidecar) then AList.AddObject(AImage.FileName, AImage) end; end; if AList.Count > 0 then begin if AskYN('There are ' + IntToStr(AList.Count) + ' images found in your selection that have XMP sidecar files.' + CrLf2 + 'Do you want to delete these XMP files from the file system?' + CrLf2 + 'WARNING: This cannot be undone.') then begin APro := TxomProgress.Create(nil); APro.Caption := 'Delete sidecar XMP file'; APro.Max := AList.Count; for i := 0 to AList.Count - 1 do begin AImage := AList.Objects[i]; APro.Pos := i + 1; APro.ProgressText := AImage.FileNameOnly; if APro.Cancel then break; DeleteXMPSidecarFor(AImage); end; APro.Free; end; end else Say('No sidecar XMP files found.'); AList.Free; end;