как динамически создавать компоненты в Delphi, такие как TLabel или TEdit ... и т. д. - PullRequest
6 голосов
/ 16 декабря 2011

Использование Delphi 2010

SQLQuery1.First; // move to the first record
while(not SQLQuery1.EOF)do begin
   // do something with the current record
   // What's the code should i write in this part in order to create a TEdit
   // containing the user fullname the current item.
   ShowMessage(SQLQuery1['whom']);
   SQLQuery1.Next; // move to the next record
end;

Ответы [ 4 ]

6 голосов
/ 16 декабря 2011

Итак, чтобы создать TEdit, вам нужно сделать следующее:

Создать переменную для работы.Либо локальная переменная, либо член класса.

Edit: TEdit;

Затем вы создаете ее.

Edit := TEdit.Create(Self);

Параметром для конструктора является владелец.Это гарантирует, что контроль уничтожается при уничтожении его владельца.Я предполагаю, что Self - это форма.

Теперь вам нужно предоставить элементу управления родительский элемент.

Edit.Parent := Self;

Или, возможно, он находится на панели.1018 * Наконец, вы устанавливаете текст.

Edit.Text := SQLQuery1['whom']);

С меткой все очень похоже, за исключением того, что вы используете свойство Caption вместо свойства Text.

наверняка захочет установить другие свойства, но я думаю, вы уже знаете, как это сделать.

3 голосов
/ 16 декабря 2011

Вы также можете создавать компоненты визуально, использовать GExperts Components to Code expert для них, а затем снова удалять их из дизайнера форм.Для пары метка / редактирование это дает что-то вроде

var
  Edit1: TEdit;
  Label1: TLabel;

  Edit1 := TEdit.Create(Self);
  Label1 := TLabel.Create(Self);

  Edit1.Name := 'Edit1';
  Edit1.Parent := Self;
  Edit1.Left := 344;
  Edit1.Top := 172;
  Edit1.Width := 121;
  Edit1.Height := 21;
  Edit1.TabOrder := 0;
  Edit1.Text := 'Edit1';
  Label1.Name := 'Label1';
  Label1.Parent := Self;
  Label1.Left := 296;
  Label1.Top := 176;
  Label1.Width := 65;
  Label1.Height := 17;
  Label1.Caption := 'Label1';
  Label1.FocusControl := Edit1;

В большинстве случаев требуется доработка (удалите строки TabOrder, замените материал Left / Top / ... на SetBounds, Align или ваш собственныйлогика, ...) и для некоторых свойств / компонентов это не работает вообще.Но таким образом вы можете сэкономить много времени.

3 голосов
/ 16 декабря 2011
Var
  AnEdit : TEdit;
Begin
  AnEdit := TEdit.Create(self);
  AnEdit.Parent := self; // or some suitable container compoent e.g GroupBox, Panel
  AnEdit.Top := ?;
  AnEdit.Left := ?
  // any other properties you weant to set.
End;

Бит, который ловит людей, устанавливает родителя.

0 голосов
/ 26 июня 2018
with TEdit.Create(self) do
begin
  Parent:= ... // The name of the panel or form, on which you would like to place TEdit
  Text:= 'your text'; 
  // And you could set its position by giving "Left" and/or "Width", so on..
end;
...