Информация

Последние записи

Теги


Блоги


Записи из всех блогов на Sql.ru с тегом: Delphi


Сортировка TStringDynArray

не забудьте подключить
uses
System.Generics.Collections, System.Generics.Defaults;


procedure Foo;
var
  arrFiles: TStringDynArray;
begin

//получаем список каких-то файлов
  arrFiles := GetListDocs('d:\MyFiles\RootDir');

//сортируем
  TArray.Sort<string>(arrFiles, TStringComparer.Ordinal);

end;
автор: X11 добавлено: 14 авг 20 просмотры: 17825, комментарии: 0



Winsoft OCR EngineMode := emTesseractOnly

В свойствах TOcr есть EngineMode, где можно указать "emTesseractOnly".

Ocr1.EngineMode := emTesseractOnly;

При этом возникает исключение
exception
Project raised exception class EOcrError with message 'Cannot initialize Tesseract library'


Это связано с тем, что используете emTesseractOnly, т.е. при использовании устаревшего движка Tesseract вам необходимо загрузить и использовать данные языка Tesseract из репозитория tessdata:
https://github.com/tesseract-ocr/tessdata

Репозиторий Tessdata также поддерживает механизм LSTM. При использовании только LSTM нейронной сети, вы можете использовать данные языка из tessdata_fast или tessdata_best
https://github.com/tesseract-ocr/tessdata_fast
https://github.com/tesseract-ocr/tessdata_best
автор: X11 добавлено: 27 авг 18 просмотры: 3292, комментарии: 0



cxGrid - Data row fixing

В версии 2017.2.2 появилась возможность закреплять вверху или внизу сетки несколько записей, как программно, так и пользователю с помощью мышки.

За это отвечают несколько свойств:
1. Нужно включить GridView.OptionsCustomize.DataRowFixing, чтобы включить этот функционал.

2. Определить, как будет выглядеть в таблице значок, который будет видеть пользователь GridView.FixedDataRows.PinVisibility (rpvAlways, rpvHotTrack or rpvRowHotTrack), если программист собирается дать пользователю управлять закреплёнными строками:
Картинка с другого сайта.

Чтобы программно управлять закреплёнными строками (row), воспользуйтесь свойством DataController.RowFixedState:
cxGrid1DBTableView1.DataController.RowFixedState[0] := rfsFixedToTop; 


Пример цикла:
procedure TForm1.FixRows2;
Var
 colName: TcxGridDBColumn;
 iCurRow: integer;
 ARowInfo:  TcxRowInfo;
begin
  colName := cxGrid1DBTableView1.GetColumnByFieldName(constMyColNAME);
  if not Assigned(colName) then exit;

  cxGrid1DBTableView1.BeginUpdate;
  try

    for iCurRow := 0 to Pred(cxGrid1DBTableView1.DataController.RowCount) do
    begin
      ARowInfo := cxGrid1DBTableView1.DataController.GetRowInfo(iCurRow);

      if ARowInfo.Level < cxGrid1DBTableView1.DataController.Groups.GroupingItemCount then
        Continue
     else
       begin
         //если есть нужное значение, закрепляем строку
         if cxGrid1DBTableView1.DataController.Values[ARowInfo.RecordIndex, colName.Index] = 'my value 123'
         then
           cxGrid1DBTableView1.DataController.RowFixedState[iCurRow] := rfsFixedToTop;


       end;
    end;// for

  finally
    cxGrid1DBTableView1.EndUpdate;
  end;
end;


Ист:
https://www.devexpress.com/Support/Center/Question/Details/K18187/how-to-fix-a-row
https://www.sql.ru/forum/1296597/cxgrid-fixed-data-rows
автор: X11 добавлено: 25 июн 18 просмотры: 3743, комментарии: 0



Программно открыть или закрыть TcxPopupEdit в TcxVerticalGrid

В cxVerticalGrid может быть строка, где Properties.EditProperties := PopupEdit
Как можно закрыть или открыть программно выпадающее окно.


procedure VerticalGridDropDownRow(vg: TcxVerticalGrid; aRow: TcxEditorRow; aDropedDown: boolean);
Var
  AEdit: TcxPopupEdit;
begin
  vg.SetFocus;
  vg.FocusedRow := aRow;
  vg.ShowEdit;
  if (vg.InplaceEditor <> nil) and (vg.InplaceEditor is TcxPopupEdit) then
  begin
    AEdit := TcxPopupEdit(vg.InplaceEditor);
    AEdit.DroppedDown := False;
  end;
end;


У TcxPopupEditProperties отсутствует метод или свойство, позволяющее открыть/закрыть Popup control.
Popup подразумевает работу только с ним. Нельзя открывать несколько Popup`ов одновременно. При потере фокуса Popup должен закрыться.
автор: X11 добавлено: 25 окт 16 просмотры: 3999, комментарии: 0



Выложен Lazy Delphi Builder 1.14.14.362 и 364 (альфа)

Блог: TDelphi-блог
Выложена версия Lazy Delphi Builder 1.14.14.362. Исправлен Exception при добавлении пути в Lazy Paths. В редакторе IDE search paths исправлены ошибки с подсветкой несуществующих папок. Добавлена новая команда Replace selected with env var (auto) - которая заменяет часть пути на Environment variable (переменные ищутся в Lazy Environment variables и IDE environment variables) Download here Lazy Delphi Builder 1.14.14.364 alpha. обновлён JCL: * исправлена ошибка с некорректным ключом dcc32 -N"Snamespace" * улучшена поддержка версий Delphi XE2+ * другие исправления Эту версию я ещё не тестировал. Если что-то найдёте - дайте знать.

[[ Полный текст записи доступен в TDelphi-блоге]] читать дальше...
автор: debose добавлено: 16 апр 16 просмотры: 2098, комментарии: 0



Lazy Delphi Builder 1.14.14.356 доступен

Блог: TDelphi-блог
В этом блоге, последний раз я выкладывал анонс версии 1.10.9.269 от 2014-03-15. Новые версии продолжали выходить, я о них писал на сайте проекта и на страничке Lazy Delphi Builder в Google+. Пользователям версии 1.10.9.269 от 2014-03-15 настоятельно рекомендую обновиться – была исправлена критическая ошибка приводившая к раздуванию файла LazyDBP и торможению работы. Основные нововведения опишу здесь. За деталями – добро пожаловать в history_en.txt. Большие изменения Добавлена поддержка "portable" инсталляций (нужен только dccXX.exe и папка Lib) Поддержка Delphi XE8-Seattle Добавлен тулбар и горячие клавиши для навигации по build log Интерфейс больше не блокируется на время компиляции (Application.ProcessMessages наше всё) Режим /noop – когда никаких реальных действий с...

[[ Полный текст записи доступен в TDelphi-блоге]] читать дальше...
автор: debose добавлено: 01 апр 16 просмотры: 2005, комментарии: 0



Выложен Lazy Delphi Builder 1.14.14.360 (исправления ошибок)

Блог: TDelphi-блог
01.04.2016. Lazy Delphi Builder 1.14.14.360: Исправления ошибок. Исправлены ошибки с относительными путями. Как для путей в LazyDBP файле так и для переменной $(BUILTIN_PROFILE_DIR) Консольная версия не возвращала ERRORLEVEL если при удалении или создании папки случалась проблема Очень тормозило построение дерева после удаления узла MRU файлы. Последний загруженный отправляется наверх. Наконец-то. Новый параметр командной строки /MaxProblemCountToStop Значение BUILTIN_PROFILE_DIR переменной выводится после загрузки профиля в /debug режиме в консольной версии  Скачивать

[[ Полный текст записи доступен в TDelphi-блоге]] читать дальше...
автор: debose добавлено: 01 апр 16 просмотры: 1765, комментарии: 0





Изменение курсора и автоматическое восстановление при выходе из метода

Блог: TDelphi-блог
Не знаю как у вас, а у меня коде (vcl приложение) полным-полно таких конструкций: var tmpOldCursor: TCursor; begin tmpOldCursor := Screen.Cursor; try Screen.Cursor := crHourglass; // код который может работать относительно долго // например, выполнять запрос в БД finally Screen.Cursor := tmpOldCursor; end; end; И мне это надоело. По двум причинам: увеличение размера модулей - по 8 строк кода на каждый такой случай разбухание секции uses, ведь чтобы это работало нужно в каждый модуль работающий с курсором добавить uses Forms, Controls; Поэтому давайте уже воспользуемся механизмом подсчёта ссылок в интерфейсах, и реализуем маленький класс избавляющий нас написания лишнего кода. Так чтобы вышеприведённый пример можно было упростить до 1й...

[[ Полный текст записи доступен в TDelphi-блоге]] читать дальше...
автор: debose добавлено: 21 сен 15 просмотры: 2051, комментарии: 0



TcxTreeList - цикл по выделенным узлам

Как пройтись циклом по выделенным узлам TcxDBTreeList?


var
  I, d: Integer;
begin
  for I := 0 to pred(dbTree.SelectionCount) do
    d := TcxDBTreeListNode(dbTree.Selections[i]).KeyValue;


procedure TForm1.Button1Click(Sender: TObject);
var
  ANode: TcxTreeListNode;
begin
  cxTreeList1.BeginUpdate;
  ANode := cxTreeList1.Root.getFirstChild;
  while ANode <> nil do
  begin
    if ANode.Values[cxTreeList1Column1.ItemIndex] = 'Value 2' then
      ANode.Values[cxTreeList1Column2.ItemIndex] := 'Value 5';

    ANode := ANode.GetNext;
  end;
  cxTreeList1.EndUpdate;
end;
автор: X11 добавлено: 07 май 15 просмотры: 3073, комментарии: 1


предыдущие записи