Внешний вид сайта:

Использование DLL библиотеки Cards.dll в играх

Динамическая библиотека Cards.dll содержит изображения игральных карт, которые используются во многих играх Windows. Например, в Solitaire, Пиковая Дама и других. Вы можете использовать эту DLL в Ваших проектах приложений для отображения карт.

Преимущество использования этой библиотеки DLL в Ваших приложениях – экономия места, так как эта библиотека уже находится в операционной системе Windows XP. Для Windows 7 нужно эту библиотеку DLL положить в папку с проектом или папку Windows.

На самом деле есть две версии этой библиотеки – 16-разрядная (Windows 95 и Windows 98) и 32-разрядная версия (Windows NT, Windows 2000 и Windows XP). Мы будем использовать 32-битную версию.

В библиотеке DLL существует пять экспортируемых функций.

  • cdtAnimate - в нынешних версиях Cards.dll не поддерживает эту функцию.
  • cdtDraw - выводит изображение одной карты в оригинальном размере.
  • cdtDrawExt - аналогично cdtDraw. Разница состоит лишь в том, что в этой функции имеются два дополнительных параметра, которые позволяют указать ширину и высоту выводимой карты.
  • cdtInit - инициализация библиотеки DLL. Два параметра используются, чтобы получить ширину и высоту карт.
  • cdtTerm - освобождает выделенные ресурсы.

Импортирование функций Cards.dll

Для начала нужно импортировать функции библиотеки Cards.dll, которые Вы будете использовать. Если Вы не будете использовать функции cdtAnimate или cdtDrawExt, тогда нет необходимости импортировать их.

function cdtAnimate(
  DC: HDC; Card, X, Y, Stat: Integer): Integer;
  StdCall; external 'CARDS.DLL';
function cdtDraw(
  DC: HDC; X, Y, Card, Typ: Integer; Color: TColor
  ): Integer; StdCall; external 'CARDS.DLL';
function cdtDrawExt(
  DC: HDC; X, Y, CardWidth, CardHeight, Card, Typ: Integer;
  Color: TColor):  integer; StdCall; external 'CARDS.DLL';
function cdtInit(
  var Width, Height: Integer): Integer; StdCall;
  external 'CARDS.DLL'; 
function cdtTerm: Integer; 
  StdCall; external 'CARDS.DLL';

Вы должны соблюдать регистр букв импортируемых функций. Также желательно указать полный путь к библиотеке Cards.dll.

cdtDraw

function cdtDraw(DC:HDC; X,Y,Card,Typ:Integer; Color:TColor):Integer;
  • DC - дескриптор контекстного устройства, в которое будут выводится изображения карт.
  • X, Y - положение координат вывода карт.
  • Card - номер игральной карты в библиотеке карт.
  • Typ - тип карты. Возможные значения 0, 1 и 2 (инвертирование цветов).
  • Color - цвет фона карты. По умолчанию белый.

В следующей таблице представлены возможные значения параметра Card функции cdtDraw:

Если Type равен 1, то имеются также еще и другие значения (53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 67 и 68). Заметьте, что значение 66 не существует.

Изображения обратной стороны карт может быть разнообразным, в зависимости от версии Windows и значит, DLL.

Совет: Если Typ равен 1, то Вы можете изменить цвет фона любой из 52 карт (а также обратной стороны карты с номером 53) параметром Color.

Вывод игральной карты на устройство

Добавьте компонент TButton на Вашу форму. Затем в событии OnCreate инициализируйте DLL при помощи функции cdtInit. По переменным Width и Height можно узнать размер игральной карты. Аналогичным образом, когда мы будем выгружать форму, нужно освободить ресурсы, выделенные для DLL при помощи функции cdtTerm .

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    Wdth:integer;
    Hght:integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

function cdtAnimate(
  DC: HDC; Card, X, Y, Stat: Integer
  ): Integer; StdCall; external 'CARDS.DLL';
function cdtDraw(
  DC: HDC; X, Y, Card, Typ: Integer; Color: TColor):Integer;
  StdCall; external 'CARDS.DLL';
function cdtDrawExt(
  DC: HDC; X, Y, CardWidth, CardHeight, Card, Typ:Integer;
  Color:TColor):integer; StdCall; external 'CARDS.DLL';
function cdtInit(
  var Width, Height: Integer): Integer; 
  StdCall; external 'CARDS.DLL';
function cdtTerm: Integer;
  StdCall; external 'CARDS.DLL';

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  cdtInit(Wdth,Hght); // Инициализируем DLL
end;


procedure TForm1.FormDestroy(Sender: TObject);
begin
 cdtTerm; // Освобождаем ресурсы
end;

end.

Теперь выведем Туз червей:

procedure TForm1.Button1Click(Sender: TObject);
begin
  cdtDraw(
      Form1.Canvas.Handle, 80, 40, 2, 0,
      clWhite); // Выводим туз червей
end;

80 и 40 это положение карт на форме (X и Y).

Показываем все 52 карты

Для этого нам нужна целочисленная переменная. С ее помощью мы создадим цикл для 52 карт. Также она будет изменять позиции X и Y, в зависимости от ее значения.

procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;
begin
  for i:= 0 to 51 do
    cdtDraw(
      Form1.Canvas.Handle, i*10, i*10, i, 0,
      clWhite); // Выводим колоду из 52 карт
end;

Обратная сторона карты

procedure TForm1.Button3Click(Sender: TObject);
begin
  cdtDraw(
    Form1.Canvas.Handle, 105, 48, 54, 1,
    clWhite); // Отображаем обратную сторону карты (54)

Скачать проект можно здесь.

Комментарии

Нет комментариев. Ваш будет первым!