Последние записи
- Windows 10 сменить администратора
- Рандомное слайдшоу
- Событие для произвольной области внутри TImage
- Удаление папки с файлами
- Распечатка файла
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
25th
Авг
ПАНЕЛЬ ЗАДАЧ. ПУСК
ПАНЕЛЬ ЗАДАЧ. ПУСК.
Начнём с общего. Как скрыть и показать Панель задач:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowWindow(FindWindow(‘Shell_TrayWnd’, nil), SW_HIDE); // Скрыть
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowWindow(FindWindow(‘Shell_TrayWnd’, nil), SW_SHOW); // Показать
end;
Теперь сделаем иконку рядом с часами:
public
procedure IconCallBackMessage( var Mess : TMessage ); message WM_USER+ 100;
end;
implementation
uses ShellAPI;
procedure TForm1.IconCallBackMessage( var Mess : TMessage );
var
sEventLog : String;
begin
case Mess.lParam of
// Сделайте здесь все что вы хотите. Например, вызов контекстного меню при нажатии правой кнопки мыши.
WM_LBUTTONDBLCLK : sEventLog := ‘Двойной щелчок левой кнопкой’;
WM_LBUTTONDOWN : sEventLog := ‘Нажатие левой кнопки мыши’;
WM_LBUTTONUP : sEventLog := ‘Отжатие левой кнопки мыши’;
WM_MBUTTONDBLCLK : sEventLog := ‘Двойной щелчок мышью’;
WM_MBUTTONDOWN : sEventLog := ‘Нажатие кнопки мыши’;
WM_MBUTTONUP : sEventLog := ‘Отжатие кнопки мыши’;
WM_MOUSEMOVE : sEventLog := ‘перемещение мыши’;
WM_MOUSEWHEEL : sEventLog := ‘Вращение колесика мыши’;
WM_RBUTTONDBLCLK : sEventLog := ‘Двойной щелчок правой кнопкой’;
WM_RBUTTONDOWN : sEventLog := ‘Нажатие правой кнопки мыши’;
WM_RBUTTONUP : sEventLog := ‘Отжатие правой кнопки мыши’;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var nid : TNotifyIconData;
begin
Load_Form.Visible:=false;
with nid do
begin
cbSize := SizeOf( TNotifyIconData );
Wnd := Form1.Handle;
uID := 1;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallbackMessage := WM_USER + 100;
hIcon := Application.Icon.Handle; // Иконка приложения 16 на 16 пикселей
szTip := ‘Имя программы’;
end;
Shell_NotifyIcon( NIM_ADD, @nid );
end;
И при закрытии удаляем иконку.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var nid : TNotifyIconData;
begin
//это важно для того чтобы не удалить чужую иконку J
with nid do
begin
cbSize := SizeOf( TNotifyIconData );
Wnd := Form1.Handle;
uID := 1;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallbackMessage := WM_USER + 100;
hIcon := Application.Icon.Handle; // Иконка приложения 16 на 16 пикселей
szTip := ‘Имя программы’;
end;
Shell_NotifyIcon( NIM_DELETE, @nid );
end;
С иконкой мы расправились переходим у Пуску. Для начала работы надо открыть Пуск с помощью этой функции:
procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage(Self.Handle, WM_SYSCOMMAND, SC_TASKLIST, 0);
end;
Так же можно поменять активность Пуск’а:
procedure TForm1.Button1Click(Sender: TObject);
begin
EnableWindow(FindWindowEx(FindWindow(‘Shell_TrayWnd’, nil), 0, ‘Button’, nil), false);
// заблокировать
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
EnableWindow(FindWindowEx(FindWindow(‘Shell_TrayWnd’, nil), 0, ‘Button’, nil), true);
// разблокировать
end;
Programming articles
Создание сайтов на шаблонах
Множество вариантов работы с графикой на канве
Шифруем файл с помощью другого файла
Перехват API функций — Основы
Как сделать действительно хороший сайт
Создание почтового клиента в Delphi 7
Применение паскаля для
решения геометрических задач
Управление windows с помощью Delphi
Создание wap сайта
Операционная система unix, термины и понятия
SQL враг или друг
Возникновение и первая редакция ОС UNIX
Оптимизация проекта в Delphi
Ресурсы, зачем нужны ресурсы
Термины программистов 20 века
Советы по созданию собственного сайта с нуля
Шифруем файл с помощью пароля
Фракталы — геометрия природы
Crypt — Delphi программа для шифрования
Рассылка, зачем она нужна и как ее организовать?
Учебник по C++ для начинающих программистов
Уроки для изучения ассемблера
Загадочный тип PCHAR
Средства по созданию сайтов
Операторы преобразования
классов is и as
Borland Developer studio 2006. Всё в одном
Создание базы данных в Delphi, без сторонних БД
Software engineering articles
25th
РАСКРУТКА САЙТОВ Продвижение, раскрутка и улучшение сайтов
Наша слава лишь
мнением народным создается.
Шекспир
Рад, что вы решили прочитать именно мою статью, т.к. подобной информации уже так много, что просто «глаза разбегаются». В данном материале я буду, в большинстве случаев, опираться на личный опыт, не оставляя без внимания, и эксперименты других, возможно даже, более бывалых людей.
25th
ОСНОВЫ DELPHI R
Тип | Имя | Описание |
функция | RadToDeg | конвертирует радианы в градусы |
функция | Random | генерирует число или число с плавающей точкой |
процедура | Randomize | генератор случайных величин |
функция | RandomRange | генерирует число в пределах введённого диапазона |
процедура | Read | читает данные из двоичного или текстового файла |
процедура | ReadLn | чмтает полную строку данных из текстового файла |
процедура | ReallocMem | изменяет размер выделенный под переменную |
функция | RecodeDate | изменяет дату переменной TDateTime |
функция | RecodeTime | изменяет время переменной TDateTime |
функция | Rect | прямоугольник с указанием 2 точек или 4 координат |
функция | RemoveDir | позволяет удалить директорию |
процедура | Rename | позволяет переименовать файл |
функция | RenameFile | позволяет переименовать файл или директорию |
Programming articles
Создание сайтов на шаблонах
Множество вариантов работы с графикой на канве
Шифруем файл с помощью другого файла
Перехват API функций — Основы
Как сделать действительно хороший сайт
Создание почтового клиента в Delphi 7
Применение паскаля для
решения геометрических задач
Управление windows с помощью Delphi
Создание wap сайта
Операционная система unix, термины и понятия
SQL враг или друг
Возникновение и первая редакция ОС UNIX
Оптимизация проекта в Delphi
Ресурсы, зачем нужны ресурсы
Термины программистов 20 века
Советы по созданию собственного сайта с нуля
Шифруем файл с помощью пароля
Фракталы — геометрия природы
Crypt — Delphi программа для шифрования
Рассылка, зачем она нужна и как ее организовать?
Учебник по C++ для начинающих программистов
Уроки для изучения ассемблера
Загадочный тип PCHAR
Средства по созданию сайтов
Операторы преобразования
классов is и as
Borland Developer studio 2006. Всё в одном
Создание базы данных в Delphi, без сторонних БД
Software engineering articles
25th
ИЗ ВВЕДЕННОЙ С КЛАВИАТУРЫ СИМВОЛЬНОЙ СТРОКИ ВСЕ ТОЧКИ И ПОДСЧИТАТЬ ДЛИНУ ОТРЕДАКТИРОВАННОЙ СТРОКИ
Programming articles
Создание сайтов на шаблонах
Множество вариантов работы с графикой на канве
Шифруем файл с помощью другого файла
Перехват API функций — Основы
Как сделать действительно хороший сайт
Создание почтового клиента в Delphi 7
Применение паскаля для
решения геометрических задач
Управление windows с помощью Delphi
Создание wap сайта
Операционная система unix, термины и понятия
SQL враг или друг
Возникновение и первая редакция ОС UNIX
Оптимизация проекта в Delphi
Ресурсы, зачем нужны ресурсы
Термины программистов 20 века
Советы по созданию собственного сайта с нуля
Шифруем файл с помощью пароля
Фракталы — геометрия природы
Crypt — Delphi программа для шифрования
Рассылка, зачем она нужна и как ее организовать?
Учебник по C++ для начинающих программистов
Уроки для изучения ассемблера
Загадочный тип PCHAR
Средства по созданию сайтов
Операторы преобразования
классов is и as
Borland Developer studio 2006. Всё в одном
Создание базы данных в Delphi, без сторонних БД
Software engineering articles
25th
ExitCode- переменная
ExitCode
Содержит код возврата при завершении приложения
var ExitCode : Integer;
Описание:
Значение ExitCode будет показано в диалоговом окне, если переменная ErrorAddr не равна 0 при завершении приложения.
Пример кода:
i : Integer;
begin
// Set up an error address so that halt shows a termination dialog
ErrorAddr := Addr(i);
// Set the program exit code
ExitCode := 8;
end;
Результат выполнения:
Runtime error 8 at 0069FC94
Programming articles
Создание сайтов на шаблонах
Множество вариантов работы с графикой на канве
Шифруем файл с помощью другого файла
Перехват API функций — Основы
Как сделать действительно хороший сайт
Создание почтового клиента в Delphi 7
Применение паскаля для
решения геометрических задач
Управление windows с помощью Delphi
Создание wap сайта
Операционная система unix, термины и понятия
SQL враг или друг
Возникновение и первая редакция ОС UNIX
Оптимизация проекта в Delphi
Ресурсы, зачем нужны ресурсы
Термины программистов 20 века
Советы по созданию собственного сайта с нуля
Шифруем файл с помощью пароля
Фракталы — геометрия природы
Crypt — Delphi программа для шифрования
Рассылка, зачем она нужна и как ее организовать?
Учебник по C++ для начинающих программистов
Уроки для изучения ассемблера
Загадочный тип PCHAR
Средства по созданию сайтов
Операторы преобразования
классов is и as
Borland Developer studio 2006. Всё в одном
Создание базы данных в Delphi, без сторонних БД
Software engineering articles
25th
Управление мышью в delphi
Все наверное хотят использовать свои курсоры. И большинству нужны не просто курсоры, а анимированные курсоры. Вот что надо сделать для загрузки курсора:
implementation
const
crMyCursor = 1;
//…
procedure TForm1.FormCreate(Sender: TObject);
begin
// Это единственный способ загрузки который я знаю
Screen.Cursors[crMyCursor] := LoadCursorFromFile(‘C:\Курсор.ani’);
// Устанавливаем курсор на форму
Cursor := crMyCursor;
end;
Теперь перейдём к быстрой настройки мыши. Вот как можно поменять кнопки мыши между собой:
SwapMouseButton(true); // Поменять
SwapMouseButton(false); // Поменять обратно
Теперь кинем на форму таймер и напишем там:
procedure TForm1.Timer1Timer(Sender: TObject);
var
position: TPoint;
begin
GetCursorPos(position);
Caption:=(‘(‘ + IntToStr(position.X) + ‘ ,’ + IntToStr(position.Y) + ‘)’);
end;
То что мы написали выводит в заголовке формы тикущие координаты курсора. Position.X – координата X; Position.Y – координата Y типа integer.
Перемещать мышь можно с помощью процедуры mouse_event(MOUSEEVENTF_MOVE, X, Y, 0, 0); где X – число, на которое сместиться курсор, в горизонтальной плоскости, из исходного положения. Y – число, на которое сместиться курсор, в вертикальной плоскости, из исходного положения.
Programming articles
Создание сайтов на шаблонах
Множество вариантов работы с графикой на канве
Шифруем файл с помощью другого файла
Перехват API функций — Основы
Как сделать действительно хороший сайт
Создание почтового клиента в Delphi 7
Применение паскаля для
решения геометрических задач
Управление windows с помощью Delphi
Создание wap сайта
Операционная система unix, термины и понятия
SQL враг или друг
Возникновение и первая редакция ОС UNIX
Оптимизация проекта в Delphi
Ресурсы, зачем нужны ресурсы
Термины программистов 20 века
Советы по созданию собственного сайта с нуля
Шифруем файл с помощью пароля
Фракталы — геометрия природы
Crypt — Delphi программа для шифрования
Рассылка, зачем она нужна и как ее организовать?
Учебник по C++ для начинающих программистов
Уроки для изучения ассемблера
Загадочный тип PCHAR
Средства по созданию сайтов
Операторы преобразования
классов is и as
Borland Developer studio 2006. Всё в одном
Создание базы данных в Delphi, без сторонних БД
Software engineering articles
25th
БЕСПЛАТНАЯ ОТПРАВКА SMS МЕГАФОН
Отправка sms
В Интернете много сайтов, которые предлагают бесплатную отправку sms сообщений, для отправки sms веб-мастера используют много разных способов, даже находить нелегальные способы.
Когда ваш телефон отправляет sms сообщение, то данное сообщение через GPRS попадает на сервер компании, а только потом на телефон получателя. А если на сервер отправить sms сообщение через Интернет? Я находил много статей, где рассматривается, как работает вся эта схема и как её обойти. И нужно было использовать средства, например Delphi или писать скрипт.
В моём городе у большинства человек мегафон. И поэтому мне было интересно найти более простой способ отправки sms на мегафон. Поэтому этот способ я вам и предлагаю.
Для бесплатной отправки sms вам не нужно искать специальные сайты, на вашем компьютере должен стоять любой почтовик. Сообщение отправляется как обыкновенноё письмо.
На экране телефона не умещается большое кол-во символов, так вот написав объёмное письмо и конечно отправив его, Вы заставляете получателя очень долго и нервно перелистывать ваше сообщение, поэтому не забывайте об этом.
Получатель sms сообщения, в качестве отправителя увидит ваш e-mail.
Если вам необходимо бесплатно отправить sms на мегафон, то вам нужно использовать следующий адрес получателя:
(вместо восьмёрки пишем семёрку) 7……(номер телефона мегафон)@sms.mgsm.ru
Примерно так 7 927 362 nnnn@sms.mgsm.ru
n — любая цифра, а nnnn — значит любые 4 цифры
25th
ОПТИМИЗАЦИЯ ПРОЕКТА В DELPHI
Введение
Здравствуйте, программисты-делфисты. Повидал я не мало многих программ написанных на делфи. Есть хорошие, есть не очень, но их размер меня всегда поражал. 0.6, 1, 5 и даже 10 мегабайт!!! А программки то — тьфу, явно не офис или что-то громоздкое. Вот и решил я написать статью, как правильно оптимизировать свой проект так, чтоб не было казусов: программа должна 2 числа +,-,/,* а занимает места больше чем 400 Кб. Не судите строго, а если есть замечание, пишите: ZETRIX-Soft@mail.ru
- Надо учесть для чего пишется программа, если она что-то должна выполнить, и закрыться (ничего не отображая), то не надо писать так Form1.visible:=false. Надо полностью удалить форму (View\Project Manager\Ваш проект\Unit1 и нажать кнопку Удалить. Так же, в данном случае, можно использовать Win API. Процесс создания форм, кнопок достаточно сложен (по сравнению с обычным методом), но достаточно эффективен.
- Непосредственно настроить компилятор (программа получится с максимальным быстродействием). Заходим в меню Project\Options, заходим на вкладку Compiler и убираем все галочки из Runtime errors и Debugging. Внимание! Это можно безбоязненно делать лишь в том случает, когда Ваша программа полностью отлажена, и обработку всех исключительных ситуаций Вы учли.
- Настройки пакетов (самый важный пункт ). Заходим в меню Project\Options, заходим на вкладку Packages. Ставим флажок Build with runtime packages. И смотрим, что у нас в строке там написано (Вот мой список: vcl; rtl; indy; vclx; dbrtl; vcldb; bdertl; vclie; vclshlctrls; IntrawebDB_50_70; Intraweb_50_70; Rave50CLX; Rave50VCL; dclOfficeXP; IcsDel50;inet;xmlrtl; inetdbbde; inetdbxpress; dsnap; dsnapcon; soaprtl; VclSmp; webdsnap; websnap; ibxpress; vclactnband; visualclx; visualdbclx; dbexpress; dbxcds; inetdb; vcldbx; adortl; teeui; teedb; tee; dss).О боже, скажете Вы, если узнаете: ВСЁ что в этой строке по умолчанию компилируется в ваш проект! После пары манипуляций там остаётся: vcl и всё. Внимание! Если у Вас уже куча компонентов, т.е. у Вас уже есть написанная программа, не удаляйте всё сразу, если Вы удалите что-то нужное, то во-первых размер программы увеличится, а во-вторых программа может не работать на других ПК. Если Вы что-то нечаянно удалили, или хотите добавить, то нажмите кнопку Add… и добавите нужный пакет. P.S.: После этих преобразований, скомпилированный пустой проект занимает 16,5 Кб. Всё же не 300…
- Если ваша программа редко использует какие либо функции или процедуры, то вынесите их в DLL файл, чтоб память не засоряли (хотя сейчас это и не так важно, памяти оперативной «куча» 1 — 2 гигабайта это уже не редкость, но всё же это подчеркнёт Ваш профессионализм).
- Если Ваша программа использует графические данные, звуки, видео, и всё это в достаточном кол-ве, то не надо создавать файлы ресурсов, они всё равно скомпилированы в 1 exe-файл. Лучше создать специальную папку вместе с программой (ну как в играх многих например DATA) и держать их там, конечно есть минус — если переносить программу, то и файлы надо переносить за собой, но есть плюс — динамически использовать все эти данные, т.е. если вам надо в Image вывести картинку, то при загрузке программы не надо сразу загружать этот рисунок, а загрузить только тогда, когда, например, будет открыта форма с этим Image или пользователь что-то нажмёт.
Кузин Вадим ~ ZETRIX-Soft
Programming articles
Создание сайтов на шаблонах
Множество вариантов работы с графикой на канве
Шифруем файл с помощью другого файла
Перехват API функций — Основы
Как сделать действительно хороший сайт
Создание почтового клиента в Delphi 7
Применение паскаля для
решения геометрических задач
Управление windows с помощью Delphi
Создание wap сайта
Операционная система unix, термины и понятия
SQL враг или друг
Возникновение и первая редакция ОС UNIX
Оптимизация проекта в Delphi
Ресурсы, зачем нужны ресурсы
Термины программистов 20 века
Советы по созданию собственного сайта с нуля
Шифруем файл с помощью пароля
Фракталы — геометрия природы
Crypt — Delphi программа для шифрования
Рассылка, зачем она нужна и как ее организовать?
Учебник по C++ для начинающих программистов
Уроки для изучения ассемблера
Загадочный тип PCHAR
Средства по созданию сайтов
Операторы преобразования
классов is и as
Borland Developer studio 2006. Всё в одном
Создание базы данных в Delphi, без сторонних БД
Software engineering articles
25th
УРОК 35 ВСТРОЕННЫЕ ФУНКЦИИ И АССЕМБЛЕРНЫЕ КОДЫ
Начиная с урока 8, ваши программы интенсивно использовали функции. Как вы уже знаете, единственное неудобство при использовании функций состоит в том, что они увеличивают издержки (увеличивают время выполнения), помещая параметры в стек при каждом вызове. Из данного урока вы узнаете, что для коротких функций можно использовать метод, называемый встроенным кодом, который помещает операторы функции для каждого ее вызова прямо в программу, избегая таким образом издержек на вызов функции. Используя встроенные (inline) функции, ваши программы будут выполняться немного быстрее. К концу этого урока вы освоите следующие основные концепции:
- Для улучшения производительности за счет уменьшения издержек на вызов функции вы можете заставить компилятор C++ встроить в программу код функции, подобно тому, как это делается при замещении макрокоманд.
- Используя встроенные (inline) функции, ваши программы остаются удобными для чтения (читающий программу видит вызов функции), но вы избегаете издержек на вызов функции, которые вызваны помещением параметров в стек и их последующим извлечением из стека, а также переходом к телу функции и последующим возвратом из нее.
- В зависимости от требований, предъявляемых к вашей программе, иногда вам потребуется использовать язык ассемблера для решения определенной задачи.
- Для упрощения применения программирования на языке ассемблера C++ позволяет определить функции на встроенном языке ассемблера внутри ваших программ на C++.
ВСТРОЕННЫЕ ФУНКЦИИ
Когда вы определяете в своей программе функцию, компилятор C++ переводит код функции в машинный язык, сохраняя только одну копию инструкций функции внутри вашей программы. Каждый раз, когда ваша программа вызывает функцию, компилятор C++ помещает в программу специальные инструкции, которые заносят параметры функции в стек и затем выполняют переход к инструкциям этой функции. Когда операторы функции завершаются, выполнение программы продолжается с первого оператора, который следует за вызовом функции. Помещение аргументов в стек и переход в функцию и из нее вносит издержки, из-за которых ваша программа выполняется немного медленнее, чем если бы она размещала те же операторы прямо внутри программы при каждой ссылке на функцию. Например, предположим, что следующая программа CALLBEEP.CPP вызывает функцию show_message, которая указанное число раз выдает сигнал на динамик компьютера и затем выводит сообщение на дисплей:
#include <iostream.b>
void show_message(int count, char *message)
{
int i;
for (i = 0; i < count; i++) cout << ‘\a’;
cout << message << endl;
}void main(void)
{
show_message(3, «Учимся программировать на языке C++»);
show_mes sage(2, «Урок 35»);
}
Следующая программа NO_CALL.CPP не вызывает функциюshow_message. Вместо этого она помещает внутри себя те же операторы функции при каждой ссылке на функцию:
#include <iostream.h>
void main (void)
{
int i;
for (i = 0; i < 3; i++) cout << ‘\a’;
cout << » Учимся программировать на языке C++» << endl;
for (i = 0; i < 2; i++) cout << ‘\a’;
cout << «Урок 35» << endl;
}
Обе программы выполняют одно и то же. Поскольку программа NO_CALL не вызывает функцию show_message, она выполняется немного быстрее, чем программа CALLBEEP. В данном случае разницу во времени выполнения определить невозможно, но, если в обычной ситуации функция будет вызываться 1000 раз, вы, вероятно, заметите небольшое увеличение производительности. Однако программа NO_CALL более запутана, чем ее двойник CALL_BEEP, следовательно, более тяжела для восприятия.
При создании программ вы всегда должны попытаться определить, когда лучше использовать обычные функции, а когда лучше воспользоваться встроенными функциями. Для более простых программ предпочтительно использовать обычные функции. Однако, если вы создаете программу, для которой производительность имеет первостепенное значение, вам следовало бы уменьшить количество вызовов функций. Один из способов уменьшения количества вызовов функций состоит в том, чтобы поместить соответствующие операторы прямо в программу, как только что было сделано в программе NO_CALL. Однако, как вы могли убедиться, замена только одной функции внесла значительную путаницу в программу. К счастью, C++ предоставляет ключевое слово inline, которое обеспечивает лучший способ.
Использование ключевого слова inline
При объявлении функции внутри программы C++ позволяет вам предварить имя функции ключевым словом inline. Если компилятор C++ встречает ключевое слово inline, он помещает в выполнимый файл (машинный язык) операторы этой функции в месте каждого ее вызова. Таким образом, можно улучшить читаемость ваших программ на C++, используя функции, и в то же время увеличить производительность, избегая издержек на вызов функций. Следующая программа INLINE.CPP определяет функции тах и min как inline:
#include <iostream.h>
inline int max(int a, int b)
{
if (a > b) return(a);
else return(b) ;
}inline int min(int a, int b)
{
if (a < b) return(a);
else return(b);
}void main(void)
{
cout << «Минимум из 1001 и 2002 равен » << min(1001, 2002) << endl;
cout << «Максимум из 1001 и 2002 равен » << max(1001, 2002) << endl;
}
В данном случае компилятор C++ заменит каждый вызов функции на соответствующие операторы функции. Производительность программы увеличивается без ее усложнения.
О встроенных функциях
Если компилятор C++ перед определением функции встречает ключевое слово inline, он будет заменять обращения к этой функции (вызовы) на последовательность операторов, эквивалентную выполнению функции. Таким образом ваши программы улучшают производительность, избавляясь от издержек на вызов функции и в то же время выигрывая в стиле программы, благодаря использованию функций.
ВСТРОЕННЫЕ ФУНКЦИИ И КЛАССЫ
Как вы уже знаете, при определении класса вы определяете функции этого класса внутри или вне класса. Например, класс employee определяет свои функции внутри самого класса:
class employee
{
public:
employee(char *name, char *position, float salary){
strcpy(employee::name, name);
strcpy(employee::position, position);
employee::salary = salary;
}void show_employee(void)
{
cout << «Имя: » << name << endl;
cout << «Должность: » << position << endl;
cout << «Оклад: $» << salary << endl;
}private:
char name [64];
char position[64];
float salary;
};
Размещая подобным образом функции внутри класса, вы тем самым объявляете их встроенными {inline). Если вы создаете встроенные функции класса этим способом, C++ дублирует функцию для каждого создаваемого объекта этого класса, помещая встроенный код при каждой ссылке на метод (функцию) класса. Преимущество такого встроенного кода состоит в увеличении производительности. Недостатком является очень быстрое увеличение объема самого определения класса. Кроме того, включение кода функции в определение класса может существенно запугать класс, делая его элементы трудными для восприятия.
Для улучшения читаемости определений ваших классов вы можете вынести функции из определения класса, как вы обычно и делаете, и разместить ключевое слово inline перед определением функции. Например, следующее определение заставляет компилятор использовать встроенные операторы для функции show_employee:
inline void employee::show_employee(void)
{
cout << «Имя: » << name << endl;
cout << «Должность: » << position << endl;
cout << «Оклад: $» << salary << endl;
}
ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ ЯЗЫКА АССЕМБЛЕРА
Как вы знаете из урока 1, программисты могут создавать программы, используя широкий спектр языков программирования. Затем компилятор преобразует операторы программы в машинный код (нули и единицы), который понимает компьютер. Каждый тип компьютеров поддерживает промежуточный язык, называемый языком ассемблера, который попадает в категорию между машинным языком и языком программирования, таким как C++.
Язык ассемблера использует другие символы для представления инструкций машинного языка. В зависимости от назначения ваших программ, возможно, вам потребуется выполнить операции низкого уровня, для которых необходимо использовать операторы языка ассемблера. В таких случаях вы можете использовать оператор C++ asm для встраивания операторов языка ассемблера в программу. Большинство создаваемых вами программ не потребуют операторов языка ассемблера. Следующая программа USE_ASM.CPP использует оператор asm, чтобы вставить операторы языка ассемблера, необходимые для озвучивания динамика компьютера в среде MS-DOS:
#include <iostream.h>
void main(void)
{
cout << «Сейчас будет звонить!» << endl;
asm{
MOV AH,2
MOV DL,7
INT 21H
}cout << «Есть!» << endl;
}
Как видите, используя оператор asm, программа комбинирует C++ и операторы языка ассемблера.
ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ
Встроенные функции улучшают производительность ваших программ, уменьшая издержки на вызов функций. Из этого урока вы узнали, как и где использовать встроенные функции в своих программах. Вы также узнали, что иногда вашим программам необходимо использовать язык ассемблера для решения определенных задач. Из урока 36 вы узнаете, как ваши программы могут обратиться к аргументам командной строки, которые пользователь вводит при запуске программы. Однако, прежде чем перейти к уроку 36, убедитесь, что вы освоили следующие основные концепции:
-
- Помещение параметров в стек и переход к функции и из нее вносит издержки, из-за которых ваша программа выполняется немного медленнее.
- Ключевое слово inline заставляет компилятор C++ заменять вызов функции эквивалентной последовательностью операторов, которые бы выполняла эта функция. Поскольку встроенные операторы избавляют от издержек на вызов функции, программа будет выполняться быстрее.
- Если вы используете встроенные функции внутри класса, каждый создаваемый вами объект использует свои собственные встроенные операторы. Обычно все объекты одного и того же класса совместно используют один и тот же код функции.
- Ключевое слово asm позволяет вам встраивать операторы языка ассемблера в программы на C++.
Предыдущий урок | Следующий урок
Programming articles
Создание сайтов на шаблонах
Множество вариантов работы с графикой на канве
Шифруем файл с помощью другого файла
Перехват API функций — Основы
Как сделать действительно хороший сайт
Создание почтового клиента в Delphi 7
Применение паскаля для
решения геометрических задач
Управление windows с помощью Delphi
Создание wap сайта
Операционная система unix, термины и понятия
SQL враг или друг
Возникновение и первая редакция ОС UNIX
Оптимизация проекта в Delphi
Ресурсы, зачем нужны ресурсы
Термины программистов 20 века
Советы по созданию собственного сайта с нуля
Шифруем файл с помощью пароля
Фракталы — геометрия природы
Crypt — Delphi программа для шифрования
Рассылка, зачем она нужна и как ее организовать?
Учебник по C++ для начинающих программистов
Уроки для изучения ассемблера
Загадочный тип PCHAR
Средства по созданию сайтов
Операторы преобразования
классов is и as
Borland Developer studio 2006. Всё в одном
Создание базы данных в Delphi, без сторонних БД
Software engineering articles
25th
ОТСОРТИРОВАТЬ ЭЛЕМЕНТЫ МАТРИЦЫ ПО УБЫВАНИЮ
Организовать заполнение двумерного массива целыми числами случайным образом используя функцию RAndom. Отсортировать элементы матрицы по убыванию. Вывести на экран массив до и после изменения.
Programming articles
Создание сайтов на шаблонах
Множество вариантов работы с графикой на канве
Шифруем файл с помощью другого файла
Перехват API функций — Основы
Как сделать действительно хороший сайт
Создание почтового клиента в Delphi 7
Применение паскаля для
решения геометрических задач
Управление windows с помощью Delphi
Создание wap сайта
Операционная система unix, термины и понятия
SQL враг или друг
Возникновение и первая редакция ОС UNIX
Оптимизация проекта в Delphi
Ресурсы, зачем нужны ресурсы
Термины программистов 20 века
Советы по созданию собственного сайта с нуля
Шифруем файл с помощью пароля
Фракталы — геометрия природы
Crypt — Delphi программа для шифрования
Рассылка, зачем она нужна и как ее организовать?
Учебник по C++ для начинающих программистов
Уроки для изучения ассемблера
Загадочный тип PCHAR
Средства по созданию сайтов
Операторы преобразования
классов is и as
Borland Developer studio 2006. Всё в одном
Создание базы данных в Delphi, без сторонних БД
Software engineering articles
Облако меток
css реестр ассемблер timer SaveToFile ShellExecute программы массив советы word MySQL SQL ListView pos random компоненты дата LoadFromFile form база данных сеть html php RichEdit indy строки Win Api tstringlist Image мысли макросы Edit ListBox office C/C++ memo графика StringGrid canvas поиск файл Pascal форма Файлы интернет Microsoft Office Excel excel winapi журнал ПРОграммист DelphiКупить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)