works:programmer:delphi:pointer-form-tag

Хранить packed record в TForm.Tag

Ещё один хороший пример работы с указателями.

Создать объект packed record и хранить его вместе с формой.

...
 
    TSolidData = packed record
        name: string[100]; // помним что Pointer должен быть фиксированного размера.
        value: Integer;
    end;
 
    PSolidData = ^TSolidData;
 
var fmMain: TfmMain;
 
implementation
 
    procedure TfmMain.FormCreate(Sender: TObject);
    var PS: PSolidData;
    begin
        PS := AllocMem(SizeOf(TSolidData));
        Tag := Integer(PS);
 
        PS.name := 'EugeneX';
        PS.value := 1;
    end;
 
    procedure TfmMain.Button1Click(Sender: TObject);
    begin
        Caption := Format('%s, %d', [
            PSolidData(Tag).name,
            PSolidData(Tag).value
        ]);
        PSolidData(Tag).value := PSolidData(Tag).value + 1;
    end;
 
    procedure TfmMain.FormDestroy(Sender: TObject);
    begin
        FreeMemory(PSolidData(Tag));
    end;
 
end.
works/programmer/delphi/pointer-form-tag.txt · Last modified: 2022/10/09 02:12 by Chugreev Eugene