Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

Тут можно читать онлайн Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Советы по Delphi. Версия 1.4.3 от 1.1.2001
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - описание и краткое содержание, автор Валентин Озеров, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

…начиная с 1001. Смотрите другие файлы…

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать книгу онлайн бесплатно, автор Валентин Озеров
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

r := Random(3);

caser of

0 : begin

b := MyBoolean.Create;

raiseb;

end;

1 : begin

i := MyInteger.Create;

raisei;

end;

2 : begin

c := MyClass.Create;

raisec;

end;

end;

end;

procedureTForm1.MyProc;

begin

try

Chameleon;

exceptonMyBoolean doShowMessage('Функция возвратила класс MyBoolean');

onMyInteger doShowMessage('Функция возвратила класс MyInteger');

onMyClass doShowMessage('Функция возвратила класс MyClass');

end;

end;

procedureTForm1.Button1Click(Sender: TObject);

begin

Chameleon;

end;

end.

Взгляните на тип данных Variant в D2: следующий код

functionAnyType( constTypeParm: integer): Variant;

begin

case TypeParm of

1: Result := 1;

2: Result := 2.0;

3: Result := 'Три';

4: Result := StrToDate('4/4/1944');

end;

end;

абсолютно бестолковый, но полностью корректный!

Следующий код содержит объявление трех функций, принимающих на входе один и тот же параметр, но выдающих результаты различных типов (результат физичиски один и тот же, и занимает он 4 байта). Я не думаю, что можно одурачить delphi, чтобы с помощью этого метода возвратить строку. Это может привести к разрушению менеджера кучи. Вместо этого вызывайте необходимую вам функцию. Каждый вызов передается MyFuncRetAnything, а P1 определяет возвращаемый тип. Если хотите, можете написать другую обертку, делающую для вас еще и приведение типов.

3 вызова, 1 код.

Я понимаю, что это в действительности не то, что нужно, по я просто хотел продемонстрировать другой способ. (вы можете возвращать строки как тип PChar, который также занимает 4 байта). Вы должны использовать некоторую память, распределяемую вызовом процедуры (может быть передавать результаты как P2?).

{моя форма имеет 3 метки, одну кнопку и этот код}

var

MyFuncRetInt : Function(P1, P2 : Integer) : Integer;

MyFuncRetBool : Function(P1, P2 : Integer) : LongBool;

MyFuncRetPointer : Function(P1, P2 : Integer) : Pointer;

functionMyFuncRetAnything (P1, P2 : Integer) : Integer;

var

RetPointer : Pointer;

RetBool : LongBool;

RetInteger : Integer;

begin

RetPointer := nil;

RetBool := False;

RetInteger := 4711;

caseP1 of

1 : Result := Integer (RetPointer);

2 : Result := Integer (RetBool);

3 : Result := RetInteger;

end;

end;

procedureTForm1.Button1Click(Sender: TObject);

begin

ifMyFuncRetBool (2, 1900) thenLabel1.Caption := 'True'

elseLabel1.Caption := 'False';

Label2.Caption := IntToStr(MyFuncRetInt(3, 1900));

Label3.Caption := IntToHex(Integer(MyFuncRetPointer(1, 1900)), 16);

end;

initialization

MyFuncRetInt := @MyFuncRetAnything;

MyFuncRetBool := @MyFuncRetAnything;

MyFuncRetPointer := @MyFuncRetAnything;

end.

Преобразование формата MS BINARY в IEEE

Delphi 1

«Использование, независимое от машинного уровня» не так просто в реализации с процессорами, выпущенными до Intel-го математического сопроцессора 80x87. Я не уверен в том, что процессоры 80x86 имели какие-либо родные инструкции для выполнения операций с плавающей точкой. По-видимости, поэтому Microsoft создал свой собственный формат для чисел с плавающей точкой; он сам осуществлял всю арифметику с помощью библиотеки времени выполнения. Сегодня 80x87 осуществляет такую арифметику автоматически, и IEEE теперь стандарт.

Delphi хранит следующие типы чисел с плавающей точкой в формате IEEE:

Single 4 байт
Double 8 байт
Extended 10 байт

Обратите внимание на то, что тип Real (6 байт) отсутствует в данном списке. Я могу ошибаться, но мне кажется что тип Real – синтезированный в Pascal тип; он может без особых проблем существовать на процессорах ниже 80x87.

[В сторону: электронная справка Delphi сообщает, что по умолчанию (через директиву компилятора $N+), компилятор будет генерировать код для выполнения ВСЕХ операций с плавающей точкой, используя инструкции 80x87, включая тип Real. Также, для работы с типом Real, компилятор генерирует вызовы библиотеки времени выполнения, или же я полностью неправ в вышесказанном! :) ]

Во всяком случае, в электронной справке Visual Basic я увидел, что VB оперирует с типами данных Single и Double, которые также относятся к типу IEEE, и идентичны Delphi-типам Single и Double. Тем не менее, в справке отсутствует упоминание «Microsoft Binary Format».

Для того, чтобы разобраться в вопросе, я «опустился» до DOS и запустил QBasic, новую версию интерпретатора Microsoft QuickBasic, включаемую теперь в поставку DOS. Если мы посмотрим в электронную справку, то увидим следующее:

MKSMBF$ и MKDMBF$ преобразуют числа формата IEEE в «числовые строки» формата Microsoft-Binary, которые могут храниться в строковых переменных типа FIELD. CVSMBF и CVDMBF преобразуют эти строки обратно в числа формата IEEE.

MKSMBF$(выражение-единичной-точности!)

MKDMBF$(выражение-двойной-точности#)

CVSMBF (4-байтовая-числовая-строка)

CVDMBF (8-байтовая-числовая-строка)

Функция Возвращаемое значение
MKSMBF$ 4-байтовая строка, содержащая число в формате Microsoft-Binary-format
MKDMBF$ 8-байтовая строка, содержащая число в формате Microsoft-Binary-format
CVSMBF Число единичной точности в формате IEEE
CVDMBF Число двойной точности в формате IEEE

Эти функции могут оказаться полезными при поддержке файлов данных, созданных с помощью старых версий Basic.

Суммируя вышесказанное, можно дать 3 рекомендации для получения доступа к вашим «MetaStock»-файлам:

1. Напишите вашу программу в QBasic/DOS

2. Найдите замену (с учетом совместимости с Delphi) для функций преобразований, упомянутых выше.

3. Напишите эти функции сами. Вы должны найти документацию для старых типов Single и Double, применявшихся в «Microsoft Binary Format», возможно в справочных файлах старых версий MS Basic.

Переменные

Статические переменные

Delphi 1

Да, это работает. Объявите переменную в секции const, например:

procedurep;

constMyVariable : Integer = 0;

begin

Inc(MyVariable);

end;

В нашем примере переменная MyVariable содержит количество вызовов P.

Тем не менее, это лучшее решение, чем использование взамен какого-либо поля объекта (если это возможно).

Разное

Переключение ключей компилятора

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Валентин Озеров читать все книги автора по порядку

Валентин Озеров - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Советы по Delphi. Версия 1.4.3 от 1.1.2001 отзывы


Отзывы читателей о книге Советы по Delphi. Версия 1.4.3 от 1.1.2001, автор: Валентин Озеров. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x