![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Карты [D7, XP]
{ент © (2007-11-08 13:23:00)Доброго времени суток. У меня вопрос. Я делаю карточную игру, у создаю карты в run time таким образом
constructor TIMg.MyCreate(im: TForm);
begin
img:=TImage.Create(Self);
img.Picture.LoadFromFile(tr);// tr имя карты, меняет свои значения от 1 до 54
img.Parent:=form1;
img.left:=lefn+lef;
img.Top:=pos1+10;
img.OnClick :=form1.myimageclick;
end;
И я не как не могу понять, как мне при клике на карту, узнать, какая это карта. И так же не знаю как при нажатии на карту переместить её.
Пожалуйста помогите разобраться в этом.
P.S.
Не предлогайте использовать компонент Tcard, я хочу обойтись без него.
{RASkov} (2007-11-09 20:39:00) [1]> [9] Amoeba © (09.11.07 20:33)
> Персонально выслал мылом (это + бонус).
:) Спасибо
Amoeba (2007-11-09 20:33:00) [2]
> {RASkov} (09.11.07 00:57) [8]
>
> > [4] Amoeba © (08.11.07 15:53)
> > Могу поделится модулем работы с ней.
>
> можно сюда -> cemvol2005@smtp.ru
> ну или куда-нибудь на общее обозрение...
>
По просьбе трудящихся API к cards.dll:
unit Cards32;
interface
uses Windows, Graphics;
const
{ CdtDraw/Ext, nDraw Field }
C_FACES = 0;
C_BACKS = 1;
C_INVERT = 2;
{ Special Cards (C_BACKS) }
CrossHatch = 53;
Weave1 = 54;
Weave2 = 55;
Robot = 56;
Flowers = 57;
Vine1 = 58;
Vine2 = 59;
Fish1 = 60;
Fish2 = 61;
Shells = 62;
Castle = 63;
Island = 64;
CardHand = 65;
UNUSED = 66;
TheX = 67;
TheO = 68;
{ Init DLL, Return Cards Size (pixels) }
function cdtInit(var Width, Height: integer): Integer; stdcall;
{ Draw one of the 68(-1) card at X,Y, Color=highlight color (?) }
function cdtDraw(DC: HDC; X, Y, Card, Flag: integer; Color: TColor): integer;
stdcall;
{ Same as above + draw Width & Height }
function cdtDrawExt(DC: HDC; X, Y, W, H, Card, Flag: integer; Color: TColor):
Integer; stdcall;
//function cdtAnimate(DC: HDC; Back: Integer; X, Y, State: Integer): integer;
// stdcall;
{ Done }
function cdtTerm: Integer;
implementation
{ Init DLL, Return Cards Size (pixels) }
function CdtInit(var Width, Height: integer): integer; external 'CARDS.DLL';
{ Draw one of the 68(-1) card at X,Y, Color=highlight color (?) }
function CdtDraw(DC: HDC; X, Y, Card, Flag: integer; Color: TColor): integer;
external 'CARDS.DLL';
{ Same as above + draw Width & Height }
function CdtDrawExt(DC: HDC; X, Y, W, H, Card, Flag: integer; Color: TColor):
Integer; external 'CARDS.DLL';
function CdtAnimate(DC: HDC; Back: Integer; X, Y, State: Integer): integer;
external 'CARDS.DLL';
{ Done }
function CdtTerm: integer; external 'CARDS.DLL';
end.
В начале программы вызывается CdtInit, в завершении обязательно вызывать CdtTerm.
Персонально выслал мылом (это + бонус).
{RASkov} (2007-11-09 00:57:00) [3]> [4] Amoeba © (08.11.07 15:53)
> Могу поделится модулем работы с ней.
можно сюда -> cemvol2005@smtp.ru
ну или куда-нибудь на общее обозрение...
Dmitro (2007-11-09 00:39:00) [4]Просто человек начал не с того:
TMast = (mPik, mTref, mCher, mBub);
TVes = 6..11;
TKarta = record
FMast: TMast;
FVes: TVes;
end;
TKoloda = object
Karty: array [0 .. 35] of TKarta;
procedure Init; // В смысле колоду тасуем
end;
и т.д. и т.п., а уж картинки к объекту привязать - это не сложно. ..... И сделать метод отображения на к-н TControl'е
grisme (2007-11-08 19:44:00) [5]жжоте %-))
clickmaker (2007-11-08 15:54:00) [6]
> [4] Amoeba © (08.11.07 15:53)
может, у него карты с голыми женщинами? )
Amoeba (2007-11-08 15:53:00) [7]А не лучше ли использовать средства предоставляемые самой Windows? Имеется в виду Cards.dll. В этой библиотеке и сами картинки карт, и все необходимые ф-ии для их отрисовки. Могу поделится модулем работы с ней. Там все очень просто.
Сам я использую собственный самописный компонент (наследник TGraphicControl), использующий эту Cards.dll.
Anatoly Podgoretsky (2007-11-08 15:27:00) [8]> {ент (08.11.2007 13:23:00) [0]
Может зря отказываешь, может тогда не будет вопроса как узнать какая карта.
Ega23 (2007-11-08 13:38:00) [9]
procedure TForm1.myimageclick(Sender : TObject);
img : TImage;
begin
if not (Sender is TImage) then Exit;
img := TImage(Sender);
Case img.Tag of
1 :
2 :
3 :
.............
54 :
end;
end;
clickmaker (2007-11-08 13:25:00) [10]
> Не предлогайте использовать компонент Tcard
а где это такой?
по теме - Tag или Name