Delphi notes delphi notes splitter

Багато практикуючих Delphi-програмісти знають, що у стандартного TSplitter'а є ряд недоліків (тобто багів, якщо сказати відверто). У спробах боротьби з помилками стандартного TSplitter'а, а також бажаючи "прикрутити" до спліттеру кнопку (для приховування / відображення пов'язаної панелі), я свого часу перепробував багато компонент (доступних для безкоштовного скачування), але так ні на чому конкретно і не зупинився: всі варіанти були чимось не тим, що потрібно було мені. У підсумку я вирішив написати свій компонент.

Отже, пропоную Вашій увазі VCL компонент: TdnSplitter. Це ще один клон спліттера, але у нього є відмінні риси. Найголовніша - TdnSplitter не є спадкоємцем від TSplitter. А отже він не буде наслідувати проблеми TSplitter'а. TdnSplitter створений як окремий компонент.

Ось список відмітних властивостей компонента.

  1. TdnSplitter успадкований від TCustomControl (який в свою чергу успадкований від TWinControl), на відміну від TSplitter, який успадкований TGraphicControl.
  2. Властивість AlignControl. Це властивість задається явно (або визначається автоматично в Design-Time). Завдяки цьому випадкова втрата пов'язаного зі сплиттером компонента неможлива в принципі.
  3. Властивість IsSnapped. Дізнатися, прихований чи пов'язаний компонент можна через Boolean-властивість. Через це ж властивість можна приховувати / відображати пов'язаний компонент.
  4. Властивість ControlSize. Це властивість дозволяє дізнатися (або змінити) ширину пов'язаного компонента (або висоту - в залежності від розташування).
  5. Є кнопка для приховування / відображення пов'язаного компонента. Для цієї кнопки можна вказати Hint і ще кілька параметрів, що відповідають за зовнішній вигляд.
  6. Властивість AllowDrag дозволяє заборонити змінювати розмір пов'язаного компонента перетягуванням (тобто можна залишити тільки кнопку і спліттер матиме всього два положення - див. Властивість IsSnapped).
  7. Властивість Action. TdnSplitter можна пов'язати з Action. Якщо Ви користуєтеся Аction'амі, то Ви зрозумієте, навіщо це потрібно.

Завдяки властивостям IsSnapped і ControlSize зберігати і відновлювати стан спліттера і пов'язаного з ним компонента стало простіше простого.

Скріншот з реального програми:

На зображенні два спліттера: перший "розкритий" (видно панель "Папки" і показаний хинт під курсором миші), другий "прихований" (панель зв'язків в правій частині вікна).

Компонент написаний в середовищі Delphi 7 і без проблем має запрацювати і в більш пізніх версіях Delphi.

P.S. Як розвитку компонента у мене була така ідея: при приховуванні пов'язаного компонента явно міняти його видимість (Visible), замість зміни його розміру в 0 (як зараз). Однак на практиці це особливо мені не знадобилося і поки воно залишилося як є.

P.P.S. В Design-Time, коли ви кидаєте Splitter на форму і міняєте у нього прив'язку, у спліттера може неправильно встановитися зовнішній розмір. Не лякайтесь :). Досить встановити / перевірити властивості Align, AlignControl і Size. Так як це проявляється рідко і тільки в Design-Time в момент настройки компонента, я не став себе обтяжувати (каюсь!) Виправленням цієї дрібної ... "помилки" :).

P.P.S. Незважаючи на дрібну проблему з компонентом в Design-Time, я дуже сподіваюся що цей пост візьме участь в конкурсі delphifeeds.ru.

Схожі статті