Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi cards.dll benutzen? (https://www.delphipraxis.net/89101-cards-dll-benutzen.html)

.chicken 26. Mär 2007 19:18

Re: cards.dll benutzen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ok, hier biddeschön :)

Also ihr seht ja noch nich viel drin, will erst das mit der .dll hinrkiegen, der Rest (den hatte ich auch schonmal zur Hälfte) kommt dann später!

turboPASCAL 26. Mär 2007 20:10

Re: cards.dll benutzen?
 
jau...
hättest du mal "meine" genommen dann währe alles gut.
Ist wirklich nicht schwer.


Die cards.dll (cards32.dll bei Win 95 etc) brauchst du nicht in das Verz. kopieren,
die ist bei Windows mit dabei. (Meine guckt automatisch nach ;) )

Die DLL heisst "cards.dll" bei Windows XP.


So, der Fehler liegt bei
Delphi-Quellcode:
  cdtinit(CardWidth, CardHeight) //<--<<<;
warum kann ich jetzt nicht auf die schnelle sagen.


Bei mir sähe das so aus:

Delphi-Quellcode:
{
  // "Kartenfarbe":

                // Kreuz,     Karo,       Herz,       Pik
                // oder auch:
                // Eichel,   Schell,      Herz,       Grün
  TCardSuits = (suitClubs, suitDiamonds, suitHearts, suitSpades);

  // Karten:
  TCardFaces = (faceAce,  // Ass
                faceTwo,  // 2
                faceThree, // 3
                faceFour, // ...
                faceFive,
                faceSix,
                faceSeven,
                faceEight,
                faceNine,
                faceTen,  //10
                faceJack, // Bube
                faceQueen, // Dame
                faceKing  // König
}
Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Cards32;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
    Karten: TCards;
  public
    { Public declarations }
  end;



var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Karten := TCards.Create; // Unit/Dll initialisieren
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Karten.Free; // Unit/Dll wieder freigeben und aus dem Hauptspeicher löschen !
end;

procedure TForm1.FormPaint(Sender: TObject);
var i: Integer;
begin
  // male mal:
  for i:= 0 to 5 do
    Karten.DrawCard(
      Canvas.Handle,
      Point(20 + i,20 + (i*10)),  // an Stelle
      suitClubs,                  // Kreuz
      faceAce,                    // Ass
      FALSE                       // Ne, kein Highlight (werden invertiert wenn True)
      );

end;

end.
fertisch.

.chicken 26. Mär 2007 20:18

Re: cards.dll benutzen?
 
Ok, super danke, das klappt jetzt zwar soweit, schade finde ich nur, dass ich nich ganz verstehe was du in deiner cards32.pas machst! Trotzdem danke ;-)

pitti platsch 26. Mär 2007 20:19

Re: cards.dll benutzen?
 
Die Fehlermeldung kommt daher, dass die Cards32.pas Datei falsch ist. Die Funktionen müssen alle als stdcall deklariert werden (Hinter den Rückgabewert stdcall; schreiben und vor external... nochmal).
Hier ein Beispiel für die Funktion cdtTerm:
Delphi-Quellcode:
function cdtTerm : Integer; stdcall;
und unten dann noch:
Delphi-Quellcode:
function cdtTerm; stdcall; external csCards32;
Dann läuft das Programm, aber es zeigt nichts an. Das liegt daran, dass du cdtdraw(Form1.Canvas.Handle, 0, 0, 0, 0, 0); nur im Konstruktor aufrufst. Dies muss aber immer beim neuzeichnen des Formulars (also im OnPaint-Event) geschehen.

Außerdem solltest du im OnDestroy-Event deines Formulars die Funktion cdtTerm aufrufen :wink: .

mfg
pitti platsch

.chicken 26. Mär 2007 20:24

Re: cards.dll benutzen?
 
Super, dakne fuer die Antworten ich versuch das dann morgen mal hinzukriegen! Finde den Mist komplizierter als den Rest des Pokerspiels :D (Kartenabfrage etc...)

turboPASCAL 26. Mär 2007 23:12

Re: cards.dll benutzen?
 
Zitat:

Zitat von Pitti
Die Fehlermeldung kommt daher, dass die Cards32.pas Datei falsch ist. Die Funktionen müssen alle als stdcall deklariert werden

japp, so ist es. Musste ich doch erst mein Delphi anschmeissen...


Zitat:

