Советы по программированию на DELPHI (ч.1)Источник: articlesorg Михаил Христосенко
Строку в нижний регистр. (api)Для преобразования строки в нижний регистр нужно воспользоваться функцией ansilower. Подобным образом можно преобразовать строку в верхний регистр. Описание: function ansiupper(str: pchar): pchar; //где str - исходная нуль терминированная строка. Пример применения: Сколько времени прошло с момента перезагрузки. (api)Чтобы определить сколько времени прошло с момента последней перезагрузки системы необходимо воспользоваться функцией getcurrenttime: longint; Возвращаемое значение: время в миллисекундах. Вычисляем координаты курсора на экране. (api)Решить эту задачу нам поможет функция: getcursorpos(var point: tpoint); где, point - принимающая переменная типа tpoint. Определяем тип носителя. (api)Функция function getdrivetype(drive: integer): word; поможет нам в этом. где, drive: проверяемый накопитель, то есть, a: это 0, b: это 1 и т.д. Как скопировать экран в tbitmap.Следующая ниже функция скопирует изображение экрана в tbitmap. Переменная tbitmap должна быть инициализирована до вызова этой функции. procedure getscreenimage(bmp: tbitmap); Использование графики в listboxУ класса tlistbox (и tcombobox тоже) есть свойство style, определяющее порядок рисования объекта. По-умолчанию оно установлено в lbstandard и за внешний вид объекта отвечает windows. Если установить это значение в lbownerdrawfixed или lbownerdrawvariable, то можно несколько разнообразить внешний вид объекта. Разбираться лучше всего на конкретном примере, так что попробуем создать listbox, который отображал имена графических файлов какой-нибудь директории вместе с картинками. Чтобы заполнить listbox, надо написать следующее (чтобы каждый файл не прописывать, можно просто послать сообщение): procedure tform1.button1click(sender: tobject); Здесь мы указали listbox’у, какие файлы требуется отображать. {выводим текст} textout(rect.left+offset,rect.top,listbox1.items[index]); Чтобы картинки получились побольше, значение свойства itemheight можно увеличить. Добавление новых объектов в tabbednotebookПосле создания нового объекта, нужно в его свойстве parent указать требуемую страницу tabbednotebook: ... Эмуляция нажатия клавиши.Внутри приложения это выполняется достаточно просто с помощью вызова функции windows api sendmessage() (можно воспользоваться и методом perform того объекта (или формы), кому посылается сообщение о нажатой клавише). Попробуем на примере tmemo. Способ 1. sendmessage: sendmessage(memo1.handle, wm_char, ord(‘a’), 0); Способ 2. perform: memo1.perform(wm_char, ord(‘a’), 0); Следует заметить, что в качестве параметра для функции ord нужно использовать символы только внем регистре. (объявления ord('a') и ord('Ф') равны между собой ) Перехват нажатия клавиши в программе.Если вам надо перехватить нажатие клавиш в вашей программе, тогда установите свойство keypreview для формы в true (события, связанные с клавиатурой будут вначале обрабатываться формой, а затем тем элементом, от которого поступило сообщение о нажатии клавиши). И в обработчике события onmousedown для формы напишите необходимый код. Пример: if key = 27 then application.terminate; Если пользователь нажмет esc, то программа закроется. Предположим, что вам надо запретить нажатие клавиши enter в вашей программе. Для этого в обработчике события onkeypress для формы (не забудьте про свойство keypreview, оно должно быть true) вам надо написать это: if key=chr(13) then key:=#0; Функция chr (x: byte) возвращает символ, соответствующий его номеру (параметр x). Перехват нажатия клавиш в windowsВ этом примере я покажу вам как можно перехватить нажатие какой-нибудь клавиши в windows, независимо является ли ваша программа активной в этот момент, или нет. Поставьте на форму timer и установите его свойство interval равным 1. Теперь в обработчике события ontimer напишите: if getasynckeystate(13)<>0 then showmessage('Вы нажали на enter'); Поскольку параметром для приведенной функции является переменная типа word, значит можно использовать и именованные константы. Объявления if getasynckeystate(13) и if getasynckeystate(vk_return) одинаковы. Перемещение компонентов.Для того, чтобы переместить какой-нибудь компонент (визуальный конечно же:)) нам необходимо послать компоненту соответствующее сообщение, с помощью метода perform. Это делается примерно так: releasecapture; Все это надо записать в обработчик события onmousedown для нужного компонента, в данном случае это tpanel. И тогда при нажатии на компонент на экране появится контур компонента, когда вы выберите подходящее место и отпустите кнопку, компонент переместится туда! Вот такой простой и красивый способ! Поиск в listbox'eНаверно каждый сталкивался с tfontdialog' ом. Когда вы вводите первые буквы названия нужного шрифта, listbox выделяет элемент, схожий с вводимым текстом. Это мы и попробуем реализовать. Поставьте на форму listbox и edit. Снова воспользуемся функцией perform. В обработчике события onchange для edit напишите это: listbox1.perform(lb_selectstring,-1,longint(pchar(edit1.text))); Подключен ли компьютер к Интернету.Мне часто задают этот вопрос, поэтому я и решил поделиться этим секретом с вами. Тем более чтобы узнать подключен компьютер к Интернету или работа идет в автономном режиме, нужен всего лишь один компонент: tcp (на странице internet, входит в пакет поставки client/server suite), если у вас нет этого компонента, то воспользуйтесь компонентом powersock. Разницы нет никакой. Итак, приступим. Ставите на форму компонент tcp. А потом в то место где вы хотите проверять на подключение напишите: if tcp1.localip <>'127.0.0.1' then showmessage('Мы в Интернете!!!') Если вы хотите все время делать эту проверку то поставьте на форму timer с интервалом 1 и в обработчике события ontimer напишите приведенный код. Как программно кликнуть по speedbutton.Некоторые скажут используй sendmessage и все тут. Но нет! У speedbutton'a нет свойства handle, поэтому sendmessage мы использовать не сможем. Опять воспользуемся методом perform (он не раз нас уже выручал :)). Где вам надо программно нажать на кнопку напишите это: speedbutton1.perform(wm_lbuttondown, 0, 0); speedbutton1.perform(wm_lbuttonup, 0, 0); И чтобы можно было как-то отследить нажатие в обработчике события onclick для вашей кнопки напишите: showmessage('произошло нажатие на кнопку'); |