Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Автоматическое назначение GUID свойствам компонентов TDBGrid в Delphi

Delphi , Компоненты и Классы , Свойства и События

Вопрос, заданный пользователем, заключается в возможности автоматического назначения уникального идентификатора (GUID) каждому компоненту TDBGrid в дизайне времени в среде разработки Delphi. Это необходимо для обеспечения уникальности компонентов как в процессе разработки, так и во время выполнения программы, а также для сохранения этих значений после закрытия Delphi, аналогично тому, как сохраняются значения списка элементов TComboBox.

Решение проблемы

Для решения поставленной задачи пользователь предоставил код, который должен был автоматически назначать GUID каждому TDBGrid при его создании. Однако, в коде была допущена ошибка: функция GetUniqueName возвращала пустую строку, вместо того чтобы возвращать значение FUniqueName. Исправленный код должен выглядеть следующим образом:

function TMDBGrid.GetUniqueName: String;
begin
  Result := FUniqueName;
end;

Или можно упростить код, убрав функцию GetUniqueName и изменив определение свойства UniqueName следующим образом:

property UniqueName: String read FUniqueName write SetUniqueName;

Важные замечания

  • Свойство UniqueName будет заполнено значением по умолчанию, заданным в конструкторе компонента, при первом добавлении на форму, так как в файле .dfm еще нет значений для чтения.
  • Если значение свойства равно default, и это значение не было изменено пользователем, то оно не будет сохранено в файле .dfm.
  • Если необходимо, чтобы свойство не перезаписывалось в runtime, то проверка на csDesigning в ComponentState не требуется, так как значение будет загружено из .dfm файла.

Пример кода

type
  TMDBGrid = class(TDBGrid)
  private
    FUniqueName: String;
  protected
    function GetUniqueName: String; override;
    procedure SetUniqueName(const AName: String);
  public
    constructor Create(AOwner: TComponent); override;
    property UniqueName: String read GetUniqueName write SetUniqueName;
  end;

constructor TMDBGrid.Create(AOwner: TComponent);
begin
  inherited;
  FUniqueName := GenerateGUID(True);
end;

function TMDBGrid.GetUniqueName: String;
begin
  Result := FUniqueName;
end;

procedure TMDBGrid.SetUniqueName(const AName: String);
begin
  FUniqueName := AName;
  if FUniqueName = '' then
    FUniqueName := GenerateGUID(True);
end;

function GenerateGUID(PlainText: Boolean = False): String;
var
  G: TGUID;
begin
  CreateGUID(G);
  Result := GUIDToString(G);
  if PlainText then
    Result := MultiStringReplace(Result, ['{', '}', '[', ']', '-', '.', ' ', '(', ')'],
                                 ['', '', '', '', '', '', '', ''], [rfReplaceAll, rfIgnoreCase]);
end;

procedure Register;
begin
  RegisterComponents('MLStandard', [TMDBGrid]);
end;

После внесения исправлений, при добавлении TDBGrid на форму, свойство UniqueName будет автоматически заполнено уникальным GUID. Это значение сохранится в файле .dfm и будет доступно как в дизайне, так и во время выполнения программы.

Создано по материалам из источника по ссылке.

Автоматическое назначение GUID свойствам компонентов TDBGrid в Delphi для обеспечения их уникальности и сохранения значений после закрытия среды разработки.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Свойства и События ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 09:54:49/0.0035731792449951/0