Вопрос: Как перехватить сообщения прокрутки в TScrollBox? Ответ: Следующий пример перехватывает сообщения о прокрутке компонента TScrollBox и синхронизирует обе линейки прокрутки. Сообщения прокрутки перехватываются с помощью переопределения окнной процедуры (WinProc) ScrollBox'а. More »
Вопрос: Как поместить JPEG-картинку в exe-файл и потом загрузить ее? Ответ: 1) Создайте текстовый файл с расширением ".rc". Имя этого файла должно отличаться от имени файла-пректа или любого модуля проекта. Файл должен содержать строку вроде: MYJPEG JPEG C:\DownLoad\MY.JPG где: "MYJPEG" имя ресурса "JPEG" пользовательский тип ресурса "C:\DownLoad\MY.JPG" руть к JPEG файлу. Пусть например rc-файл называется "foo.rc" Запустите BRCC32.exe (Borland Resource CommandLine Compiler) - программа находится в каталоге Bin Delphi/C++ Builder'а - передав ей в качестве параметра полный путь к rc-файлу. В нашем примере: C:\DelphiPath\BIN\BRCC32.EXE C:\ProjectPath\FOO.RC Вы получите откомпилированный ресурс - файл с расширением ".res". (в нашем случает foo.res). Далее добавте ресурс к своему приложению. More »
Вопрос: TTimer работает не достаточно точно. Как получить более высокую точность? Ответ:
Таймер Windows не был
создан с целью получения сверхточного хронометра.
Другими словами, когда
Вы устанавливаете таймер на срабатывания каждые 1000 миллисекунд, он может срабатывать
через интервал несколько больший чем 1000 миллисекунд. Значения меньше 55 миллисекунд
никогда не будут срабатывать вовремя в Windows, поскольку это минимальная точность
таймера. Можно проверять системное время и сравнивать его со временем предыдущего
события таймера чтобы повысить точность.
Вопрос: Можно ли сделать так чтобы TStringGrid автоматически изменял ширину колонок, чтобы вместить самую длинную строчку в колонке? Ответ: См. пример. More »
Вопрос: При попытке использовать метод TCanvas.StretchDraw чтобы нарисовать иконку увеличенной ее размер не изменяется. Что делать? Ответ: Иконки всегда рисуются размером принятым в системе по умолчанию. Чтобы показать увеличенный вид иконки скоприуйте ее на bitmap, а зате используйте метод TCanvas.StretchDraw. More »
Вопрос: Как перехватить события в неклиентской области формы, в заголовке окна, например? Ответ: Создайте обработчик одного из сообщений WM_NC (non client - не клиентских) (посмотрите WM_NC в Windows API help). Пример показывает как перехватить вижение мыши во всей неклиенстской области окна (рамка и заголовок). More »
Вопрос: При попытке создать обьект класса TPrinter (TPrinter.Create) я получаю exception. Почему? Ответ: В создании обьекта класса TPrinter с использованием TPrinter.Create нет необходимости, так как обьект класса TPrinter (называемый Printer) автоматически создается при использовании модуля Printers. More »
Вопрос: Как перемещать компонент мышкой во время работы программы "runtime"? Ответ:
Перехватить событие OnMouseDown,
запомнить x и y координты курсора мыши. Отслеживать движение мыши по событию
OnMouseMove и перемещать компонент вслед за курсором мыши до тех пор пока не
произойдет событие OnMouseUp. В примере показано перемещение компонента TButton.
Перемещение начинается, когда пользователь “берет” TButton мышью, удерживая
нажатой клавишу “Сontrol”. More »
Вопрос: Как сохранить обьект TFont в реестре/ini/файле/таблице базы данных? Ответ:
Нужно сохранять атрибуты
шрифта (имя, размер и т.п.) а не сам обьект TFont. После считывания этой информации
следует проверить существует ли такой шрифт, прежде чем его использовать. Чтобы
не показаться голословным дополню ответ Borland’а своим примером сохранения/чтения
шрифта в/из реестра More »
Вопрос: Как ограничить длинну текста, вводимого в TEdit, так чтобы ширина текста не превышала ширину TEdit'а? Ответ:
В примере приведено два
способа ограничить длинну текста в TEdit так чтобы она не превышала ширину клиентской
области окна TEdit’а и не появлялась прокрутка текста. Первый способ устанавливает
свойство TEdit’а MaxLength равным числу букв “W”, которые поместятся в TEdit.
“W” выбрана потому, что является, наверное, самой широкой буквой в любом шрифте.
Этот метод сносно работает для шрифтов с фиксированной шириной букв, но для
шрифтов с переменной шириной букв вряд ли сгодится. Второй способ перхватывает
событие KeyPress TEdit’а и измеряет ширину уже введенного текста и ширину нового
символа. Если ширина больше чем клиентская область TEdit’а новый символ отбрасывается
и вызывается MessageBeep. More »