unit TDosEnv;
interfaceuses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs;
type
TDosEnvironment = class(TComponent)
public{ Public объявления класса }constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
private{ Объявления Private-полей }
FDosEnvList: TStringList;
procedure DoNothing(const Value: TStringList);
protected{ Объявления Protected-методов }
dummy: Word;
function GetDosEnvCount: Word;
public{ Public interface объявления }function GetDosEnvStr(const Name: string): string;
{ Данная функция является измененной версией функции GetEnvVar,
присутствующей в поставляемом с Delphi модуле WinDos. Она
использует паскалевские строки вместо строк с терминирующим нулем.
}published{ Published design объявления }property DosEnvCount: Word read GetDosEnvCount write dummy;
property DosEnvList: TStringList read FDosEnvList write DoNothing;
end;
procedureRegister;
implementationconstructor TDosEnvironment.Create(AOwner: TComponent);
var
P: PChar;
i: Integer;
begininherited Create(AOwner);
FDosEnvList := TStringList.Create;
P := GetDosEnvironment; { Win API }
i := 0;
while P^ <> #0 dobegin
Inc(i);
FDosEnvList.Add(StrPas(P));
Inc(P, StrLen(P) + 1) { Быстрый переход к следующей переменной }endend{Create};
destructor TDosEnvironment.Destroy;
begin
FDosEnvList.Free;
FDosEnvList := nil;
inherited Destroy
end{Destroy};
procedure TDosEnvironment.DoNothing(const Value: TStringList);
begin
MessageDlg('TDosEnvironment.DosEnvList только для чтения!', mtInformation,
[mbOk], 0)
end{DoNothing};
function TDosEnvironment.GetDosEnvCount: Word;
{ Возвращает количество переменных окружения.
}beginif Assigned(FDosEnvList) then{!!}
Result := FDosEnvList.Count
else
Result := 0;
end{GetDosEnvCount};
function TDosEnvironment.GetDosEnvStr(const Name: string): string;
{ Данная функция является измененной версией функции GetEnvVar,
присутствующей в поставляемом с Delphi модуле WinDos. Она
использует паскалевские строки вместо строк с терминирующим нулем.
}var
i: Integer;
Tmp: string;
Len: Byte absolute Name;
begin
i := 0;
Result := '';
if Assigned(FDosEnvList) then{!!}while i < FDosEnvList.Count dobegin
Tmp := FDosEnvList[i];
Inc(i);
if Pos(Name, Tmp) = 1 thenbegin
Delete(Tmp, 1, Len);
if Tmp[1] = '=' thenbegin
Delete(Tmp, 1, 1);
Result := Tmp;
i := FDosEnvList.Count { конец while-цикла }endendendend{GetDosEnvStr};
procedureRegister;
begin
RegisterComponents('Dr.Bob', [TDosEnvironment]);
end{Register};
end.
Эта часть кода - юнит Delphi, называемый TDosEnv, который обеспечивает функциональность для работы с переменными окружения в стиле DOS на платформе Windows.
Декларация юнита
Юнит начинается с декларации класса TDosEnvironment, который наследуется от TComponent. Класс имеет три секции: public, private и protected методы.
Общественная секция
Конструктор Create(AOwner: TComponent) инициализирует экземпляр класса с владельцем компонента. Он создает TStringList для хранения переменных окружения.
Деструктор Destroy() освобождает память, выделенную для TStringList.
Общественный метод GetDosEnvStr(const Name: string): string возвращает значение переменной окружения с именем Name. Если найдены несколько совпадений, возвращается только первое совпадение.
Приватная секция
Приватное поле FDosEnvList: TStringList хранит список переменных окружения.
Приватный процедура DoNothing(const Value: TStringList) используется для предотвращения записи в свойство DosEnvList. Если попытка будет сделана записать в это свойство, появится сообщение об ошибке, предупреждающее о том, что это только для чтения.
Защищенная секция
Защищенное поле dummy: Word; не используется в коде.
Опубликованные свойства
Опубликованное свойство DosEnvCount: Word read GetDosEnvCount write dummy; обеспечивает доступ к количеству переменных окружения.
Опубликованное свойство DosEnvList: TStringList read FDosEnvList write DoNothing; обеспечивает доступ к списку переменных окружения. Запись в это свойство будет вызывать процедуру DoNothing.
Имплементация
Конструктор использует функцию Windows API GetDosEnvironment для получения указателя на массив null-terminated строк, где каждая строка представляет переменную окружения. Затем он итерирует по массиву, добавляя каждую строку в TStringList.
Деструктор освобождает память, выделенную для TStringList.
Метод GetDosEnvCount возвращает количество переменных окружения в списке.
Метод GetDosEnvStr ищет переменную окружения с совпадающим именем и возвращает ее значение, если найдено. Если не найдено, возвращается пустая строка.
Процедура регистрации
Последняя секция определяет процедуру Register(), которая регистрирует компонент TDosEnvironment под категорией "Dr. Bob" в палете компонентов Delphi.
В целом, это юнит обеспечивает простой способ работы с переменными окружения в стиле DOS на платформе Windows с помощью языка программирования Delphi.
Просмотр и управление переменными окружения в системе DOS с помощью компонента TDosEnvironment для Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.