Обучающие курсы:

Обучение профессии "Разработчик C#" + стажировка в Mail.ru
Обучение профессии "Разработчик Python" + трудоустройство
Обучение профессии "Веб-разработчик" + стажировка в Mail.ru


Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Первая строка обработчика — это функция TextOut, принимающая в качестве параметров контекст устройства (hdc), горизонтальную и вертикальную координаты в клиентской области окна, указатель на строку текста и количество элементов для вывода на экран.

Поскольку мы не можем непосредственно выводить числа на экран, то необходимо преобразовать наш массив чисел в последовательность строк. Преобразование вещественного числа в последовательность символов можно выполнить при помощи функции gcvt, принимающей в качестве параметров вещественное число, количество знаков для вывода и указатель на символьный буфер для хранения результата преобразования. Цикл for мы используем для вывода на экран всех 9 элементов массива.
Аналогично выполняется и вывод максимального элемента массива на экран. Но перед ЭТИМ МЫ Д О Л Ж Н Ы вызвать Процедуру maxreal:
xres = maxreal(xarray, 9);
Поскольку xres — указатель, то для правильной работы функции gcvt необходимо передать параметры следующим образом:
gcvt(*xres, 5, buf);

Максимум после выполнения этого оператора теперь находится в переменной buf и отображается на экране функцией TextOut.
Необходимо также включить следующее объявление ассемблерной процедуры в текст приложения:
extern "С" float* _stdcall maxreal(float *px, int sx) ;

Обычно окно стандартного приложения имеет белый фон. В классе окна он определяется через параметр wcex.hbrBackground. Чтобы поменять цвет фона, например, на серый, можно воспользоваться функцией Getstockobject с соответствующим параметром. Фрагмент кода демонстрирует, как можно задать другие параметры цвета фона, заменив стандартный белый цвет на серый:
// wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+l);
wcex.hbrBackground = (HBRUSH)GetStockObj ect(GRAYJ3RUSH);

До сих пор мы работали с переменными, представляющими собой числовые значения целого или вещественного типа. Далее мы рассмотрим примеры приложений, выполняющих операции со строками и символьными массивами. Начнем с относительно простых приложений.
В следующем примере необходимо передать в вызывающую программу адрес строки символов и отобразить саму строку в окне приложения.
Процедура на ассемблере представлена в листинге 3.41.
Листинг 3.41. Ассемблерная процедура, передающая строку символов
.386
.model flat
public strshow
.data
TESTSTR.DB "Hello from subroutine", 0
. code
strshow proc
mov ЕАХ, offset TESTSTR
ret
strshow endp
end

Процедура очень проста. Она возвращает адрес строки TESTSTR В регистре ЕАХ.
В Delphi-приложении определим внешнюю процедуру strshow:
implementation
{$R *.dfm}
{$L STRSHOW.OBJ}
function strshow: PChar; stdcaii; external;

Строка из процедуры strshow будет отображаться при нажатии любой кнопки мыши в окне приложения. Исходный текст обработчика этого события включает в себя следующий фрагмент кода (листинг 3.42).
Листинг 3.42. Обработчик нажания кнопки мыши, выводящий строку символов procedure TForml.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Canvas.Font.Height := -20;
Canvas.Font.Color := clWhite;
Canvas.TextOut(Rect.Left + 50, Rect.Top + 50, strshow);
end;

Для вывода строки текста в окно воспользуемся функцией TextOut контекста устройства. В этом обработчике можно задать также параметры шрифта: высоту и цвет.
В секции var исходного модуля необходимо определить структуру Rect, содержащую координаты клиентской области окна:
var
Forml: TForml;
Rect: TRect;

Обратите внимание, как определена вызываемая внешняя процедура strshow. Она возвращает адрес строки в указателе типа pchar. Для обработки строк внешними процедурами необходимо, чтобы они оканчивались нулем, поэтому их нужно объявлять через указатели этого типа.


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru