Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Как заставить работать DelphiX и UnDelphiX под Delphi6

Оформил: DeeCo

Автор: Michael Wilson

Введение

Эта статья расскажет вам как откомпилировать известные библиотеки DelphiX и UnDelphiX под Delphi 6.0. Весь процесс займет не больше 15-20 минут, кроме того вы изучите общие приемы, которые могут помочь в аналогичных ситуациях. Почему это статья, а не, скажем, патч или дополнение к Delphi? Есть две причины:

1) По соглашению об использовании библиотеки ("TERMS AND CONDITIONS OF USE"), нельзя рапространять измененные части дистрибутива DelphiX.

2) Действия, которые необходимо совершить для конвертации проекта под Delphi 6.0, делают DelphiX несовместимой для использования в Delphi 3-5.

Предупреждение: пожалуйста, сохраните резервную копию всех изменяемых файлов. Методы, изложенные здесь, протестированы на Delphi 6.0 Personal, если у вас другая редакция (например, Professional), могут возникнуть непредвиденные проблемы.

Итак, перекомпиляция:

Шаг 1: Во-первых, нужно убедиться, что у вас установлена последняя версия DelphiX. Ее можно скачать с этого сайта. После распаковки архива запустите Delphi 6. Не запускайте файл install_for?.exe!

Шаг 2: В меню File выберите пункт Open и откройте DelphiX_for5.dpk. Delphi 6 преобразует пакет к 6-й версии.

Сохраните пакет как DelphiX_for6.dpk

Шаг 3: Попробуйте нажать кнопку Install. Компилятор покажет вам ошибки, которые нужно исправить. Все ошибки относятся к модулю DXRender.pas.

[ Замечание: если вы компилируете библиотеку UnDelphiX]

Данное изменение касается вас только в случае компиляции библиотеки UnDelphiX. Этот фрагмент кода:

var
  NilGUID: TGUID absolute 0;

… нужно заменить на …

var
  NilGUID: TGUID;

[ Замечание: если вы компилируете библиотеку UnDelphiX]

Шаг 4: Первый тип ошибок, которые нужно исправить - это ошибка "Operand Size Mismatch". Всего должно быть около 40-50 ошибок такого типа. Исправить ее очень легко:

mov eax, Dest;
add eax, TDXRMachine_Color.R + 1 // bad statement

... заменяется на ...

mov eax, Dest;
add eax, BYTE(TDXRMachine_Color.R + 1) // good statement

Этот фрагмент просто извлекает младшие 8 бит TDXRMachine_Color.R - вам нужно исправить все строки, где есть ссылка на TDXRMachine_Color. Это делается очень легко с помощью пункта меню Search -> Replace...

Шаг 5: Второй тип ошибок, требующих исправления, - это "Inline Assember Syntax". Всего будет порядка 10-20 ошибок этого типа и они всегда возникают, если в исходном тексте есть упоминание об _AddTable или _SubTable. Исправляется ошибка также просто:

movzx edx, byte[offset _AddTable + edx + ebx]

... заменяется на ...

movzx edx, byte[offset(_AddTable + edx + ebx)]

После пройденных шагов компиляция должна заканчиваться только с одной фатальной ошибкой и одним предупреждением.

Шаг 6: Последняя и самая неприятная ошибка, связанная с модулем DsgnIntf.pas. Из-за нее не компилируется модуль DxReg.pas библиотеки DelphiX.

Есть два способа исправить ошибку:

1) Delphi Personal: во-первых, удалите все строки под объявлениями типов в DXReg.Pas. Затем удалите ссылки на RegisterComponentEditor и RegisterPropertyEditor в процедуре Register. Наконец, удалите весь код, который находится ниже процедуры RegisterComponents (убедитесь, что модуль по-прежнему заканчивается "end."). После вышеописанных действий модель DXReg.Pas должен выглядеть вот так:

unit DXReg;

interface

uses
  Windows, SysUtils, Classes, Forms, Dialogs, Graphics, TypInfo,
  DXDraws, DXSounds, DIB, Wave, DXInput, DXPlay, DXSprite,
  DXClass;

procedure Register;

implementation

const
  SNone = '(None)';
  SSettingImage = '&Image...';
  SSettingWave = '&Wave...';
  SDXGFileFilter = 'DXG file(*.dxg)|*.dxg|All files(*.*)|*.*';
  SDXGOpenFileFilter =
    'DXG file(*.dxg)|*.dxg|Bitmap file(*.bmp)|*.bmp|All files(*.*)|*.*';
  SDXWFileFilter = 'DXW file(*.dxw)|*.dxg|All files(*.*)|*.*';
  SDXWOpenFileFilter =
    'DXW file(*.dxw)|*.dxw|Wave file(*.wav)|*.wav|All files(*.*)|*.*';
  SSinglePlayer = '&Single player';
  SMultiPlayer1 = 'Multi player &1';
  SMultiPlayer2 = 'Multi player &2';
  SOpen = '&Open...';
  SSave = '&Save..';

procedure Register;
begin
  RegisterComponents('DelphiX',
    [TDXDraw,
    TDXDIB,
      TDXImageList,
      TDX3D,
      TDXSound,
      TDXWave,
      TDXWaveList,
      TDXInput,
      TDXPlay,
      TDXSpriteEngine,
      TDXTimer,
      TDXPaintBox]);
end;

end.

С таким решением проблемы вы не сможете использовать редактор свойств, включенный в DelphiX.

2) Delphi Professional: решение проблемы с профессиональной версией Delphi была подсказана Tommy "QuazzeMan" Jonsson:

a) В модуле DXReg.pas замените ссылку на DsgnIntf в списке USES на DesignIntf.
b) Добавьте DesignEditors в список USES модуля DXReg.Pas
c) Добавьте DesignIDE в секцию REQUIRED пакета

Шаг 7: Все, можно наслаждаться работой DelphiX и UnDelphiX в шестой версии Delphi.

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay