TempPanel.Width:=20; //Устанавливаю ширину TempPanel.Height:=20; //Устанавливаю высоту

//Далее устанавливаю обработчик нажатия на эту панель TempPanel.OnMouseDown:=PanelMouseDown;

//Добавляю панель в контейнер CompList (CompList.Add) //и сохраняю результат в TempPanel.Tag TempPanel.Tag:=CompList.Add(TempPanel);

Form1.InsertControl(TempPanel); //Вставляю панель на форму end;

Для начала вспомним, что это за свойство Tag у компонента TPanel. Это просто целое значение, которое ты можешь использовать по своему усмотрению. Именно этим свойством мы и будем часто пользоваться во время программирования нашего примера.

Теперь разберём написанный код. В разделе var я объявил одну переменную TempPanel типа TPanel. Это временная переменная, в которой будет инициализироваться новая панель. В первой же строчке кода обработчика я инициализирую эту переменную, как панель. В качестве параметра методу Create я должен передавать имя объекта, который будет являться родителем создаваемого компонента. Я передаю нашу главную форму, потому что компонент будет размещаться именно на нём.

Следующим этапом, я устанавливаю левую и правую позицию панели в координаты, где мы щёлкнули мышкой (X и Y, которые нам переданы в обработчике, указывают на точку, в которой была нажата кнопка мышки). Далее, я устанавливаю ширину и высоту панели. Я решил занести туда значение 20 (просто так захотелось).

Теперь об обработчике события TempPanel.OnMouseDown. Я туда засунул имя функции PanelMouseDown. Но такой функции нет среди стандартных функций и среди моего проекта. Поэтому мы должны её создать сами. Как это сделать эффективно? Вот тебе мой совет:

1. 1. Мы создаём обработчик для TPanel, поэтому временно поставь один экземпляр панели на форму в произвольное место.

2. 2. Создай для него обработчик на OnMouseDown и переименуй его в PanelMouseDown.

3. 3. Напиши нужный текст (я его покажу ниже) и можно удалять временно созданный на форме экземпляр TPanel.

 

Таким образом, ты можешь быть уверен, что ошибок не будет, потому что Delphi сама пропишет функцию PanelMouseDown где надо и укажет все необходимые параметры.

Если захочешь объявлять эту функцию вручную, то напиши в разделе private:

procedure PanelMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);

Объявлять можно и до private, там где объявляет Delphi обработчики событий. А ниже опиши саму функцию

procedure TForm1.PanelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);