
- •Вопрос 2. Экземпляры объекта. Описание объектных переменных. Наследование. Объекты-родители, объекты-потомки. Пример.
- •Вопрос 5. Область действия метода и параметр Self. Формальные параметры методов.
- •Вопрос 8. Стандартные процедуры и функции для работы с динамической памятью.
- •Вопрос 11. Понятие событийно-ориентированного программирования. Процедуры обработки событий.
- •Вопрос 14 Динамические массивы. Процедуры для работы с динамическими массивами.
- •Вопрос 17 Понятие класса. Директивы класса.
- •Вопрос 20 Способы ввода-вывода данных. Диалоговые окна сообщений.
- •Вопрос 23 Защищенный блок try..Finally.
- •Вопрос 26 Родительские и дочерние компоненты. Владельцы компонентов.
- •Вопрос 29 Свойства объекта Application.
- •Вопрос 32. Статическая загрузка dll.
- •Вопрос 35 Функции api. CloseWindow, GetWindowText, SetWindowText.
- •Вопрос 38 z-порядок окон. Функция IsWindowVisible.
Вопрос 32. Статическая загрузка dll.
DLL возможно загружать двумя способами:
статически
динамически
Давайте создадим простую библиотеку DLL:
{Project file name: c:\example\exdouble\exdouble.dpr}
library ExDouble;
// my simple dll
function calc_double(r: real): real; stdcall;
begin
result := r * 2;
end;
exports
calc_double index 1;
end;
Теперь посмотрим, как её можно загружать:
Статическая загрузка DLL
При таком способе загрузки достаточно поместить файл DLL в директорию приложения или в директорию Windows, или в Windows\System, Windows\Command. Однако, если система не найдёт этого файла в этих директория, то высветится сообщение об ошибке (DLL не найдена, или что-то в этом духе).
unit untMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
function calc_double(r: real): real; stdcall; external 'ExDouble.dll';
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
// в окошке сообщения будет цифра 21
ShowMessage(FloatToStr(calc_double(10.5)));
end;
end.
Вопрос 35 Функции api. CloseWindow, GetWindowText, SetWindowText.
Функция CloseWindow свертывает (но не разрушает) заданное окно.
BOOL CloseWindow(HWND hWnd // дескриптор окна, которое свертывается);
Параметры
hWnd
[in] Дескриптор окна, которое должно быть свернуто
Функция GetWindowText копирует текст заголовка определяемого окна (если окно имеет его) в буфер. Если заданное окно является органом управления, копируется его текст. Однако функция GetWindowText не может извлекать текст органа управления в другом приложении.
Синтаксисint GetWindowText(
HWND hWnd, // дескриптор окна или элемента
// управления с текстом
LPTSTR lpString, // адрес буфера для текста
int nMaxCount // максимальное число символов
// для копирования
);
Параметры
hWnd
[in] Дескриптор окна или органа управления, содержащего текст.
lpString
[out] Указывает на буфер, который примет текст. Указатель на буфер, который получит текст. Если строка является такой же длины или длиннее, чем буфер, она обрезается и завершается символом NULL.
nMaxCount
Устанавливает максимальное число символов для копирования в буфер, включая символ NULL. Если текст превышает это ограничение, он усекается.
Функция SetWindowText изменяет текст заголовка заданного окна (если таковой имеется). Если определяемое окно - орган управления, то изменяется его текст. Однако SetWindowText не может изменить текст органа управления в другом приложении.
Синтаксис
BOOL SetWindowText(
HWND hWnd, // дескриптор окна или элемента управления
LPCTSTR lpString // адрес строчки
);
Параметры
hWnd
[in] Дескриптор окна или органа управления, текст которого должен быть изменен.
lpString
[in] Указатель на строку с нулевым символом в конце, которую нужно использовать как новый заголовок или текст органа управления.