Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для 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. Для обработки
строк внешними процедурами необходимо, чтобы они оканчивались нулем,
поэтому их нужно объявлять через указатели этого типа.
<< Назад В начало Далее >> |
|