unit U_Cards2;

.
. {generated code snipped}
.
.


procedure TForm1.ShuffleBtnClick(Sender: TObject);
{User clicked Shuffle}
begin
  if not assigned(deck)
  then deck:=TDeck.create(Application.mainform,point(10,10));
  Deck.shuffle;
end;



procedure TForm1.FormCreate(Sender: TObject);
{ Create and shuffle deck and assign card exits }
var
  i:integer;
begin
  deck:=TDeck.create(self, point(10,10));
  deck.shuffle;
  For i:=0 to 51 do
  with deck.deckobj[i] do
  begin
    onmousedown:=CardMouseDown;
    ondragover:=FormDragover;
    ondragdrop:=FormDragDrop;
  end;  
end;

procedure TForm1.DealBtnClick(Sender: TObject);
{User clicked Deal button}
var
  card:TCard;
  i,j:integer;
begin
  for i:= 1 to 7 do
  Begin
    for j:= 1 to 4  do
    If Deck.getnextcard(card)
    then
    with card do
    Begin
      left:=100*j;
      top:=i*20;
      visible:=true;
      showdeck:=false;
      bringToFront;
    end;
  end;
end;

procedure TForm1.SelectDeckBtnClick(Sender: TObject);
{User clicked "Select Card Back" button}
var
  i:integer;
begin
  If OKBottomDlg.showmodal=mrOK
  then for i:=0 to 51 do
  with deck.deckobj[i] do decktype:=OKBottomdlg.newdecktype;
end;

procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
{Yeah, form and cards will accept things being dragged}
begin
  accept:=true;
end;

procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
var   p:TPoint;
{If somebody dropped a card on us, move its coordinates here}
begin
  p.x:=x;
  p.y:=y;
  If sender is TCard  then {we're dropping on another card}
  with sender as tcard do {adjust "moveto" point from card coordinates to "form" coordinates}
  begin
    p.x:=p.x+left;
    p.y:=p.y+top;
  end;
  
  If source is tcard  {we're dropping a card, move it and put it on top}
  then with source as tcard do
  begin
    top:=p.y;
    left:=p.x;
    bringtofront;
  end;
end;


procedure TForm1.CardMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
{Flip a card on right click}
begin
  If (sender is TCard) and (button=mbright)
  then with tcard(Sender) do showdeck:=not showdeck;
end;

end.