• Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.


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

    Инкапсуляция новых полей и методов

    При попытке откомпилировать полученный вариант программы Турбо Паскаль сообщит о неизвестном идентификаторе DisableCommands. На первый взгляд это кажется странным – ведь аналогичное обращение в обработчике событий TNotebook.HandleEvent не вызывало проблем! Все дело в том, что мы работаем с объектами, а следовательно, здесь очень важным становится контекст программ. Обработчик TNotebook-HandleEvent – это метод объекта TNotebook, который унаследовал от своих родителей многие свойства, в том числе и метод DisableCommands. Процедура FileOpen не является потомком объектов Turbo Vision и не имеет доступа к их полям и методам.

    В Turbo Vision все новые процедуры обычно инкапсулируются в объекты., если в них необходимо получить доступ к специфическим средствам этих объектов.

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

    type
    TNotebook = object(TApplication)
    …….
    Procedure FileOpen;
    Procedure FileSave;
    Procedure ChangeDir;
    Procedure DOSCall;
    Procedure Work;
    end;
    

    В этом фрагменте мы инкапсулировали в объект все методы, используемые обработчиком событий. Разумеется, необходимо соответствующим образом изменить заголовок процедуры FileOpen, поскольку она теперь стала методом объекта TNotebook:

    Procedure TNotebook.FileOpen;
    

    Аналогичным образом следует изменить и заголовки других инкапсулированных процедур. Теперь трансляция пройдет успешно, а после открытия файла станет недоступна команда F3.

    Тексты двух других новых методов объекта TNotebook не нуждаются в особых комментариях:

    Procedure TNotebook.FileSave;
    {Закрывает файл данных}
    begin
    Close(DataFile);
    OpFileF: = False;
    EnableCommands(WinCom2); {Разрешаем открыть файл}
    DisableCommands(WinComl) {Запрещаем работу и сохранение}
    end; {TNotebook.FileSave}
    {-----------}
    Procedure TNotebook.ChangeDir;
    {Изменяет текущий каталог}
    var
    PD: PChDirDialog; {Диалоговое окно смены каталога/диска}
    Control: Word;
    begin
    New(PD, Init(cdNormal,0));{Создаем диалоговое окно}
    Control: = DeskTop.ExecView(PD){Используем окно}
    ChDir(PD.Dirlnput.Data);{Устанавливаем новый каталог}
    Dispose(PD, Done){Удаляем окно из кучи}
    end; {TNotebook.ChangeDir}
    

    Несколько слов по поводу реализации процедуры TNotebook.ChangeDir. В ней используется объект TChDirDialog, входящий в модуль StdDlg. С помощью этого объекта создается диалоговое окно, позволяющее выбрать новый диск или каталог. После создания и использования экземпляра объекта TChDirDialog в его поле:

    Dirlnput.Data
    

    Устанавливается строка типа PathStr, задающая новый каталог (и, возможно, новый диск).

    Чуть сложнее обстоит дело с процедурой DOSCall, которая должна реализовать временный выход в ДОС. Дело в том, что перед выходом необходимо сохранить в куче текущее состояние программы, а после возврата нужно восстановить состояние программы, в том числе и вид экрана. Чтобы реализовать имеющиеся в Turbo Vision средства сохранения и восстановления программы, в предложение Uses необходимо добавить ссылку на модуль Memory. Вот текст метода TNotebooLDOSCall:

    Procedure TNotebook.DOSCall;
    {Временный выход в ДОС}
    const
    txt ='Для возврата введите EXIT в ответ'+' на приглашение ДОС…';
    begin
    DoneEvents;{Закрыть обработчик событий}
    DoneVideo;{Закрыть монитор экрана}
    DoneMemory;{Закрыть монитор памяти}
    SetMemTop(HeapPtr);{Освободить кучу}
    WriteLn(txt);{Сообщить о выходе}
    SwapVectors;{Установить стандартные векторы}
    {Передать управление командному процессору ДОС:}
    Exec(GetEnv('COMSPEC'),'');
    {Вернуться из ДОС:}
    SwapVectors; {Восстановить векторы)
    SetMemTop(HeapEnd); {Восстановить кучу}
    InitMemory; {Открыть монитор памяти}
    InitVideo;{Открыть монитор экрана}
    InitEvents;{Открыть обработчик событий}
    InitSysError;{Открыть обработчик ошибок}
    Redraw {Восстановить вид экрана}
    end; {DOSCall}
    

    Процедуры DoneXXXX завершают работу отдельных частей Turbo Vision, а процедуры InitXXXX осуществляют обратные действия. С помощью процедуры SetMemTop в ДОС передается информация о фактически используемой динамической памяти (по умолчанию программе предоставляется вся доступная память). Этот вызов освобождает неиспользуемую в данный момент часть кучи для размещения в ней командного процессора COMMAND.COM. После возврата из ДОС вызов SetMemTop используется еще раз – для того, чтобы зарезервировать за программой всю ранее выделенную ей память. Процедура Redraw восстанавливает все видимые элементы экрана.

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