Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi cards32.dll einbinden? (https://www.delphipraxis.net/7634-cards32-dll-einbinden.html)

Moyyer 18. Aug 2003 12:18


cards32.dll einbinden?
 
Hallo Alle Zusammen.

Ich möchte ein Kartenspiel programmieren und möchte dazu die Cards32.dll einbinden. Doch ich weiß nicht wie.

Ich habe mich informiert, dass es in der cards32.dll verschiedene funktionen gibt. z.B cdtinit, cdtdraw,...

Kann mir jemand ein kleines Beispiel geben, wie ich die dll einbinde!

kaemmi 18. Aug 2003 13:59

Re: cards32.dll einbinden?
 
versuchs mal damit
Delphi-Quellcode:
//im implementation-Abschnitt deklarieren
//das hier ist nur ein beispiel, das wahrscheinlich an die funktionen deiner DLL angepasst werden muss
type TTestFunction = function(x,y:Integer):integer;

var DLLHandle:THandle;
    Func:TFarProc;
    TestFunction:TTestFunktion;
    ergebnis:string;
//laden der DLL
DLLHandle := LoadLibrary(Pchar(DLLName)); //DLLName mit dem eigentlichen Namen der DLL ersetzen, logisch
//Adresse einer Funktion ermitteln
Func := GetProcAddress(DLLHandle,'cdtdraw');
//Wenn die Funktion gefunden wurde
if Func <> nil then begin
   @TestFunction := Func;
//Ausführen des Codes
ergebnis := IntToStr(TestFunction(4,5)); //übergeben der Parameter an die Funktion
Func:=nil;
//Freigeben der DLL
FreeLibrary(DLLHandle);
habs nicht getestet, müsste aber funktionieren

:dance: kaemmi :coder:

neolithos 18. Aug 2003 14:11

Re: cards32.dll einbinden?
 
Private Enum Suits
Clubs& = 0
Diamonds& = 1
Hearts& = 2
Spades& = 3
End Enum

Private Enum CardFaces
face_Ace& = 0
face_Two& = 4
face_Three& = 8
face_Four& = 12
face_Five& = 16
face_Six& = 20
face_Seven& = 24
face_Eight& = 28
face_Nine& = 32
face_Ten& = 36
face_Jack& = 40
face_Queen& = 44
face_King& = 48
End Enum

Private Enum CardBacks
cb_CrossHatch& = 53
cb_Plaid& = 54
cb_Weave& = 55
cb_Robot& = 56
cb_Roses& = 57
cb_IvyBlack& = 58
cb_IvyBlue& = 59
cb_FishCyan& = 60
cb_FishBlue& = 61
cb_Shell& = 62
cb_Castle& = 63
cb_Beach& = 64
cb_CardHand& = 65
cb_Unused& = 66
cb_X& = 67
cb_O& = 68
End Enum

Private Enum Card
Front& = 0
Back& = 1
Highlighted& = 2
End Enum
'//Contructor
Private Declare Function cdtInit Lib "cards32.dll" (dx As Long, dy As Long) As Long
'//Terminator
Private Declare Sub cdtTerm Lib "cards32.dll" ()
'//Standard Drawing function
Private Declare Function cdtDraw Lib "cards32.dll" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, ByVal lSuit As Suits, ByVal lCard As Card, ByVal clr As Long) As Long
'//Extended Drawing function
Private Declare Function cdtDrawExt Lib "cards32.dll" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, ByVal dx As Long, ByVal dy As Long, ByVal lSuit As Suits, ByVal lCard As Card, ByVal clr As Long) As Long
'//Aniation function to animate certain backs
Private Declare Function cdtAnimate Lib "cards32.dll" (ByVal hDC As Long, ByVal lBack As CardBacks, ByVal X As Long, ByVal Y As Long, ByVal lState As Long) As Long

wenn du das übersetzt haben willst sag bescheid,
dauert aber länger :wink:

teebee 18. Aug 2003 14:24

Re: cards32.dll einbinden?
 
Schau mal hier: http://www.vbpc.de/members/bor/tut2/

Es werden die Funktionen erklärt. Ist zwar für VB, aber das Prinzip ist dasselbe.

Gruss, teebee

Moyyer 18. Aug 2003 15:51

Re: cards32.dll einbinden?
 
muss ich nicht erst die DLL in mein Programm einbinden
z.B
procedure cdtinit external 'cards32.dll';

sodass er die funktionen wie cdtdraw, cdtanimate findet?

neolithos 18. Aug 2003 15:58

Re: cards32.dll einbinden?
 
Wenn du lieb bittest mach ich dir ne Unit.
Aber den gedanke ist richtig!

neolithos 18. Aug 2003 16:14

