Нарисовать кнопку закрытия в каждом Ttabsheet TPageControl

Я хочу реализовать кнопку закрытия на PageControl, и я прочитал этот вопрос также Как реализовать кнопку закрытия для TTabsheet TPageControl
Дело в том, что я не могу понять, как реализовать код, представленный в ответе Ульриха... они создают новый компонент-потомок из TPageControl или нет? если бы кто-то мог объяснить, где написать этот код, я был бы благодарен! У меня есть один учитель, который знает немного Delphi в моей школе, но он не мог мне помочь... и я извиняюсь, если это глупый вопрос, но я новичок в Delphi и программировании.

1 ответ

Решение

Код в вопросе, на который вы ссылаетесь, не создает новый компонент. Вместо этого он реализует собственное рисование, используя события элемента управления страницы. Конкретно эти события:

  • OnDrawTab
  • OnMouseDown
  • OnMouseMove
  • OnMouseLeave
  • OnMouseUp

Вы должны использовать конструктор форм Delphi, чтобы соединить эти обработчики событий с соответствующими событиями, чтобы код работал.

Этот подход, вероятно, был выбран для простоты при ответе на этот вопрос, но он не масштабируется для приложения со многими формами, которые имеют элементы управления страницей. В этой ситуации вы хотели бы получить новый компонент управления страницей.

Если вы сделаете это, то вместо использования событий вам нужно переопределить следующие методы:

  • DrawTab
  • MouseDown
  • MouseMove
  • MouseUp

В дополнение к этому вы должны повторить OnMouseLeave поведение. Это требует обработчика сообщений.

procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
....
procedure TMyPageControl.CMMouseLeave(var Message: TMessage);
begin
  inherited;
  if Message.LParam=0 then
  begin
    // move OnMouseLeave code here
  end;
end;
Другие вопросы по тегам