1

(2 відповідей, залишених у Pascal/Delphi)

В OnCreate нічого нема - це найпростіший тест.
Але!
Я банально забув, що DataModule потрібно створювати, як і форму  :D
Зараз все працює

2

(2 відповідей, залишених у Pascal/Delphi)

Вітаю, шановні.

Маю ХЕ7 з набором компонент FireDAC.

Найпростіша тестова прога: кладу на форму FDConnection та необхідні супутні компоненти, прописую параметри, тест з'єднання виконується успішно, скомпільована прога працює. Але коли переношу FDConnection на DataModule, тест в DesignTime виконується, а при запуску проги та спробі коннекту до БД вилітає незрозумілий Access Violation.

Хтось зтикався з цим?

3

(5 відповідей, залишених у Pascal/Delphi)

wolfstarua написав:

Відповідь знайшов сам. При старті програми треба прописати

richedit1.hide:=false;

Оце ось маячня!

Hide - це не властивість, якій можна призначити якесь значення
це взагалі-то МЕТОД

Також можна додати перевірку, щоб не можна було ввести щось на кшталт "000123", але це не критично, оскільки конвертація типів це пропустить

Панове, робимо правильно :)
Далі базовий шаблон для вирішення означених задач щодо вводу "тільки чисел"

procedure TNumEdit.KeyPress(var Key: Char);
begin
  case Key of

    // пропуск дозволених символів
    '0'..'9',#8 {backspace. delete дозволено апріорі, для нього перевірка не потрібна};

    // корекція символа-роздільника. пофіг, що натискати (кома або крапка)
    // дозвіл тільки одного символа.
    // заборона символа на початку строки
    '.',',': if (Pos(FormatSettings.DecimalSeparator,Text) = 0)
             and (SelStart > 0)
             then Key:= FormatSettings.DecimalSeparator else Key:= #0;

    // дозвіл мінуса тільки на початку строки
    '-': if (Pos('-',Text) <> 0) or (SelStart <> 0) then Key:= #0;

    // заборона інших символів
    else Key:= #0;

  end;
end;

Щодо мінуса можна зробити трохи інакше. При вводі мінуса на будь-якій позиції просто пхати йон на початок строки. Але нехай це буде домашнім завданням

Torbins написав:
DenNik написав:
IncludeTrailingPathDelimiter(ParamStr(0))

Тут швидше має бути "ExtractFilePath(ParamStr(0))".

Так, забув

Далі

F: TextFile;

Використовується древній паскалевський метод роботи з файлами, тоді як можна однією строкою

Memo.Lines.SaveToFile(WorkDir + '\FileName.txt');

Я не кажу, що цей метод взагалі не можна використовувати нині. Наприклад, якщо треба вести файловий лог з дозаписом інформації "на льоту" - тоді так (відкрив, записав, закрив).

Як варіант одразу після запуска програми

var
  Form1: TForm;
  WorkDir: string;

...
begin
  WorkDir:= IncludeTrailingPathDelimiter(ParamStr(0)) + 'Фізика';
  ForceDirectories(WorkDir);
end;
...

PROFIT
Працюєш з каталогом WorkDir без GetCurrentDir

Взагалі не раджу активно використовувати Get/SetCurrentDir. У якийсь момент можна забути, що і де змінив (або система змінить активний каталог) - звідти означені помилки. Завжди повні шляхи + ParamStr(0), якщо треба танцювати відносно каталога з програмою. І проблем не буде

https://docwiki.embarcadero.com/Librari … irectories

ForceDirectories('D:\Hello\World')

Перевіряє наявніть вказаного шляху. Якщо відсутній - створює

Панове. А що, на цьому форумі не працює правило "нове питання - нова тема"? А то, дивлюсь, в цю тему понапхали сотню питань - зовсім немає бажання перглядати 22 сторінки, щоб розібратися, що до чого. До того ж, це зручно як для учасників обговорення, так і для майбутніх шукачів відповідей - адже значно легше знайти відповідь за назвою теми. На серйозних форумах модератори слідкують за цим. Наприклад, на cyberforum (це не реклама, я не є представником), де я "сиджу" багато років.