Re: cards32.dll einbinden?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Falls du ne schönere Übersetzung brauchst dann warte mal bis Mittwoch. Für sowas brauch ich mal ne halbe Stunde ruhe.

Moyyer 18. Aug 2003 18:40

Re: cards32.dll einbinden?
 
Deine *pas ist wirklich super! Danke erstmal! Wenn du das noch besser machst hast du was gut bei mir! :party: ich werte deine datei heute abend aus und meld mich wieder!

Moyyer 18. Aug 2003 21:48

Re: cards32.dll einbinden?
 
ich hab mich drangesetzt. Aber raudgekommen ist nicht viel! :cry:
Delphi-Quellcode:
function cdtInit(var dx, dy : Integer) : Integer;
mit der Fuktion muss ich beginnen. ist klar!
aber was soll ich mit dx und dy anfangen?
Wenn ich Werte reinsetzte sagt er mir
"Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen"

wenn ich variablen reinsetzte sagt er mir " undefinierter bezeichner" z.B
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
cdtinit(a, b);
end;
was muss ich schreiben damit es funktioniert?

[edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit]

teebee 20. Aug 2003 08:25

Re: cards32.dll einbinden?
 
Du musst zwei Variablen deklarieren,
Delphi-Quellcode:
Var x,y : Integer;
und die Variablen dann übergeben.
Delphi-Quellcode:
Success := cdtInit(x,y);
Siehe Link in meinem Posting weiteroben: die Funktion gibt in diesen Variablen die Kartenmaße zurück.

Gruß, teebee

neolithos 20. Aug 2003 09:22

Re: cards32.dll einbinden?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab mal ein kleine Klasse entworfen.

Änderungswünsche (mit Änderung) bitte hier posten.


P.S.: Rein theoretisch kann man auch andere Karten-Dll's bauen und damit rufen. Sie müssen halt nur aufgebaut sein wie das Origninal.

Falls es jemand schafft ein echt Deutsches Blatt (Schell, Herz, Grün, Eichel) zu kreiren dann bitte Posten. Ich Spiele Skat und das geht bei mir nicht mit einem Französichen.

Moyyer 20. Aug 2003 09:51

Re: cards32.dll einbinden?
 
Erst Mal zum Problem!

Code:
Success := cdtInit(x,y);
Wenn ich es so eingeben, wie du es gesagt hast kommt als fehlermeldung
"Undefinierter Bezeichner (Success)". Was muss ich noch machen, damit es funktioniert.
(Bin noch neu und hab nich so viel ahnung)

Zu deinen "echten" Deutschen Blatt! Ich kann dir die Karten einscannen aber in eine DLL einbinden kann ich nicht? Vielleicht nützt es dir ja was!

Mfg Moyyer

neolithos 20. Aug 2003 09:57

Re: cards32.dll einbinden?
 
Eingeskannt sieht meist besch***** aus durch den Drack auf dem Scanner und der Karte.

Wenn aber gleichgroße (am besten so groß wie die in der Cards.dll) und saubere Bitmap's vorliegen ist das kein Problem die Card's-Dll zu manipuliren.

teebee 20. Aug 2003 10:02

Re: cards32.dll einbinden?
 
Zitat:

Zitat von Moyyer
Code:
Success := cdtInit(x,y);
Wenn ich es so eingeben, wie du es gesagt hast kommt als fehlermeldung
"Undefinierter Bezeichner (Success)". Was muss ich noch machen, damit es funktioniert.
(Bin noch neu und hab nich so viel ahnung)

Du musst Success natürlich auch noch deklarieren:
Delphi-Quellcode:
Var Success: Integer;
Nix für ungut, aber vielleicht solltest Du erstmal mit einfacheren Sachen anfangen und ein paar Tutorials durcharbeiten, bevor Du Dich an ein Kartenspiel wagst. Könnte sonst ziemlich demotivierend werden...

Gruß, teebee

Moyyer 20. Aug 2003 10:07

Re: cards32.dll einbinden?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also ein bisschen Programmieren kann ich auch noch

Ich hab auch vorher das mit Sucess Deklarieren probiert aber rausgekommen ist das (siehe anhang).

Diese Fehlermeldung Plagt mich schon die ganze Zeit!

neolithos 20. Aug 2003 10:11

Re: cards32.dll einbinden?
 
Erste Frage wo hast du das Theme her.

Zweite Frage: Mit meiner Klasse passiert der Fehler offentlich nicht!
Sie wurde nur in XP getestet.

Drittens: Das ist ein Speicherfehlgriff (so sag ich's).
Es gibt irgentwo einen Zeiger der nicht mehr exisiert. Aber inherhalb der Dll wird darauf zugegriffen.

Moyyer 20. Aug 2003 10:19

Re: cards32.dll einbinden?
 
wäre jem. von euch so nett und schreibt für mich eine oncreate Prozedur, wo es endlich funktioniert. Ich sitze schon seit tagen daran, aber immerwieder kommt die Fehlermeldung. Und so gut bin ich noch nich um diese zu verstehen. Viele Bsp sind in Visual Basic programmiert.
Die hab ich mir angeschaut und sehen eigendlich recht einfach aus.
Aber Mein Delphi sieht das scheibar anders.

Leider gibt es für Delphi keinen Source wo jemand schon mal ein Kartenspiel programmiert hat. Sonst würde ich best. schon weiter sein.
Und mir auch ein paar Ideen holen.

teebee 20. Aug 2003 10:35

Re: cards32.dll einbinden?
 
Delphi-Quellcode:
 Uses ..,Cards32;

procedure TForm1.FormCreate(Sender: TObject);
begin
 MyCards := TCards.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 MyCards.DrawCard(Canvas.Handle,Point(10,10),suitClubs,faceKing,False);
end;
Das funktioniert ohne Fehlermeldung, es erscheint allerdings die falsche Karte bei mir. Mit 'True' am Schluss (invertiert) erscheint die richtige Karte.
@neolithos: scheint noch ein Problem in der Klasse zu sein?

btw: Hatte vorher nicht geblickt, dass neolithos eine richtige Klasse gemacht hat, dachte er hat nur die API-Aufrufe konvertiert. So muss man ja nix mehr machen, nur noch createn...

Gruss, teebee

Moyyer 20. Aug 2003 10:44

Re: cards32.dll einbinden?
 
was ist Mycard für eine variable? (" Undefinierter Bezeichner")

teebee 20. Aug 2003 10:47

Re: cards32.dll einbinden?
 
Zitat:

Zitat von Moyyer
was ist Mycard für eine variable? (" Undefinierter Bezeichner")

Hatte ich vergessen zu posten:
Delphi-Quellcode:
Var MyCards: TCards;
Aber ein Blick in den Quelltext von Cards32.pas hätte Dir das verraten...

Gruß, teebee

Moyyer 20. Aug 2003 10:55

Re: cards32.dll einbinden?
 
Jetzt funktionierts es! Danke vielmals
Wenn du noch zeit hast kannst du vielleich für die anderen drei Funktionen (cdtdrawex,cdtanimate, cdtterm) ein Beispiel bringen.
Muss aber nicht sein. Ihr habt mir sowieso schon zu viel geholfen.
:cat: DANKE NOCHMAL

neolithos 20. Aug 2003 12:56

Re: cards32.dll einbinden?
 
@teebee unter welchen OS ercheint die falsche Karte?

Und falls du den Fehler in der Klasse siehst sag bescheid, sonst wird's länger dauern.
Da ich diese Klasse nur zu Hause entwickle und da ich nix internet

teebee 20. Aug 2003 13:13

Re: cards32.dll einbinden?
 
Hab hier Win2K. Werds zuhause mal unter XP testen.
Hab im Quelltext mal folgendes geändert:
Delphi-Quellcode:
ciHighlight : array [Boolean] of Integer = (-->0<--, 2);
Die '1', die hier stand, steht nämlich für die Rückseite der Karte, für die Front muss es eine '0' sein. Wenn Du eine Rückseite ausgeben willst, muss auch die KartenID>53 sein, sonst kommt er wohl durcheinander. Hast Du in DrawBack ja auch so gemacht. Jetzt geht es, wie es soll.

Gruß, teebee

neolithos 20. Aug 2003 14:02

Re: cards32.dll einbinden?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Au böse Falle.
Das war nur ein Test wegen der Farbe.

Denn was es mit der Farbe auf sich hat, hab ich bis heut noch nicht begriffen.

-> aus "1" muss eine "0" werden

:wall:

Für weiteres bin ich offen...

Moyyer 20. Aug 2003 14:46

Re: cards32.dll einbinden?
 
wie könnte man die karten jetzt "mischen"?

Die random Funktion funktioniert nur bei integer;

Code:
MyCards.DrawCard(paintbox1.Canvas.Handle ,Point(0,0), suitdiamonds ,random(faceking) ,false);

neolithos 20. Aug 2003 15:19

Re: cards32.dll einbinden?
 
Via Type casting

denn hinter dem TCardFaces steckt ein integer.

Integer(faceking) = 12

The-X 29. Sep 2003 15:35

Re: cards32.dll einbinden?
 
Hi ihrs,

hat schon mal jemand versucht mit'm resource Hacker die Bitmaps aus der dll zu extrahieren??

Scorpius 2. Okt 2003 21:38

Re: cards32.dll einbinden?
 
Hallo,

wenn ich mit canvas.handle die Karten erscheinen lass und irgendein anderes Windowsfenster darübergelegt wird, verschwinden die Karten vom Formular. Wie kann ich sie sichtbar halten?? :wall:

Für Antworten wäre ich sehr dankbar!

Luckie 2. Okt 2003 21:52

Re: cards32.dll einbinden?
 
Du hast so eben das Prinzip von Windows entdeckt. Glückwunsch.

Führe deine Malaktionen im OnPaint Ereignis aus. performater wäre allerdings ein OffScreenBitmap. Dieses Prinzip habe ich in dem offscreenbitmap.zip Demo in meinem Demo-Verzeichnis http://www.luckie-online.de/files/demos/ demonstriert.

schierl 17. Jul 2006 15:30

Re: cards32.dll einbinden?
 
Hallo an alle!

Ich versuche schon seit 5 Tagen mit der Routine von neolithos auf die Cards.dll zu zugreifen!
Ich bekomme aber immer folgende Fehlermeldung:

Zugriffsverletzung bei Adresse 00451560 in Modul 'BlackJack.exe'. Schreiben von Adresse 00000014.

Nach langen Suchen und kreuz und querlessen in den verschiedenen Foren weis ich jetzt nicht mehr weiter!
Ich verwende Delphi 2005, Windows XP Pro, die dll ist im System32 Verzeichnis und jetzt auch im
Programmverzeichnis vorhanden. Die Windowskartenspiele funktionieren, nur ich bekomme keine Karten auf den Schirm :wall: !
Ich habe auch verschiedene andere Beispiele ausprobiert aber immer mit der selben Fehlermeldung!
Kann es sein das meine cards.dll defekt ist und wo bekomme ich eine Cards32.dll?

Danke im vorraus!

Johann

teebee 17. Jul 2006 20:27

Re: cards32.dll einbinden?
 
Ich fürchte, ohne etwas relevanten Quelltext (wobei wird die AV ausgelöst?) wird Dir niemand weiterhelfen können.

Gruß, teebee

schierl 17. Jul 2006 22:12

Re: cards32.dll einbinden?
 
Hat sich in der Zwischenzeit geglärt!
War ein reiner Anfänger Fehler!
Ich habe die Varible "Cards" nicht richtig initialisiert!
Danke für den Hilfe versuch!

mfg
Johann

FlinkerFinger 22. Aug 2006 22:42

Re: cards32.dll einbinden?
 
Hi an alle,

könnte nich jmd. eine funktionierende Version des Quelltextes uppen. Ich verstehe leider noch nicht so viel von dem was ihr schreibt... auch mit der Unit kann ich nur wenig anfangen. Würde mich über ein Komplettes Beispiel freuen mit dem ich ein wenig herrumexperimentieren kann und dann evtl. auch was eigenes draus machen könnte.

Wäre super nett wenn sich jmd. die arbeit machen könnte :thumb:

andimx 13. Jan 2007 02:30

Re: cards32.dll einbinden?
 
Hallo,
Ich bin am rumprobieren mit der Cards.DLL und der Unit.

Folgendes Problem ist nun da:

Ich hab die Datei aus dem Posting #24, wenn ich versuche ein Pik (0) zu zeichnen, kommt immer eine weiße Karte. Auch bei Kreuz kommen nur weiße Karten ausser der Bilderkarten.

Was könnte das sein?

Grüße
Andi

Balu der Bär 13. Jan 2007 09:21

Re: cards32.dll einbinden?
 
Pik 0? So eine Karte gibt es ja auch gar nicht... :gruebel:

andimx 13. Jan 2007 09:50

Re: cards32.dll einbinden?
 
nee..

was ich meine, z.B:

Delphi-Quellcode:
 Cards.DrawCard(Game.Canvas.Handle, Point(APoint.X + Distance, APoint.Y), CardType, suitClubs, faceAce);
 
 Cards.DrawCard(Game.Canvas.Handle, Point(APoint.X + Distance, APoint.Y), CardType, suitSpades, faceThree);
bringt nur weiße leere Karten auf dem Bildschirm...

turboPASCAL 13. Jan 2007 09:59

Re: cards32.dll einbinden?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Kommt darauf an was du als CardType definiert hast.

Ein kompletter Code im Anhang.

andimx 13. Jan 2007 10:08

Re: cards32.dll einbinden?
 
hmm... dein proggy geht bei mir. werd verrückt.. gibts doch net. :-)

fkerber 13. Jan 2007 10:10

Re: cards32.dll einbinden?
 
Hi!

Was heißt denn "geht nicht"?

Vergesst, was ich nie geschrieben habe.... :wall:


Ciao, Frederic

andimx 13. Jan 2007 10:14

Re: cards32.dll einbinden?
 
?

Wer schreibt "geht nicht"?
Der Source Code von oben funktioniert bei mir tadellos, bei mir im Proggy benutze ich die selbe Klasse, da werden aber manche Karten weiß gezeichnet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz