Перейти к содержанию
Fire Monkey от А до Я

audiofeel

Пользователи
  • Постов

    2
  • Зарегистрирован

  • Посещение

Достижения audiofeel

  1. Создаю DLL для Inno Setup, через которую передаю FMX-формы и интерфейсы как COM-сервер. В Delphi 12 всё работало корректно: при установке Код: Layout.Align(Client) контейнер занимал всю площадь родителя. В Delphi 13 поведение изменилось — TLayout теперь размещается почти произвольно, с размерами по умолчанию, как будто Align не применяется. Фрагмент: Вопрос: кто сталкивался с подобным? Изменилось ли что-то в механизме вычисления Align или нужно вызывать дополнительный метод (RecalcSize, Realign, UpdateEffects, и т. д.)?
  2. unit fCreateRows; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ComCtrls, ExtCtrls, StdCtrls, Buttons, FireDAC.DatS, FireDAC.Stan.Intf, FireDAC.Stan.Error; type TfrmCreateRows = class(TForm) btnCreateTable: TButton; btnPopulate: TButton; btnPrint: TButton; btnAddError: TButton; pnlControlButtons: TPanel; Console: TMemo; pnlMain: TPanel; procedure FormDestroy(Sender: TObject); procedure btnCreateTableClick(Sender: TObject); procedure btnPopulateClick(Sender: TObject); procedure btnPrintClick(Sender: TObject); procedure btnAddErrorClick(Sender: TObject); private { Private declarations } FTab: TFDDatSTable; public { Public declarations } end; var frmCreateRows: TfrmCreateRows; implementation uses uDatSUtils; {$R *.dfm} procedure TfrmCreateRows.btnCreateTableClick(Sender: TObject); begin FTab := TFDDatSTable.Create('Table'); // define table structure FTab.Columns.Add('id', dtInt32); FTab.Columns.Add('string', dtAnsiString).Size := 12; FTab.Columns.Add('double', dtDouble); btnPopulate.Enabled := True; end; procedure TfrmCreateRows.btnPopulateClick(Sender: TObject); var oCol: TFDDatSColumn; oRow1, oRow2: TFDDatSRow; begin // 1. create row oRow1 := FTab.NewRow; // set values oRow1.SetValues([1, 'first row', 14.124145]); // add to table FTab.Rows.Add(oRow1); // 2. create and set values oRow2 := FTab.NewRow([2, 'second row', 14515.1251]); // add to table FTab.Rows.Add(oRow2); // 3. create, set values and add to table FTab.Rows.Add([3, 'third row', 114.22]); // 4. edit row oRow1.BeginEdit; oRow1.SetData(0, 10); oRow1.EndEdit; // 5. once more oCol := FTab.Columns[1]; oRow1.BeginEdit; oRow1.SetData(oCol, 'ten row'); oRow1.EndEdit; btnAddError.Enabled := True; btnPrint.Enabled := True; end; procedure TfrmCreateRows.btnAddErrorClick(Sender: TObject); begin FTab.Rows[0].RowError := EFDException.Create('Jaaaaa'); btnPrint.Enabled := True; end; procedure TfrmCreateRows.btnPrintClick(Sender: TObject); begin PrintRows(FTab, Console.Lines, 'Our rows...'); end; procedure TfrmCreateRows.FormDestroy(Sender: TObject); begin FTab.Free; end; end. Это пример стандартный из Delphi. СТрока FTab.Rows[0].RowError := EFDException.Create('Jaaaaa') меня вгоняет в ступор. По идее ресурс этот должен освободить FireDac, в debug вижу что он идет сюда и это и делает function TFDDatSRow.SetRowError(const AValue: EFDException): Boolean; var pInfo: PFDDataRowExtraInfo; begin Result := False; pInfo := GetRowInfo(AValue <> nil); if pInfo <> nil then begin if pInfo^.FRowException <> nil then begin Result := True; FDFreeAndNil(pInfo^.FRowException); end; if AValue <> nil then AValue.Duplicate(pInfo^.FRowException) else CheckNoInfo; end; end; Но на выходе - это мое созданное исключение в списке утечек памяти. Пробовал очищать его напрямую - FreeAndNil(FTab.Rows[0].RowError) - AV в итоге (получается уже освобожден ресурс). Если пихать указатель в свою переменную и потом освобождать - то вроде норм. НО не кошерно. А как заставить чтобы это работало прям с FireDac? Спасибо
×
×
  • Создать...