(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Советы по программированию на DELPHI (ч.1)

Михаил Христосенко

Строку в нижний регистр. (api)

Для преобразования строки в нижний регистр нужно воспользоваться функцией ansilower.
Описание:
function ansilower(str: pchar): pchar;
где str - исходная нуль терминированная (то есть оканчивающаяся символом с номером #0) строка.
Возвращаемое значение - строка в нижнем регистре.
Функция находится в файле user32.dll
Пример применения:
edit1.text:=ansilower(pchar(edit1.text));

Подобным образом можно преобразовать строку в верхний регистр.
Для преобразования строки в верхний регистр нужно воспользоваться функцией ansiupper.

Описание:

function ansiupper(str: pchar): pchar; //где str - исходная нуль терминированная строка.
Возвращаемое значение - строка в нижнем регистре.
Функция находится в файле user32.dll

Пример применения:
edit1.text:=ansiupper(pchar(edit1.text));

Сколько времени прошло с момента перезагрузки. (api)

Чтобы определить сколько времени прошло с момента последней перезагрузки системы необходимо воспользоваться функцией getcurrenttime: longint;

Возвращаемое значение: время в миллисекундах.
Пример использования:
edit1.text:=floattostr(getcurrenttime/1000)+' секунд с момента перезагрузки';

Вычисляем координаты курсора на экране. (api)

Решить эту задачу нам поможет функция: getcursorpos(var point: tpoint);

где, point - принимающая переменная типа tpoint.
Пример использования:
procedure tform1.timer1timer(sender: tobject);
var t:tpoint;
begin
getcursorpos(t);
form1.caption:=inttostr(t.x)+' - '+inttostr(t.y);
end;

Определяем тип носителя. (api)

Функция function getdrivetype(drive: integer): word; поможет нам в этом.

где, drive: проверяемый накопитель, то есть, a: это 0, b: это 1 и т.д.
Возвpащаемое значение:
drive_removable, drive_remote, drive_fixed или нуль, если накопитель не поддается определению; 1 - если не существует. См. раздел "Типы накопителей, drive_" в главе 1.
функция находится в файле kernel32.dll
Пример использования:
procedure tform1.button1click(sender: tobject);
var x:integer;
begin
x:=getdrivetype(pchar(edit1.text));
case x of
0:edit1.text:='Не определен';
1:edit1.text:='не существует';
2:edit1.text:='съемный';
3:edit1.text:='жесткий';
end;
end;

Как скопировать экран в tbitmap.

Следующая ниже функция скопирует изображение экрана в tbitmap. Переменная tbitmap должна быть инициализирована до вызова этой функции.

procedure getscreenimage(bmp: tbitmap);
var bmp:tbitmap;
begin
bmp:=tbitmap.create;
bmp.width := screen.width;
bmp.height := screen.height;
bitblt(bmp.canvas.handle, 0, 0, screen.width, screen.height,
getdc(getdesktopwindow), 0, 0, srccopy);
end;

Использование графики в listbox

У класса tlistbox (и tcombobox тоже) есть свойство style, определяющее порядок рисования объекта. По-умолчанию оно установлено в lbstandard и за внешний вид объекта отвечает windows. Если установить это значение в lbownerdrawfixed или lbownerdrawvariable, то можно несколько разнообразить внешний вид объекта. Разбираться лучше всего на конкретном примере, так что попробуем создать listbox, который отображал имена графических файлов какой-нибудь директории вместе с картинками.

Чтобы заполнить listbox, надо написать следующее (чтобы каждый файл не прописывать, можно просто послать сообщение):

procedure tform1.button1click(sender: tobject);
var
s : string;
begin
s:='c:\windows\*.bmp'#0;
listbox1.perform(lb_dir, ddl_readwrite, longint(@s[1]));
end;

Здесь мы указали listbox’у, какие файлы требуется отображать.
Устанавливаем свойство style нужно установить в lbownerdrawfixed и создать обработчик события ondrawitem:
procedure tform1.listbox1drawitem(control: twincontrol;
index: integer; rect: trect; state: townerdrawstate);
var bitmap: tbitmap;
offset: integer;
bmprect : trect;
begin
with (control as tlistbox).canvas do
begin
{очищаем прямоугольник}
fillrect(rect);
{считываем картинку}
bitmap:=tbitmap.create;
bitmap.loadfromfile('c:\windows\'+listbox1.items[index]);
if bitmap <> nil then begin
{вычисляем квадрат для показа картинки}
bmprect:=bounds(rect.left + 2, rect.top + 2,
rect.bottom-rect.top-2, rect.bottom-rect.top-2);
{рисуем картинку}
stretchdraw(bmprect, bitmap);
offset := rect.bottom-rect.top + 6;
end;

{выводим текст}

textout(rect.left+offset,rect.top,listbox1.items[index]);
{не забыть освободить!}
bitmap.free;
end;
end;

Чтобы картинки получились побольше, значение свойства itemheight можно увеличить.

Добавление новых объектов в tabbednotebook

После создания нового объекта, нужно в его свойстве parent указать требуемую страницу tabbednotebook:

...
var btn : tbutton;
begin
btn := tbutton.create(self);
btn.parent:=twincontrol(tabbednotebook1.pages.objects[1]);
...
end;

Эмуляция нажатия клавиши.

Внутри приложения это выполняется достаточно просто с помощью вызова функции 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;
panel1.perform(wm_syscommand, $f012, 0);

Все это надо записать в обработчик события 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('Мы в Интернете!!!')
else 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('произошло нажатие на кнопку');

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 06.02.2007 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Quest Software. Toad for Oracle Development Suite
erwin Data Modeler Workgroup Edition r9.7 - Product plus 1 Year Enterprise Maintenance Commercial
CAD Import .NET Professional пользовательская
Rational ClearCase Multisite Floating User License
ABBYY FineReader 14 Standard Full
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
eManual - электронные книги и техническая документация
Утиль - лучший бесплатный софт для Windows
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100