Zitat von .chicken
Ok, super danke, das klappt jetzt zwar soweit, schade finde ich nur, dass ich nich ganz verstehe was du in deiner cards32.pas machst! Trotzdem danke ;-)

1.) alles in eine Kalsse gepackt
2.) es ist egal welche Windowsversion (ausgenommen Vista ;) da ich es noch nicht kenne)
3.) Fehlermeldungen bei Fehlern die man lesen kann
4.) übersichtlicher
5.) einfaches Zeichnen eines eigenen Kartenhintergrundes
6.) fällt mir jetzt nicht ein ;)

Die andere Unit stellt wirklich nur die Grundfunktionen "ohne alles".
Wird die Dll nicht gefunden oder die falsche geladen gibts Probleme.

:mrgreen:

.chicken 27. Mär 2007 12:49

Re: cards.dll benutzen?
 
Ok, super danke, vielleicht versteh ich den Code ja wenn ich mich nomma genau dransetze! Vielen Dank für eure Hilfe!!!!! :dp:

Da Hab ich nochma ne Frage (sorry :D )

Delphi-Quellcode:
  TCardInit = function (var dx, dy : Integer) : Integer; stdcall;
  TCardTerm = function : Integer; stdcall;
  TCardDraw = function (const hDC : Cardinal; const x, y, iCard, iFlags : Integer;
    const dwColor : Cardinal) : Integer; stdcall;
  TCardDrawExt = function (const hDC : Cardinal; const x, y, dx, dy, iSuit,
    iFlags : Integer; const dwColor : Cardinal) : Integer; stdcall;
  TCardAnimate = function (const hDC : Cardinal; const lBack, x, y,
    lState : Integer) : Integer; stdcall;
    // Wird anscheinend unter XP nicht mehr unterstützt
Wo steht denn, was diese ganzen funktionen machen??? Oder hab ich da shcon wieder was falsch verstanden? ^^

turboPASCAL 27. Mär 2007 12:50

Re: cards.dll benutzen?
 
Einfach fragen oder in die Hilfe gucken. :mrgreen:

.chicken 28. Mär 2007 13:43

Re: cards.dll benutzen?
 
Also erstens weise ich nochmal auf meine editierten Beitrag weiter oiben hin, da hab ich nomma ne Frage gestellt und dann schon wieder eine :D

Ist es Möglich dass ich der Klasse Cards noch die properties "Bild" und "Farbe" hinzufüge?
Somit könnte ich mir meine neue Typendefinition sparen:
Delphi-Quellcode:
type TCard = record
  Bild, Farbe: Integer;
end;
Hoffe ihr versteht was ich machen will. Habs auch schon versucht aber es gibt dabei immr Fehler!

turboPASCAL 28. Mär 2007 14:11

Re: cards.dll benutzen?
 
Code:
CardInit = function liefert die grösse der Karten, Breite x Höhe
CardTerm = function initialisiert die dll
CardDraw = function zeichnet eine definierte karte
CardDrawExt = function zeichnet eine definierte karte mit bestimmten zus. Parametern

CardAnimate = function Wird anscheinend unter XP nicht mehr unterstützt :gruebel:
Zitat:

Ist es Möglich dass ich der Klasse Cards noch die properties "Bild" und "Farbe" hinzufüge?
Für dein Spel ? In der Unit alle 52 Karten zu definieren macht nicht unbedingt Sinn.
(vill. falsch verstanden was du möchtest :gruebel: )

Du kanns in deinem Spiel aber einen Recordtypen basteln zB. für jeden spieler

Delphi-Quellcode:
type
  TPlayerCard = Record
                  Farbe: TCardSuits; // Kreuz, Karo, Herz und so
                  Bild: TCardFaces; // Bube, Dame, ..., 2, 3, ...
                end;
  TPlayerHandCards = array [0..5] of TPlayerCard; // jeder bekommt nur 6 Karten oder so ;-)

var
  PlayerOneCards = TPlayerHandCards;


procedure SoUndSo...
begin
  PlayerOneCards[0].Farbe := suitHearts;
  PlayerOneCards[0].Bild := faceAce;

  //..
end;

procedure Werhatwas...
begin
  if (PlayerOneCards[0].Farbe = suitHearts) and PlayerOneCards[0].Bild = faceAce) then
    ShowMessage('Player 1 hat n Hertz Ass');

  //..
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:36 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz