Если я правильно прочитал ваш вопрос, вы хотели бы создать некоторые элементы управления в форме на основе содержимого таблицы. В следующем примере я предположил, что вы хотите сделать это на основе содержимого текущей записи в TDBGrid, поэтому вам придется приспосабливаться по мере необходимости.
В этом примере предполагается наличие формы с TDBGrid и TPanel (Panel1), в которых будут храниться элементы управления, созданные во время выполнения.
TDBGrid будет подключен к компоненту TDataSource, который будет подключен к некоторому потомку TDataSet для таблицы / запроса с информацией. TDataSource имеет событие OnDataChanged. Это событие вызывается при изменении данных в поле или при изменении текущей записи в наборе данных. Таким образом, вы можете использовать это для изменения элементов управления при изменении текущей записи.
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
var
i: Integer;
Chk: TCheckBox;
Edit: TEdit;
begin
// When the Field is assigned, the call is the result of a change in the field.
// When the Field is unassigned, the call is the result of changing the current record.
if Assigned(Field) then
Exit;
// Remove controls on panel
for i := Panel1.ControlCount - 1 downto 0 do
Panel1.Controls[i].Free;
// Add controls on panel for current record
if True then // Replace this with condition based on contents of current record (if any!)
begin
Chk := TCheckBox.Create(Self); // Set Owner, so it is freed when form is closed.
Chk.Parent := Panel1; // Set Parent, so the control is shown.
Chk.Left := FLeftIndent; // Create FLeftIndent as a member field of the form, set value in OnCreate.
Chk.Top := FNextTop; // Create FNextTop as a member field of the form.
Inc(FNextTop, FSpacing); // Create FSpacing as a member field of the form, set value in OnCreate.
if True then // Replace this with condition that dictates creation of Edit
begin
Edit := TEdit.Create(Self);
Edit.Parent := Panel1;
Edit.Left := Chk.Left + Chk.Width + FSpacing;
Edit.Top := Chk.Top; // Add offset as needed for proper alignment of CheckBox and Edit.
end;
end;
end;
Пожалуйста, обратите внимание, что если у вас нет других флажков или правок в форме, вам нужно будет включить соответствующие единицы vcl самостоятельно. Самый простой способ сделать это - поместить их в форму, сохранить форму, а затем снова удалить элементы управления.