Можна використовувати властивість форми ActiveControl, але компонент, який викликав контекстне меню, не обов'язково може бути активним елементом управління.
"Які обмеження у стандартних елементів управління Delphi?"
Будь-компонент, який використовує TList, може зберігати інформацію розміром до 16368 елементів. Для прикладу, TTabControl може містити аж до 16368 закладок, а палітра компонентів Delphi до 16368 сторінок палітри.
Багато стандартні компоненти Delphi є оболонками стандартних елементів управління Windows. Windows 3.1 накладають власні обмеження на дані компоненти. Для прикладу: TComboBox і TListbox можуть містити до 5440 елементів, в TMemo або TEdit (і ін. Відповідні компоненти) до 32кб тексту.
Обсяг ресурсів Windows 3.1 обмежує компонент TNoteBook і дозволяє йому мати максимум 570 сторінок. (Також важко отримати більш ніж 500 віконних дескрипторів будь-якого додатка Windows.)
Примітка 1: Перевищення ліміту збуджує виключення або може зробити роботу Windows нестійкою.
Примітка 2: Багато обмеження, властиві 16-бітової версії Windows істотно зменшені в Windows NT і Windows 95. У майбутніх 32-бітових версій Delphi ці обмеження практично зникнуть.
"Як мені визначити довжину рядка в пікселах з певним шрифтом?"
Для визначення висоти і ширини рядка в пікселах можуть застосовуватися два методи Canvas - TextHeigh і TextWidth. Не забудьте призначити шрифт об'єкту Canvas перед тим, як що-небудь намалювати або провести вимірювання.
Всі візуальні компоненти мають властивість Canvas, але за замовчуванням воно захищене (protected) для того, щоб доступ до нього мали тільки прямі нащадки. Але, оскільки ви створюєте свій код на основі спадкоємців TForm, то у вас практично завжди є доступ до успадкованого властивості форми Canvas. Компонент TPaintBox має доступне (public) властивість Canvas для того, щоб в обробнику події компонента OnPaint ви могли б що-небудь намалювати, але можна їм скористатися і для наших цілей.
Якщо компонент не має властивість Canvas, то наступна функція допоможе повернути вам ширину тексту, заснованого на певному шрифті:
function GetTextWidth (CanvasOwner: TForm; Text. String;
"Чому деякі візуальні компоненти типу TPanel і TEdit не мають властивості Canvas?"
Всі спадкоємці TCustomControl мають властивість Canvas, тим не менш, необхідно мати якийсь механізм захисту для того, щоб інші "художники" не могли малювати на компоненті. Спадкоємці компонента завжди мають доступ до захищених властивостям, які вони успадковують від компонента (як, наприклад, Canvas), але ті ж користувачі компонента до них доступу не мають.
TCanvasPanel = class (TPanel)
"Як мені отримати горизонтальну смугу прокрутки в компоненті ListBox?"
Надішліть повідомлення LB_SetHorizontalExtent віконного дескриптору компонента ListBox. Наприклад, повідомлення можения бути послано в обробнику події форми OnCreate:
procedure TForm1.FormCreate (Sender: TObject);
SendMessage (Listbox1.Handle, LB_SetHorizontalExtent, 1000. Longint (0));
"Чи має Delphi компонент, що підтримує послідовні комунікації (порти)?"
Ні. Проте, існують бібліотеки для роботи з послідовними портами (і скоро повинні з'явитися компоненти) для Delphi третіх фірм, як, наприклад, TurboPower, SaxComm та інших.
"Яким чином можна встановити табулятори в елементі управління TMemo?"
Для установки табулятора в компоненті многострочного редагування (наприклад, TMemo), пошліть йому повідомлення EM_SetTabStops. Масив Tabs вказує на місце розташування табуляторів. Оскільки параметр WParam в SendMessage дорівнює 1, то всі табуляції будуть встановлені в величину, передану в масиві Tabs. Не забувайте для включення табуляторів встановлювати властивість WantTabs компонента TMemo в True.
procedure TForm1.FormCreate (Sender. TObject);
TabInc. LongInt = 10;
SendMessage (Memo1.Handle, EM_SetTabStops, 1. Longint (@TabInc));
"Яке найкраще місце в коді програми, звідки можна викликати вікно з логотипом програми при її запуску?"
Найкраще місце для показу вікна з логотипом - в вихідному коді проекту після першого Application.FormCreate і перед Application.Run. Цим ми здійснюємо створення форми на льоту і показ її до моменту фактичного запуску додатка.
"Під час виконання програми кожне знову відкрите дочірнє вікно виникає трохи нижче і правіше попереднього. Моя проблема полягає в тому, що коли я закриваю якесь дочірнє вікно і відкриваю нове, воно з'являється правіше і нижче того, яке я закрив перед цим, навіть якщо воно було єдиним, за якими правилами це писалося? "
Так працюють дочірні MDI вікна. У цій ситуації VCL не перекриває поведінки Windows, такі правила диктує сама система.
Неперевірене припущення: У процедурі FormCreate спробуйте встановити необхідні значення властивостей Top, Left, Width і Height. FormCreate дочірньої MDI форми буде викликано перш, ніж буде показано саме вікно.
"Чому моя програма не може знайти ресурси, упаковані мною в .RES-файл, якщо .RES-файл має те ж саме ім'я, що й модуль форми?"
Якщо ім'я використовуваного вами .RES-файлу збігається з ім'ям .DPR-файлу, Delphi перезапише його, створивши власний .RES-файл з цим ім'ям. Крім того, проектний RES-файл призначений тільки для менеджера Delphi-проекту, що не редагуйте та не додавайте до нього свої ресурси.
"Чи існує функція прокрутки форми за допомогою клавіш? Наприклад, прокрутка вгору і вниз при натисканні PgUp і PgDown відповідно.
Прокрутка форми здійснюється за допомогою зміни властивості Position властивості форми VertScrollbar або HorzScrollbar. Наступний код показує як це можна зробити:
Який порядок настання подій при створенні і показі форми?
При створенні форми події наступають в наступному порядку: OnCreate, OnShow, OnPaint, OnActivate, OnResize і знову OnPaint.
"Чому, якщо в обробнику форми OnActivate змінити властивість FormStyle, виникає помилка 'Can not change Visible in OnShow or OnHide' (не можу змінити Visible (видимість) в OnShow або OnHide)?
Властивість FormStyle визначає стиль створюваного вікна і зазвичай встановлюється в обробнику події OnCreate, тим не менш, ви можете його змінити і після створення дескриптора вікна, тільки не в обробниках подій OnActivate, OnShow або OnHide. Ваша проблема полягає в тому, що ви намагаєтеся змінити стиль форми при виникненні подій OnShow і OnHide.
"Яким чином я можу зробити у компонента кордону типу" sunken "(поглиблений) або" raised "(опуклий)?
Для того, щоб змусити виглядати компонент трохи втопленим або піднятим, розмістіть його на компоненті TBevel або TPanel, які мають властивості відповідного призначення.
Де я можу знайти вихідний код сторінкових компонентів (наприклад, TTabbedNotebook)?
Вихідний код VCL не містить код "tab" -компонента через юридичних причин. Проте, вихідні коди інтерфейсу (interface source) розташовані в каталозі DELPHI \ DOC і мають розширення INT.
Примітка: зареєстровані власники вихідного коду Delphi RTL можу запросити вихідний код TTabSet і TTabbedNotebook у підрозділи Borland Corporate Affairs. Інструкція знаходиться в файлі readme вихідного коду RTL. [000892]