Для того чтобы посмотреть как работает динамическое создание объектов н форме Delphi 6 Вы можете создать новый проект, затем разместить на неё кнопку Button1 и поле ввода Edit1 затем просто заменить код проекта на тот что я предлагаю в листинге ниже.
В данном примере динамическая кнопка создаётся по событию клика на кнопку Button1. Для хранения объекта динамической кнопки я использую переменную dinBut: TButton; которая описана в var. В начале процедуры клика по кнопке Button1, которая изначально создана на форме, я описал условие защиты от повторного создания динамической кнопки, а именно строку if (dinBut = nil) then. Работает она следующим образом, пока метод TButton.Create не вызван переменная dinBut равна nil. Если она равна nil то только в этом случаи выполняется основное тело процедуры клика по кнопке Button то есть создание динамической кнопки. Иначе полю ввода Edit1 будет присвоен текст "Не создан(попытка повторного создания)". В процессе работы программы описанной в листинге Вы увидите такое сообщение в Edit1 после второго клика по кнопке Button1.
Создания события клика по динамической кнопке производится строкой dinBut.OnClick:=myDinButClick; то есть присваивается процедура которая в листинге начинается с строки procedure TForm1.myDinButClick(Sender: TObject);. Эту процедуру так же необходимо добавить в { Public declarations } в type.
Удалить динамический объект можно строкой кода FreeAndNil(dinBut); в листинге строка закомментирована, поскольку нет смысла удалять только что созданный объект. Вы можете создать ещё одну кнопку в которой разместить данную строку для того чтобы посмотреть как работает удаление динамических объектов.
Динамическое создание ClientSocket
Переместите на форму кнопку Button1 и многострочное поле ввода Memo1 после чего замените код проекта на тот что приведен в листинге.