В данном посте добавим к документу файл, в качестве ссылки. Выглядеть это будет следующим образом
При открытии гиперссылки будет открываться файл
Сам алгоритм и его реализация будут выглядеть следующим образом
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
procedure TMainForm.bAddFileClick(Sender: TObject); var DirectoryToCopyAttachedFile: string; DestName: string; Splitted: TArray<string>; Joined: string; HyperlinkName: string; begin //Открыть диалог //Проверить существует ли директория files/ attached/ //Скопировать туда файл if OpenDialog.Execute then begin //Пишем директорию DirectoryToCopyAttachedFile:=ExtractFileDir(Application.ExeName); DirectoryToCopyAttachedFile:=DirectoryToCopyAttachedFile+'\files\attached\'; //Создаем, если нужно CreateDirectoryIfNeed(DirectoryToCopyAttachedFile); //Копируем файл в нашу директорию, в папку files/attached try DestName:=DirectoryToCopyAttachedFile+ExtractFileName(OpenDialog.FileName); // Если файла там не существует, тогда копируем его туда и добавляем ссылку на файл if not TFile.Exists(DestName) then begin TFile.Copy(OpenDialog.FileName,DestName); HyperlinkName:=ExtractFileName(OpenDialog.FileName); RichViewEdit1.CurTextStyleNo:=5; RichViewEdit1.InsertStringTag(HyperlinkName,DestName ); end else begin if MessageDlg('File Already Exists. Copy anyway with new name?',mtInformation,[mbYes,mbNo],0)=mrYes then begin //Добавлям к имени файла рандомный символ, Splitted:=DestName.Split(['.'],2); Splitted[0]:=Splitted[0]+Random(10000).ToString; Joined:=Joined.Join('.',[Splitted[0],Splitted[1]]); //Меняем имя DestName:=Joined; TFile.Copy(OpenDialog.FileName,DestName); HyperlinkName:=ExtractFileName(OpenDialog.FileName); RichViewEdit1.CurTextStyleNo:=5; RichViewEdit1.InsertStringTag(HyperlinkName,DestName ); end; end; except on E:Exception do raise Exception.Create(E.ClassName+' поднята ошибка, с сообщением : '+E.Message); end; // end; end; |
Проверяем работу