• Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;


  • Иллюстрированный самоучитель по Turbo Pascal

    Программирование диалоговых запросов

    Первый оператор инициирует новый экземпляр объекта TFileDialog. Три строковых параметра обращения к конструктору Init этого объекта задают, соответственно, маску выбираемых файлов ('*.dat'), заголовок диалогового окна ('Выберите нужный файл:') и заголовок окна ввода ('Имя файла'). Параметр fdOpenButton указывает на необходимость включить в диалоговое окно кнопку Open. Последним параметром задается идентификатор протокола ввода. Доступ к этому протоколу открывается кнопкой [|] справа от окна ввода. Сам протокол хранится в куче в виде последовательности вводившихся ранее текстовых строк. Идентификатор протокола ввода позволяет при необходимости использовать один и тот же протокол в разных диалоговых окнах.

    Второй оператор:

    Control: = DeskTop.ExecView(PF);
    

    Помещает вновь созданное окно в основное поле экрана программы (ссылка DeskTop) и инициирует диалог с пользователем. Результат диалога возвращается в переменной Control, значение этой переменной анализируется оператором:

    case Control of
    …….
    end;
    

    Если Control содержит коды команд cmOk или cmFileOpen, то с помощью метода GetFileName объекта TFileDialog в переменную S записывается полное имя файла (с предшествующим путем).

    В методе TFileDialog.GetFileName (var Name: Pathstr) параметр обращения должен иметь тип PathStr. Этот тип определен в модуле DOS, – вот почему нам понадобилось сослаться на этот модуль в предложении Uses. Если указать компилятору на необходимость смягчить проверку строковых типов (директива компилятора {$V-}), то при обращении к GetFileName можно использовать переменную любого строкового типа, в том числе String.

    Перед выходом из процедуры FileOpen экземпляр объекта TFileDialog уничтожается (удаляется из кучи) обращением к деструктору Done.

    По описанной схеме в Turbo Vision создаются и используются любые другие диалоговые окна.

    Для реализации диалогового запроса необходимо создать диалоговое окно и с помощью функции ExecView объекта-владельца (программы) инициировать диалог с пользователем. Результат, возвращаемый этой функцией, будет содержать выбранную пользователем команду.

    Чтобы запрограммировать действия, связанные с открытием файла, следует вначале решить, какие именно данные он будет содержать. Напомню, что мы разрабатываем диалоговую программу управления "записной книжкой". Структура типичной записи в такой книжке состоит из трех полей: имя, телефон, адрес. Учитывая это, будем считать, что данные в файле хранятся в виде следующих записей:

    const
    LName = 25;{Длина поля Name}
    LPhone= 11;{Длина поля Phone}
    LAddr =40;{длина поля Addr}
    type
    DataType = record {Тип данных в файле}
    Name: String[LName]; {Имя}
    Phone: String[LPhone] {Телефон}
    Addr: String[LAddr] {Адрес}
    end;
    

    Поместим эти строки в начале программы, а перед описанием процедуры FileOpen вставим определения следующих глобальных переменных:

    var
    DataFile: file of DataType; {Файловая переменная}
    OpFileF: Boolean; {Флаг открытого файла}
    

    Дополним текст процедуры FileOpen такими строками:

    case Control of
    StdDlg.cmFileOpen,cmOk:
    begin
    PFA.GetFileName(s);
    Assign(DataFile,s); {Отсюда начинаются новые строки}
    {$I-}
    Reset(DataFile);
    if lOResult <> 0 then
    Rewrite{DataFile); OpFileF: = IOResult=0;
    {$I+}
    if OpFileF then
    begin
    DisableCommands(WinCom2);
    EnableCommands(WinComl)
    end
    end;
    end;
    

    С помощью оператора DisableCommands мы временно запрещаем набор команд, указанный в константе WinComl. Эта константа в нашем случае должна содержать команду сmОреn; ее определение нужно включить сразу за определением константы WinComl:

    const
    WinCom1: TCommandSet = [cmSave, cmWork];
    WinCom2: TCommandSet = [cmOpen];
    

    Обращение к процедуре EnableCommands разрешает использовать команды cmSave и cmWork.

    Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.