![]() |
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! |
Re: cards32.dll einbinden?
versuchs mal damit
Delphi-Quellcode:
habs nicht getestet, müsste aber funktionieren
//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); :dance: kaemmi :coder: |
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: |
Re: cards32.dll einbinden?
Schau mal hier:
![]() Es werden die Funktionen erklärt. Ist zwar für VB, aber das Prinzip ist dasselbe. Gruss, teebee |
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? |
Re: cards32.dll einbinden?
Wenn du lieb bittest mach ich dir ne Unit.
Aber den gedanke ist richtig! |
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.
|
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!
|
Re: cards32.dll einbinden?
ich hab mich drangesetzt. Aber raudgekommen ist nicht viel! :cry:
Delphi-Quellcode:
mit der Fuktion muss ich beginnen. ist klar!
function cdtInit(var dx, dy : Integer) : Integer;
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:
was muss ich schreiben damit es funktioniert?
procedure TForm1.FormCreate(Sender: TObject);
begin cdtinit(a, b); end; [edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit] |
Re: cards32.dll einbinden?
Du musst zwei Variablen deklarieren,
Delphi-Quellcode:
und die Variablen dann übergeben.
Var x,y : Integer;
Delphi-Quellcode:
Siehe Link in meinem Posting weiteroben: die Funktion gibt in diesen Variablen die Kartenmaße zurück.
Success := cdtInit(x,y);
Gruß, teebee |
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. |
Re: cards32.dll einbinden?
Erst Mal zum Problem!
Code:
Wenn ich es so eingeben, wie du es gesagt hast kommt als fehlermeldung
Success := cdtInit(x,y);
"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 |
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. |
Re: cards32.dll einbinden?
Zitat:
Delphi-Quellcode:
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...
Var Success: Integer;
Gruß, teebee |
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! |
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. |
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. |
Re: cards32.dll einbinden?
Delphi-Quellcode:
Das funktioniert ohne Fehlermeldung, es erscheint allerdings die falsche Karte bei mir. Mit 'True' am Schluss (invertiert) erscheint die richtige Karte.
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; @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 |
Re: cards32.dll einbinden?
was ist Mycard für eine variable? (" Undefinierter Bezeichner")
|
Re: cards32.dll einbinden?
Zitat:
Delphi-Quellcode:
Aber ein Blick in den Quelltext von Cards32.pas hätte Dir das verraten...
Var MyCards: TCards;
Gruß, teebee |
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 |
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 |
Re: cards32.dll einbinden?
Hab hier Win2K. Werds zuhause mal unter XP testen.
Hab im Quelltext mal folgendes geändert:
Delphi-Quellcode:
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.
ciHighlight : array [Boolean] of Integer = (-->0<--, 2);
Gruß, teebee |
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... |
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);
|
Re: cards32.dll einbinden?
Via Type casting
denn hinter dem TCardFaces steckt ein integer. Integer(faceking) = 12 |
Re: cards32.dll einbinden?
Hi ihrs,
hat schon mal jemand versucht mit'm resource Hacker die Bitmaps aus der dll zu extrahieren?? |
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! |
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 ![]() |
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 |
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 |
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 |
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: |
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 |
Re: cards32.dll einbinden?
Pik 0? So eine Karte gibt es ja auch gar nicht... :gruebel:
|
Re: cards32.dll einbinden?
nee..
was ich meine, z.B:
Delphi-Quellcode:
bringt nur weiße leere Karten auf dem Bildschirm...
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); |
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. |
Re: cards32.dll einbinden?
hmm... dein proggy geht bei mir. werd verrückt.. gibts doch net. :-)
|
Re: cards32.dll einbinden?
Hi!
Was heißt denn "geht nicht"? Vergesst, was ich nie geschrieben habe.... :wall: Ciao, Frederic |
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. |
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