Ответы пользователя по тегу Delphi
  • Как установить класс в Delphi RAD studio 12?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Ответ написан
    Комментировать
  • Как создать программу, которая работала онлайн как сайт?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Старую никак. Переписывать на делфи фреймворк, который как раз создаёт веб приложения
    Ответ написан
    Комментировать
  • Как сделать чтобы данные в DBGrid фильтровались через несколько Edit по разным столбцам таблицы грида?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Фильтровать данные нужно на уровне датасета, а не грида. У датасета есть поле Filter, которое соответствует WHERE в SQL. Вот и составляй фильтр как буд-то пишешь WHERE для запроса.
    Для обоих Edit обработай событие OnChange в котором будет вызывать метод обновления фильтра. А метод обновления фильтра бурет значение из обоих фильтров и меняет свойство Filter у датасета.

    Хех. GPT почти слово в слово ответил)
    Для реализации фильтрации данных в DBGrid через несколько Edit по разным столбцам таблицы грида необходимо использовать событие OnChange каждого Edit и применять фильтры для каждого столбца, основываясь на значениях всех Edit.

    Вот пример, демонстрирующий, как это можно сделать:
    1. Создайте несколько компонентов TEdit и установите им соответствующие имена, например, Edit1, Edit2 и Edit3.
    2. Добавьте компонент TDBGrid на форму и установите его свойство DataSource на соответствующий источник данных, например, TDataSource.
    3. Привяжите каждый компонент TEdit к событию OnChange и вызовите процедуру фильтрации:

    procedure TForm1.Edit1Change(Sender: TObject);
    begin
      ApplyFilters;
    end;
    
    procedure TForm1.Edit2Change(Sender: TObject);
    begin
      ApplyFilters;
    end;
    
    procedure TForm1.Edit3Change(Sender: TObject);
    begin
      ApplyFilters;
    end;
    
    procedure TForm1.ApplyFilters;
    var
      FilterString: string;
    begin
      // Создаем строку фильтрации на основе значений всех Edit
      FilterString := '';
      if Edit1.Text <> '' then
        FilterString := 'Column1 LIKE ''%' + Edit1.Text + '%''';
      
      if Edit2.Text <> '' then
      begin
        if FilterString <> '' then
          FilterString := FilterString + ' AND ';
        
        FilterString := FilterString + 'Column2 LIKE ''%' + Edit2.Text + '%''';
      end;
      
      if Edit3.Text <> '' then
      begin
        if FilterString <> '' then
          FilterString := FilterString + ' AND ';
        
        FilterString := FilterString + 'Column3 LIKE ''%' + Edit3.Text + '%''';
      end;
      
      // Применяем фильтр
      TDBGrid.DataSource.DataSet.Filter := FilterString;
      TDBGrid.DataSource.DataSet.Filtered := FilterString <> '';
    end;


    Обратите внимание, что в данном примере мы предполагаем, что таблица имеет три столбца (Column1, Column2 и Column3), которые должны фильтроваться с помощью соответствующих Edit (Edit1, Edit2 и Edit3). Вы можете изменить код в соответствии с вашей конкретной структурой таблицы и компонентов.
    Ответ написан
  • Как обработать событие onClick кнопки, которая находится внутри другого компонента?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    В свойство ControlStyle у кнопки нужно добавить значение csClickEvents.
    newButton.ControlStyle := newButton.ControlStyle + [csClickEvents];
    Ответ написан
    Комментировать
  • Как решить эту ошибку?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    В кавычках попробуй путь указать
    Ответ написан
    Комментировать
  • Как запустить программу на другом пк?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Ну очевидно библиотеки не хватает. Если на основном ПК программа работает, найди либу и таскай с программой
    Ответ написан
    Комментировать
  • Можно писать код, чтобы сразу он запускался при запуске программы?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Десятки способов. Самый простой, взять событие на создание формы. Нажми на форму и слева, в событиях нажми два раза на FormCreate. Код в этом событии выполнится в момент создания окна.
    Ответ написан
    Комментировать
  • Как установить в среде Borland Delphi 7 стиль Windows?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    На самом деле так же. Добавить манифест. Но исходников у тебя нет, по этому нужно добавлять через редактор ресурсов. Манифес - это просто приписка к исполнительному файлу, чтоб винда поняла в каком режиме запускать программу. Но не будем об этом.
    Твою задачу легче всего решить с помощью редактора "Restorator".
    Запускаешь редактор, выбираешь файл delphi7.exe и достаточно нажать кнопку Tools -> Create XP Manifest ...
    spoiler
    2018-06-14-08-52-163.png
    Потом сохранить файл. Редактор создает бэкап файла, так что можно поразвлекаться без проблем. Например, исправить везде шрифты на Segoe UI.
    Ответ написан
  • Как добавить encoding в XML в Delphi?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    LDocument.Encoding := 'WINDOWS-1251';
    Потому что эта строка меняет только текст в заголовке xml, поле. (док)
    Ответ написан
  • Как добавить TCheckBox в Header TStringGrid (FMX)?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Просто помести его поверх грида
    Ответ написан
  • Как установить Devexpress компоненты для RAD Studio Delphi XE8?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Component - > Install Package -> Add
    Выбираешь bpl
    Ответ написан
  • Почему в буфер вставляется только первый символ?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Используй стандартный модуль clipbrd. Там в одну строку поместишь текст в буфер
    uses Clipbrd;
    
    Clipboard.AsText := 'text';
    Ответ написан
  • Почему не строится график?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    код
    uses Math, System.Types;
    
    procedure TForm4.FormCreate(Sender: TObject);
    begin
      Arr := [
        TPointF.Create(10, 150),
        TPointF.Create(5, 50),
        TPointF.Create(150, 50),
        TPointF.Create(140, 140),
        TPointF.Create(150, 50),
        TPointF.Create(150, 50),
        TPointF.Create(150, 50)
        ];
    end;
    
    function TForm4.Fuctorial(n: Integer): Integer; // Функция вычисления факториала
    begin
      var res := 1;
      for var i := 1 to n do
        res := res * i;
      Result := res;
    end;
    
    function TForm4.polinom(i, n: integer; t: Single): Single; // Функция вычисления полинома Бернштейна
    begin
      Result := (Fuctorial(n) / (Fuctorial(i) * Fuctorial(n - i))) * Math.Power(t, i) * Math.Power(1 - t, n - i);
    end;
    
    procedure TForm4.Draw();// Функция рисования кривой
    begin
      var j := 0;
      var step := 0.01; // Возьмем шаг 0.01 для большей точности
    
      var res: TArray<TPoint>;
      SetLength(res, 101); //Конечный массив точек кривой
    
      var t: Single := 0;
      while t < 1 do
      begin
        t := t + step;
        var ytmp := 0.0;
        var xtmp := 0.0;
        for var i := 0 to High(Arr) do
        begin // проходим по каждой точке
          var b := polinom(i, Length(Arr) - 1, t); // вычисляем наш полином Бернштейна
          xtmp := xtmp + Arr[i].X * b; // записываем и прибавляем результат
          ytmp := ytmp + Arr[i].Y * b;
        end;
        res[j] := TPoint.Create(Round(xtmp), Round(ytmp));
        Inc(j);
      end;
    
      for var i := 0 to High(res) - 1 do
      begin
        Canvas.MoveTo(res[i].X, res[i].Y);
        Canvas.LineTo(res[i + 1].X, res[i + 1].Y); // Рисуем полученную кривую Безье
      end;
    end;
    
    procedure TForm4.FormPaint(Sender: TObject);
    begin
      Draw;
    end;


    637f97cd8d0c7133132952.png

    стандартный проект vcl со сглаживанием (меняется только процедура Draw())

    uses Direct2D, Winapi.D2D1;
    
    procedure TForm4.Draw();// Функция рисования кривой
    begin
      var j := 0;
      var step := 0.01; // Возьмем шаг 0.01 для большей точности
    
      var res: TArray<TD2DPoint2f>;
      SetLength(res, 101); //Конечный массив точек кривой
    
      var t: Single := 0;
      while t < 1 do
      begin
        t := t + step;
        var ytmp := 0.0;
        var xtmp := 0.0;
        for var i := 0 to High(Arr) do
        begin // проходим по каждой точке
          var b := polinom(i, Length(Arr) - 1, t); // вычисляем наш полином Бернштейна
          xtmp := xtmp + Arr[i].X * b; // записываем и прибавляем результат
          ytmp := ytmp + Arr[i].Y * b;
        end;
        res[j].x := xtmp;
        res[j].y := ytmp;
        Inc(j);
      end;
      with TDirect2DCanvas.Create(Canvas, ClientRect) do
      try
        BeginDraw;
        for var i := 0 to High(res) - 1 do
          DrawLine(res[i], res[i+1]);
        EndDraw;
      finally
        Free;
      end;
    end;



    637f9ce29d069377716122.png

    вот на FMX со сглаживанием (меняется только немного процедура Draw()
    код

    procedure TForm4.Draw();// Функция рисования кривой
    begin
      var j := 0;
      var step := 0.01; // Возьмем шаг 0.01 для большей точности
    
      var res: TArray<TPointF>;
      SetLength(res, 101); //Конечный массив точек кривой
    
      var t: Single := 0;
      while t < 1 do
      begin
        t := t + step;
        var ytmp := 0.0;
        var xtmp := 0.0;
        for var i := 0 to High(Arr) do
        begin // проходим по каждой точке
          var b := polinom(i, Length(Arr) - 1, t); // вычисляем наш полином Бернштейна
          xtmp := xtmp + Arr[i].X * b; // записываем и прибавляем результат
          ytmp := ytmp + Arr[i].Y * b;
        end;
        res[j] := TPointF.Create(xtmp, ytmp);
        Inc(j);
      end;
      Canvas.BeginScene;
      Canvas.Stroke.Kind := TBrushKind.Solid;
      Canvas.Stroke.Color := TAlphaColorRec.Red;
      for var i := 0 to High(res) - 1 do
      begin
        Canvas.DrawLine(res[i], res[i+1], 1); // Рисуем полученную кривую Безье
      end;
      Canvas.EndScene;
    end;


    637f99ead5c4a101937108.png
    под андроид
    637f9b25c8d6a912753313.jpeg
    Ответ написан
    5 комментариев
  • Как подсчитать количество строк в текстовом файле?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Приведенный код не понятно для чего, а подсчитать строки можно так (если их не много)

    var LinesCount: Integer;
    var List: TStringList;
    try
      List.LoadFromFile('filename.txt');
      LinesCount := List.Count;
    finally
      List.Free;
    end;
    writeln(LinesCount);


    или так

    writeln(Length(TFile.ReadAllLines('filename.txt')))


    или так (можно для большого файла, если длина одной строки не огромная)

    var LinesCount := 0;
    with TFile.OpenText('filename.text') do
    try
      while not EndOfStream do begin ReadLine; Inc(LinesCount); end;
    finally
      Free;
    end;
    Writeln(LinesCount);
    Ответ написан
    Комментировать
  • Почему Delphi выдаёт эту ошибку?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Ты добавь серию данных через дизайнер (судя по всему две серии), а потом уже добавляй в них точки
    Ответ написан
    2 комментария
  • Какой ассемблер используется в Delphi?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    3 комментария
  • Как вставить cookies из Chromium в idhttp (DELPHI)?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Забери сначала cookies из Chromium, а потом через idHTTP.CookieManager.Add... добавляешь все поочереди
    Ответ написан
  • Стоит ли GUI на Delphi, DLL на Си?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Сделать такое можно и работать будет достаточно стабильно. Сложности только в постоянных пробросах данных между длл и хостом. Сделать можно на интерфейсах, но всё равно чем дальше, тем больше будет интерфейсов на каждый чих.

    Всё же, может вопрос чуть глубже поставить? Зачем вообще тогда нужен Си? Скорость работы программы на Делфи почти не уступает Си, а само написание кода куда проще и удобнее.
    Ответ написан
    Комментировать
  • Как создать еще одно окно firemonkey delphi?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    1. Используй свежую версию среды (она бесплатная на оф. сайте)
    2. Чтоб добавить окно, не нужно создавать новый проект
    62ecf053ebc8e795103763.png
    Ответ написан
    3 комментария
  • Как компилировать через make?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Автоматизированная сборка Delphi-приложения https://habr.com/ru/post/489960/
    Ответ написан
    Комментировать