![]() |
Doppelkopf-Projekt
Ich hatte es nicht geschafft, eine *.txt in einen string einzulesen.
Mittlerweile geht's. mfg, Wieland Sommer |
Re: Doppelkopf-Projekt
Tja...ich würde sagen ein gekürzter Code hätte auch gereicht. ^^
Nachdem ich mich mal durchgefitzt habe...bei welcher Zeile genau liegt/liegen die Fehler? du lädst an mehreren Stellen dateien ein. Flare |
Re: Doppelkopf-Projekt
Der Fehler: (bei der obrigen Einführung unter 'private'):
[Error] Unit1.pas(44): Unsatisfied forward or external declaration: 'Tform_doppelkopf.ComponentLoadFromFile' betreffende Zeile: procedure ComponentLoadFromFile(Component: TComponent; const FileName: String); danke für deine Mühe flare, Wieland |
Re: Doppelkopf-Projekt
Also ich würde sagen du hast oben bei der Deklaration nicht deine Parameterliste nicht hingeschrieben. du solltest die vielleicht mal ergänzen.
Delphi-Quellcode:
private
procedure ComponentLoadFromFile(Component: TComponent; const FileName: String); Flare |
Re: Doppelkopf-Projekt
Das war's nich, ich hatte es auch schon probiert. Nur halt oben ohne gelassen. In meiner Antwort ist aber bereits die aktuelle Zeile festgehalten.
Mahlzeit Wieland |
Re: Doppelkopf-Projekt
In der fehlerhaften Zeile:
Delphi-Quellcode:
Schon solltes gehen.
procedure Tform_doppelkopf.ComponentLoadFromFile(Component: TComponent; const FileName: String);
Du mußt die Methoden ComponentLoadFromFile auch als solche in der Klasse reinpacken :) |
Re: Doppelkopf-Projekt
Zitat:
Als was denn? Ich habe da jetzt nur . . Button1: TButton; Memo1: TMemo; ComponentLoadFromFile: ; . . Danke schonmal, Wieland |
Re: Doppelkopf-Projekt
Wieso kann Delphi mit der folgenden procedure die datei ordnung nich finden?
diese liegt im selben ordner wie die exe edit: jetzt geht's
Delphi-Quellcode:
procedure Tformdoppelkopf.Button1Click(Sender: TObject);
var f,ordnung:TextFile; s: string; begin // hier wird eine Textdatei geöffnet und zeilenweise ausgelesen // StringGrid auf eine Zeile reduzieren StringGrid1.RowCount:=1; // Datei öffnen AssignFile(f, 'ordnung'); Reset(f); // solange das Dateiende noch nicht erreicht ist while not eof(f) do begin // Zeile aus Textdatei in string lesen Readln(f, s); // in die linke Spalte wird die Zeilennummer geschrieben StringGrid1.Cells[0,StringGrid1.RowCount-1] := IntToStr(StringGrid1.RowCount); // in die rechte Spalte die Textzeile StringGrid1.Cells[1,StringGrid1.RowCount-1] := s; // Nach jedem Schreiben wird eine Zeile angehängt StringGrid1.RowCount := StringGrid1.RowCount + 1; end; // Letzte (zuviel) angehängte Zeile wieder entfernen StringGrid1.RowCount := StringGrid1.RowCount - 1; // Datei schliessen CloseFile(f); end; |
Re: Doppelkopf-Projekt
Wie kann ich eigentlich eine externe Datei mgl. einfach anzeigen lassen?
Gerne würde ich bei z.B. einem click auf'n button eine txt oder worddatei anzeigen lassen. mfg Wieland |
Re: Doppelkopf-Projekt
Da geht am besten mit einer Memo.
Flare |
Re: Doppelkopf-Projekt
Zitat:
Aber wie bekommt man die Datei da rein, dieses is mein problem. |
Re: Doppelkopf-Projekt
|
Re: Doppelkopf-Projekt
Hallo,
wenn es dir nur um das Anzeigen geht und du die Daten nicht direkt im Programm benötigst, dann kannst du die Dateien mit ![]() |
Re: Doppelkopf-Projekt
Liste der Anhänge anzeigen (Anzahl: 2)
anbei mal mein plan
ich hab den text jetzt erfogreich innen memo eingefügt - gerne wüsste ich ja, wie man dem programm sagen soll, dass es die datei selbst öffnen soll (ohne opendlg) Das nächste ding wird dann eine message, ob man etwas ansagen will - z.B. mit "ja" oder "nein" als button. |
Re: Doppelkopf-Projekt
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich hab jetzt ne zweite form eingebaut (für die Entscheidung).
|
Re: Doppelkopf-Projekt
Warum wurde der erste Post so derartig beschnitten. Am besten einfach lassen, wie er ist, dann können andere mit dem selben Problem später immernoch hilfe finden!
|
Re: Doppelkopf-Projekt
Liste der Anhänge anzeigen (Anzahl: 2)
mein aktueller stand:
mit dem ansagen bin ich (jedenfalls die feststellung fertig), nun habe ich auch die Möglichkeit gefunden, die Hinweise/Ansagen im meomfeld an einer bestimmten Stelle anzeigen zu lassen. naja, da es ein privates projekt is, muss auch der phasenplan ja nich ganz so eng gechnitzt sein.... schöne woche, Wieland |
Re: Doppelkopf-Projekt
Liste der Anhänge anzeigen (Anzahl: 1)
So, das Ansagen ist nun fertig.
Wie kann man delphi sagen, dass es eine bestimmte datei öffnen soll /statt opendlg auszuführen? kompl. Quelltext:
Delphi-Quellcode:
Bis bald, Wieland
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls, Buttons, jpeg, ExtCtrls, ComCtrls, Spin,ShellApi, mmsystem ; type Tformdoppelkopf = class(TForm) gridspieler1: TStringGrid; gridspieler2: TStringGrid; gridspieler3: TStringGrid; gridspieler4: TStringGrid; btaus: TBitBtn; btgebe: TBitBtn; logo_w: TImage; Chatfenster: TMemo; Edit1: TEdit; btKommentar: TButton; btchat: TButton; btregeln: TButton; mregeln: TMemo; OpenDlg: TOpenDialog; laspieler4: TLabel; laspieler3: TLabel; laspieler2: TLabel; Button1: TButton; Label1: TLabel; btvorbehalte: TButton; Label2: TLabel; gridstich: TStringGrid; lastich: TLabel; Panel1: TPanel; btsauen: TButton; bthochzeit: TButton; btsieg: TButton; btkeine9: TButton; bt5neun: TButton; btarmut: TButton; btschweine: TButton; btkeinenv: TButton; btheimlichen: TButton; btstrich: TButton; btkoenig: TButton; btsonssoli: TButton; trumpfanzahl: TLabel; procedure btausClick(Sender: TObject); procedure btgebeClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure gridspieler1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure gridspieler2DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure gridspieler3DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure gridspieler4DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure btchatClick(Sender: TObject); procedure btKommentarClick(Sender: TObject); procedure btregelnClick(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure Button1Click(Sender: TObject); procedure btvorbehalteClick(Sender: TObject); procedure gridspieler1Click(Sender: TObject); procedure gridstichDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure btschweineClick(Sender: TObject); procedure btsiegClick(Sender: TObject); procedure btsauenClick(Sender: TObject); procedure btheimlichenClick(Sender: TObject); procedure btsonssoliClick(Sender: TObject); procedure btkoenigClick(Sender: TObject); procedure btkeinenvClick(Sender: TObject); procedure bthochzeitClick(Sender: TObject); procedure btarmutClick(Sender: TObject); procedure btstrichClick(Sender: TObject); procedure bt5neunClick(Sender: TObject); procedure btkeine9Click(Sender: TObject); private procedure geben; procedure wimageload; procedure sreihenfolge; function PosN(Substring, Mainstring: string; n: Integer): Integer; procedure cleangrd(grd:TStringgrid); procedure sortiere(w,s,h,e:integer); procedure textein(txt:string); procedure disabbl(i:integer); public { Public declarations } end; var formdoppelkopf: Tformdoppelkopf; karten:array[0..48] of TBitmap; nummern:array[0..47]of Integer; spieler1:array[0..11] of Integer; spieler2:array[0..11] of Integer; spieler3:array[0..11] of Integer; spieler4:array[0..11] of Integer; arstich:array[0..3] of Integer; schweine1, supers1,hochzeit1,armut, neun, trumpfz,gekarten,ansa, other,poskr,zstd,wr1,wr2,wr3,wr4,dransein,trumpf,chr99: integer; const LF = #43#10; // LF steht für LineFeed implementation {$R *.dfm} ///const Dateiname = 'C:\boot.ini'; // gibt's ab WinNT { Sounds: sndPlaySound(PChar('C:\Datei.wav'),SND_SYNC); SND_SYNC = Während die Datei abgespielt wird, steht die Anwendung SND_ASYNC = Die Datei wird unabhängig vom Programm abgespielt. SND_LOOP = Immer wieder und immer wieder sndPlaySound(nil,0);} procedure TFormdoppelkopf.sortiere(w,s,h,e:integer); var x:integer; begin if label2.Caption='w1' then for x:=0 to 11 do begin if spieler1[x]= w then begin spieler1[x]:=spieler1[x+1]; spieler1[x+1]:=w; end; end; {var w,kr1,pk1,pk2,hz1,hz2,ka1: integer; begin for w:=0 to 8 do begin // Kreuz-Bube nach rechts if spieler1[w]= 4 then begin kr1:=1; spieler1[w]:=spieler1[w+1]; spieler1[w+1]:=4; end else kr1:=0; end; //Ende if spieler1[9]=4 then pk1:=8 else pk1:=9; // Pik-Bube nach rechts for w:=0 to pk1-1 do begin if spieler1[w]= 12 then begin pk2:=1; spieler1[w]:=spieler1[w+1]; spieler1[w+1]:=12; end else pk2:=0; end; //Ende hz1:=9; // Herz-Bube nach rechts if kr1=1 then hz1:=hz1-1; if pk2=1 then hz1:=hz1-1; for w:=0 to hz1-1 do begin if spieler1[w]= 20 then begin hz2:=1; spieler1[w]:=spieler1[w+1]; spieler1[w+1]:=20; end else hz2:=0; end; // Ende ka1:=9; //Karo-Bube nach rechts if kr1=1 then ka1:=ka1-1; if pk2=1 then ka1:=ka1-1; if hz2=1 then ka1:=ka1-1; for w:=0 to ka1-1 do begin if spieler1[w]= 28 then begin spieler1[w]:=spieler1[w+1]; spieler1[w+1]:=28; end; // Ende end; gridspieler1.Refresh; end;} end; procedure TFormdoppelkopf.cleangrd(grd:TStringgrid); var grdRec:TGridRect; begin with grdRec do begin Top:=-1; Left:=-1; Right:=-1; Bottom:=-1; end; grd.Selection:=grdRec; end; procedure TFormdoppelkopf.sreihenfolge; begin if wr1=4 then wr1:=1 else wr1:=wr1+1; if wr2=4 then wr1:=1 else wr2:=wr2+1; if wr3=4 then wr1:=1 else wr3:=wr3+1; if wr4=4 then wr1:=1 else wr4:=wr4+1; if wr1=4 then dransein:=1 else dransein:=wr1+1; end; procedure Tformdoppelkopf.wimageload; var i: integer; begin for i:=0 to 48 do begin karten[i]:=TBitmap.Create; karten[i].LoadFromFile(IntToStr(i)+'.bmp'); end; end; procedure Tformdoppelkopf.geben; var i,x,j:integer; begin { for w:=0 to 11 do begin spieler1[w]:=48; spieler2[w]:=48; spieler3[w]:=48; spieler4[w]:=48; end;} chatfenster.Clear; chatfenster.Lines.Add('Chatfenster'); chatfenster.Lines.Add('Spielbeginn: '+(timetostr(now))); Randomize; for i:= 0 to 47 do begin { j:=Random(47); X:=nummern[i] ; nummern[i]:= nummern[j]; nummern[j]:=x; end; } spieler1[0]:=1; // 22 spieler1[1]:=2; //23 spieler1[2]:=3; //28 spieler1[3]:=4; //29 spieler1[4]:=5; //40 spieler1[5]:=6; //41 spieler1[6]:=7; //42 spieler1[7]:=8; //43 spieler1[8]:=9; //44 spieler1[9]:=10; // 45 spieler1[10]:=11; // 46 spieler1[11]:=12; //47 { for i:=0 to 11 do begin spieler1[i]:=nummern[i]; spieler2[i]:=nummern[i+12]; spieler3[i]:=nummern[i+24]; spieler4[i]:=nummern[i+36]; } end; { for i:=0 to 10 do begin for j:=i+1 to 11 do begin if spieler1[j] < spieler1[i] then begin x:=spieler1[i]; spieler1[i]:=spieler1[j]; spieler1[j]:=x; end; if spieler2[j] < spieler2[i] then begin x:=spieler2[i]; spieler2[i]:=spieler2[j]; spieler2[j]:=x; end; if spieler3[j] < spieler3[i] then begin x:=spieler3[i]; spieler3[i]:=spieler3[j]; spieler3[j]:=x; end; if spieler4[j] < spieler4[i] then begin x:=spieler4[i]; spieler4[i]:=spieler4[j]; spieler4[j]:=x; end; end; end; } other:=1; gridspieler1.Refresh; gridspieler2.Refresh; gridspieler3.Refresh; gridspieler4.Refresh; end; procedure Tformdoppelkopf.btausClick(Sender: TObject); begin //MessageDlg('Copyright © 2006 by tankm26', mtCustom, [mbOK], 0); close; end; procedure Tformdoppelkopf.btgebeClick(Sender: TObject); begin gekarten:=0; ansa:=0; geben; btvorbehalte.Enabled:=true; gridspieler1.Enabled:=true; end; procedure Tformdoppelkopf.btvorbehalteClick(Sender: TObject); var w:integer; begin trumpf:=0; poskr:=0; neun:=0; hochzeit1:=0; schweine1:=0; supers1:=0; trumpfz:=0; armut:=0; disabbl(0); //Vorbehalte unsichtbar machen for w:=0 to 11 do begin if spieler1[w]>21 then trumpf:=trumpf+1; //Trümpfe zählen if trumpfz<4 then armut:=1; //Armut if spieler1[w]=0 then neun:=1; if spieler1[w]=1 then neun:=neun+1; //herz 9 if spieler1[w]=6 then neun:=neun+1; if spieler1[w]=7 then neun:=neun+1; //pik 9 if spieler1[w]=14 then neun:=neun+1; if spieler1[w]=15 then neun:=neun+1; //kreuz 9 if spieler1[w]=22 then neun:=neun+1; if spieler1[w]=23 then neun:=neun+1; //karo 9 if (spieler1[w]=44) and (spieler1[w+1]=45)then hochzeit1:=1; //Hochzeit if ((spieler1[w]=44) or (spieler1[w+1]=45)) then poskr:=w; //Kreuzdame if (spieler1[w]= 28)and(spieler1[w+1]= 29) then schweine1:=1; //Schweine //Schweine if schweine1=1 then if ((spieler1[w]= 22)and(spieler1[w+1]= 23))then supers1:=1; //(Super-)sauen if gekarten =0 then begin if spieler1[11]<29 then btstrich.Enabled:=true; // unterm Strich if (neun>4) then bt5neun.Enabled:=true; // Neunen if armut=1 then btarmut.Enabled:=true; //Armut if schweine1=1 then btschweine.Enabled:=true; //Schweine if ((btschweine.Enabled=true) and (supers1=1)) then btsauen.Enabled:=true; //(Super-)sauen if hochzeit1=1 then begin bthochzeit.Enabled:=true; btheimlichen.Enabled:=true; // Hochzeit end else begin bthochzeit.Enabled:=false; // Hz btheimlichen.Enabled:=false; end; // Hz end; if (gekarten=4) then begin if poskr>0 then btsieg.Caption:=('Re!') else btsieg.Caption:=('Kontra!'); btsieg.Enabled:=true; btkeine9.Enabled:=true; end; end; end; procedure Tformdoppelkopf.FormCreate(Sender: TObject); var w:integer; begin gekarten:=0; zstd:=0; other:=0; for w:=0 to 47 do nummern[w]:=w; wimageload; cleangrd(gridspieler1); cleangrd(gridspieler2); cleangrd(gridspieler3); cleangrd(gridspieler4); cleangrd(gridstich); end; procedure Tformdoppelkopf.gridspieler1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var w:integer; begin for w:=0 to 47 do if other= 1 then begin if spieler1[Acol]=w then gridspieler1.Canvas.Draw(rect.left, rect.top, Karten[w]); end else cleangrd(gridspieler1); end; procedure Tformdoppelkopf.gridspieler2DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if other= 1 then gridspieler2.Canvas.Draw(rect.left, rect.top, Karten[48]); end; procedure Tformdoppelkopf.gridspieler3DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if other= 1 then gridspieler3.Canvas.Draw(rect.left, rect.top, Karten[48]); end; procedure Tformdoppelkopf.gridspieler4DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if other= 1 then gridspieler4.Canvas.Draw(rect.left, rect.top, Karten[48]); end; procedure Tformdoppelkopf.btchatClick(Sender: TObject); begin if not (edit1.Text=('')) then begin chatfenster.Lines.Add('C: ' + edit1.text); chatfenster.Perform(WM_VSCROLL, SB_BOTTOM, 0); edit1.Clear; end; end; procedure Tformdoppelkopf.btKommentarClick(Sender: TObject); begin if not (edit1.Text=('')) then begin chatfenster.Lines.Add('K: ' + edit1.text); edit1.Clear; end; end; procedure Tformdoppelkopf.btregelnClick(Sender: TObject); begin mregeln.Clear; if zstd=0 then begin mregeln.Visible:=true; btregeln.Caption:=('Genug!'); if OpenDlg.Execute then begin mregeln.Lines.LoadFromFile(OpenDlg.FileName); end; zstd:=1; end else begin btregeln.Caption:=('Regeln!'); mregeln.Visible:=false; zstd:=0; end; end; procedure Tformdoppelkopf.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose:= MessageDlg('Wirklich beenden?', mtConfirmation, [mbyes,mbno], 0) = mrYes; end; procedure Tformdoppelkopf.Button1Click(Sender: TObject); var MemoText : String; Text : String; begin MemoText := chatfenster.Text; Text := 'Das ist ein Test'; Insert(Text +Slinebreak, MemoText, +37); chatfenster.Text := MemoText; end; function Tformdoppelkopf.PosN(Substring, Mainstring: string; n: Integer): Integer; // Funktion zum Suchen ob ein Zeichen im String enthalten ist begin // if Pos(substring, mainstring) = 0 then begin // posn := 0; // Exit; // end else begin // if n = 1 then posn := Pos(substring, mainstring) // else begin // posn := Pos(substring, mainstring) + posn(substring, Copy(mainstring, // (Pos(substring, mainstring) + 1), Length(mainstring)), n - 1); // end; // end; // end; procedure Tformdoppelkopf.gridspieler1Click(Sender: TObject); begin gekarten:=gekarten+1; chr99:=gridspieler1.Col; gridstich.Refresh; //gridspieler1.Enabled:=false; end; procedure Tformdoppelkopf.gridstichDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if other=1 then begin arstich[0]:=spieler1[chr99]; arstich[1]:=0; arstich[2]:=0; arstich[3]:=0; gridstich.Canvas.Draw(rect.Left, rect.Top, karten[arstich[0]]); end; end; procedure Tformdoppelkopf.btschweineClick(Sender: TObject); var MemoText : String; begin btschweine.Visible:=false; MemoText:=chatfenster.Text; Insert('A: Spieler 1 hat Schweine!' +Slinebreak, MemoText, +37); chatfenster.Text := MemoText; end; procedure Tformdoppelkopf.btsiegClick(Sender: TObject); begin if btsieg.Caption=('Re!') then textein('A: Spieler 1 sagt Re!'); if btsieg.Caption=('Kontra!') then textein('A: Spieler 1 sagt Kontra!'); btsieg.Enabled:=false; bthochzeit.Enabled:=false; btheimlichen.Enabled:=false; end; procedure Tformdoppelkopf.textein(txt:string); var MemoText : String; begin MemoText:=chatfenster.Text; Insert(txt +Slinebreak, MemoText, +37); chatfenster.Text:=MemoText; end; procedure Tformdoppelkopf.btsauenClick(Sender: TObject); begin btsauen.Enabled:=false; textein('A: Spieler 1 hat Superschweine!'); end; procedure Tformdoppelkopf.btheimlichenClick(Sender: TObject); begin textein('(A): Ich spiele einen Heimlichen'); bthochzeit.Enabled:=false; btheimlichen.Enabled:=false; btsieg.Enabled:=false; laspieler2.Caption:=('Spieler 2 - Gegner'); laspieler3.Caption:=('Spieler 3 - Gegner'); laspieler4.Caption:=('Spieler 3 - Gegner'); end; procedure Tformdoppelkopf.btsonssoliClick(Sender: TObject); begin showmessage('Geben Sie dem Programmierer nur 3.000€ für XXL-Version des Programms - und dann gehts'); end; procedure Tformdoppelkopf.btkoenigClick(Sender: TObject); begin showmessage('Das geht nich! Wir sind hier nich bei Maxens!'); end; procedure Tformdoppelkopf.btkeinenvClick(Sender: TObject); begin panel1.Visible:=false; disabbl(1); end; procedure Tformdoppelkopf.bthochzeitClick(Sender: TObject); begin textein('A: ' + 'Spieler 1 hat ne Hochzeit!'); bthochzeit.Enabled:=false; btheimlichen.Enabled:=false; end; procedure Tformdoppelkopf.disabbl; begin if i=0 then begin btschweine.Enabled:=false; btsieg.Enabled:=false; btkeine9.Enabled:=false; btstrich.Enabled:=false; btheimlichen.Enabled:=false; bthochzeit.Enabled:=false; btarmut.Enabled:=false; bt5neun.Enabled:=false; btaus.Enabled:=false; btvorbehalte.Enabled:=false; btgebe.Enabled:=false; gridspieler1.Enabled:=false; gridspieler2.Enabled:=false; gridspieler3.Enabled:=false; gridspieler4.Enabled:=false; panel1.Visible:=true; end; if i=1 then begin btaus.Enabled:=true; btvorbehalte.Enabled:=true; btgebe.Enabled:=true; gridspieler1.Enabled:=true; gridspieler2.Enabled:=true; gridspieler3.Enabled:=true; gridspieler4.Enabled:=true; panel1.Visible:=false; end; end; procedure Tformdoppelkopf.btarmutClick(Sender: TObject); begin if poskr>1 then textein('Spieler 1 ist arm - mit') else textein('Spieler 1 ist arm - ohne'); btarmut.Enabled:=false; end; procedure Tformdoppelkopf.btstrichClick(Sender: TObject); begin textein('Es wird neugegeben, da Spieler1 "unterm Strich ist".'); btstrich.Enabled:=false; end; procedure Tformdoppelkopf.bt5neunClick(Sender: TObject); begin textein('Es wird neugegeben, da Spieler1 mind. fünf Neunen hat.'); bt5neun.Enabled:=false; end; procedure Tformdoppelkopf.btkeine9Click(Sender: TObject); begin if ansa=0 then if btkeine9.Caption=('Keine 9!') then begin btkeine9.Caption:=('Keine 6!'); textein('A: Spieler 1 erreicht mind. 151 Augen.'); end; if ansa=1 then if btkeine9.Caption=('Keine 6!') then begin btkeine9.Caption:=('Keine 3!'); textein('A: Spieler 1 erreicht mind. 181 Augen.'); end; if ansa=2 then if btkeine9.Caption=('Keine 3!') then begin btkeine9.Caption:=('Schwarz!'); textein('A: Spieler 1 erreicht mind. 201 Augen.'); end; if ansa=3 then if btkeine9.Caption=('Schwarz!') then textein('A: Spieler 1 bekommt alle Augen.'); ansa:=ansa+1; end; end. |
Re: Doppelkopf-Projekt
Ich hab einfach mal ne ganz andere kurze Frage, jedenfalls passt es, weil es um Kartenspiele geht. Besteht eigentlich irgendwie die Möglichkeit (außer "Selber einscannen") Original Grafiken von Karten zu bekommen?
Ich meine, woher haben alle anderen Spiele, die original Karten her? |
Re: Doppelkopf-Projekt
Liste der Anhänge anzeigen (Anzahl: 1)
Die Spielkarten kann man sich aus der registry ziehen. Willst du auchnoch den Weg wissen?
|
Re: Doppelkopf-Projekt
Liste der Anhänge anzeigen (Anzahl: 2)
Mittlerweile hab' ich mich mal wieder rangemacht und Phase zwei abgeschlossen.
Für Verbesserungen bin ich jederzeit offen... :wink:
Delphi-Quellcode:
Nun sind dran:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls, Buttons, jpeg, ExtCtrls, ComCtrls, Spin,ShellApi, mmsystem ; type Tformdoppelkopf = class(TForm) gridspieler1: TStringGrid; gridspieler2: TStringGrid; gridspieler3: TStringGrid; gridspieler4: TStringGrid; btaus: TBitBtn; btgebe: TBitBtn; logo_w: TImage; Chatfenster: TMemo; Edit1: TEdit; btKommentar: TButton; btchat: TButton; btregeln: TButton; OpenDlg: TOpenDialog; laspieler4: TLabel; laspieler3: TLabel; laspieler2: TLabel; Button1: TButton; Label1: TLabel; btvorbehalte: TButton; Label2: TLabel; gridstich: TStringGrid; lastich: TLabel; Panel1: TPanel; btsauen: TButton; bthochzeit: TButton; btsieg: TButton; btkeine9: TButton; bt5neun: TButton; btarmut: TButton; btschweine: TButton; btkeinenv: TButton; btheimlichen: TButton; btstrich: TButton; btkoenig: TButton; btsonssoli: TButton; trumpfanzahl: TLabel; rregeln: TRichEdit; Image1: TImage; BitBtn1: TBitBtn; laarmut: TLabel; Label3: TLabel; Label4: TLabel; btgrid1enabled: TButton; Label5: TLabel; Kartenaufnahme: TButton; procedure btausClick(Sender: TObject); procedure btgebeClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure gridspieler1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure gridspieler2DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure gridspieler3DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure gridspieler4DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure btchatClick(Sender: TObject); procedure btKommentarClick(Sender: TObject); procedure btregelnClick(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure Button1Click(Sender: TObject); procedure btvorbehalteClick(Sender: TObject); procedure gridspieler1Click(Sender: TObject); procedure btschweineClick(Sender: TObject); procedure btsiegClick(Sender: TObject); procedure btsauenClick(Sender: TObject); procedure btheimlichenClick(Sender: TObject); procedure btsonssoliClick(Sender: TObject); procedure btkoenigClick(Sender: TObject); procedure btkeinenvClick(Sender: TObject); procedure bthochzeitClick(Sender: TObject); procedure btarmutClick(Sender: TObject); procedure btstrichClick(Sender: TObject); procedure bt5neunClick(Sender: TObject); procedure btkeine9Click(Sender: TObject); procedure btgrid1enabledClick(Sender: TObject); procedure gridstichDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure KartenaufnahmeClick(Sender: TObject); private procedure geben; procedure wimageload; procedure sreihenfolge; function PosN(Substring, Mainstring: string; n: Integer): Integer; procedure cleangrd(grd:TStringgrid); procedure sortiere(w,s,h,e:integer); procedure textein(txt:string); procedure disabbl(i:integer); public { Public declarations } end; var formdoppelkopf: Tformdoppelkopf; karten:array[0..48] of TBitmap; nummern:array[0..48]of Integer; spieler1:array[0..11] of Integer; spieler2:array[0..11] of Integer; spieler3:array[0..11] of Integer; spieler4:array[0..11] of Integer; arstich:array[0..3] of Integer; arar: array[0..2] of Integer; schweine1, supers1,hochzeit1,armut,neun, gekarten, //wieviele Karten gespielt wurden ansa, //für keine 9, Anzahl der angesagten "Limits" other,//ob Karten gegben worden sind poskr, //ob ne kreuzdame vorhanden ist, und wenn ja wo (w/w+1) zstd, // ob Regeln angezeigt werden oder nich dransein,wr1,wr2,wr3,wr4, //für die Reihenfolge der Spieler trumpf, //Anzahl der Trümpfe anzahl, vorbehaltclick, siegja:integer; //Anzahl der gespielten Karten timeto:string; // Spielbeginn const LF = #43#10; // LF steht für LineFeed implementation {$R *.dfm} { Sounds: sndPlaySound(PChar('C:\Datei.wav'),SND_SYNC); SND_SYNC = Während die Datei abgespielt wird, steht die Anwendung SND_ASYNC = Die Datei wird unabhängig vom Programm abgespielt. SND_LOOP = Immer wieder und immer wieder sndPlaySound(nil,0);} procedure Tformdoppelkopf.FormCreate(Sender: TObject); var w:integer; begin timeto:=(timetostr(now)); textein('Spielbeginn: ' + timeto); for w:=0 to 48 do nummern[w]:=w; wimageload; cleangrd(gridspieler1); cleangrd(gridspieler2); cleangrd(gridspieler3); cleangrd(gridspieler4); cleangrd(gridstich); end; procedure Tformdoppelkopf.textein(txt:string); var MemoText : String; begin MemoText:=chatfenster.Text; Insert(Slinebreak +txt, MemoText, +38); chatfenster.Text:=MemoText; end; procedure TFormdoppelkopf.sortiere(w,s,h,e:integer); var x,y,q:integer; begin if h=1 then begin if s=1 then begin for x:=0 to 10 do if spieler1[x]=w then begin spieler1[x]:=spieler1[x+1]; spieler1[x+1]:=w; end; end; end; if h=0 then begin for x:=0 to 10 do begin for q:=x+1 to 11 do begin if ((spieler1[q])<(spieler1[x])) then begin y:=spieler1[x]; spieler1[x]:=spieler1[q]; spieler1[q]:=y; end; end; end; end; gridspieler1.Refresh; end; procedure TFormdoppelkopf.cleangrd(grd:TStringgrid); var grdRec:TGridRect; begin with grdRec do begin Top:=-1; Left:=-1; Right:=-1; Bottom:=-1; end; grd.Selection:=grdRec; end; procedure TFormdoppelkopf.sreihenfolge; begin if wr1=4 then wr1:=1 else wr1:=wr1+1; if wr2=4 then wr1:=1 else wr2:=wr2+1; if wr3=4 then wr1:=1 else wr3:=wr3+1; if wr4=4 then wr1:=1 else wr4:=wr4+1; if wr1=4 then dransein:=1 else dransein:=wr1+1; end; procedure Tformdoppelkopf.geben; var w,i,x,j:integer; begin for w:=0 to 11 do begin spieler1[w]:=48; spieler2[w]:=48; spieler3[w]:=48; spieler4[w]:=48; end; chatfenster.Clear; chatfenster.Lines.Add('Chatfenster'); chatfenster.Lines.Add('Spielbeginn: '+(timeto)); Randomize; for i:= 0 to 47 do begin j:=Random(47); X:=nummern[i] ; nummern[i]:= nummern[j]; nummern[j]:=x; end; { spieler1[0]:=1; // 22 spieler1[1]:=2; //23 spieler1[2]:=3; //28 spieler1[3]:=4; //29 spieler1[4]:=5; //40 spieler1[5]:=6; //41 spieler1[6]:=7; //42 spieler1[7]:=12; //43 spieler1[8]:=13; //44 spieler1[9]:=45; // 45 spieler1[10]:=46; // 46 spieler1[11]:=47; //47 } for i:=0 to 11 do begin spieler1[i]:=nummern[i]; spieler2[i]:=nummern[i+12]; spieler3[i]:=nummern[i+24]; spieler4[i]:=nummern[i+36]; end; for i:=0 to 10 do begin for j:=i+1 to 11 do begin if spieler1[j] < spieler1[i] then begin x:=spieler1[i]; spieler1[i]:=spieler1[j]; spieler1[j]:=x; end; if spieler2[j] < spieler2[i] then begin x:=spieler2[i]; spieler2[i]:=spieler2[j]; spieler2[j]:=x; end; if spieler3[j] < spieler3[i] then begin x:=spieler3[i]; spieler3[i]:=spieler3[j]; spieler3[j]:=x; end; if spieler4[j] < spieler4[i] then begin x:=spieler4[i]; spieler4[i]:=spieler4[j]; spieler4[j]:=x; end; end; end; other:=1; gridspieler1.Refresh; gridspieler2.Refresh; gridspieler3.Refresh; gridspieler4.Refresh; end; procedure Tformdoppelkopf.btausClick(Sender: TObject); begin //MessageDlg('Copyright © 2006 by tankm26', mtCustom, [mbOK], 0); close; end; procedure Tformdoppelkopf.btgebeClick(Sender: TObject); begin arstich[0]:=nummern[48]; arstich[1]:=nummern[48]; arstich[2]:=nummern[48]; arstich[3]:=nummern[48]; btschweine.Visible:=true; siegja:=0; anzahl:=0; label5.Caption:=IntToStr(anzahl); gekarten:=0; zstd:=0; other:=0; ansa:=0; gekarten:=0; geben; vorbehaltclick:=0; btvorbehalte.Enabled:=true; gridspieler1.Enabled:=true; gridstich.Refresh; end; procedure Tformdoppelkopf.btvorbehalteClick(Sender: TObject); var w:integer; begin trumpf:=0; neun:=0; hochzeit1:=0; schweine1:=0; supers1:=0; disabbl(0); if vorbehaltclick=0 then begin for w:=0 to 11 do begin if spieler1[w]>21 then begin //Trümpfe zählen trumpf:=trumpf+1; label2.Caption:=IntToStr(trumpf); end; //if trumpf=2 then arstich[2]:=11; if spieler1[w]=0 then neun:=1; if spieler1[w]=1 then neun:=neun+1; //herz 9 if spieler1[w]=6 then neun:=neun+1; if spieler1[w]=7 then neun:=neun+1; //pik 9 if spieler1[w]=14 then neun:=neun+1; if spieler1[w]=15 then neun:=neun+1; //kreuz 9 if spieler1[w]=22 then neun:=neun+1; if spieler1[w]=23 then neun:=neun+1; //karo 9 if (spieler1[w]=44) and (spieler1[w+1]=45)then hochzeit1:=1; //Hochzeit if ((spieler1[w]=44) or (spieler1[w]=45)) then poskr:=w; //Kreuzdame if (spieler1[w]= 28)and(spieler1[w+1]= 29) then schweine1:=1; //Schweine if schweine1=1 then if ((spieler1[w]= 22)and(spieler1[w+1]= 23))then supers1:=1; //(Super-)sauen if gekarten=0 then begin if spieler1[11]<29 then btstrich.Enabled:=true; // unterm Strich if (neun>4) then bt5neun.Enabled:=true; // Neunen if armut=1 then btarmut.Enabled:=true; //Armut if schweine1=1 then btschweine.Enabled:=true; //Schweine if ((btschweine.Enabled=true) and (supers1=1)) then btsauen.Enabled:=true; //(Super-)sauen if hochzeit1=1 then begin bthochzeit.Enabled:=true; btheimlichen.Enabled:=true; // Hochzeit end else begin bthochzeit.Enabled:=false; // Hz btheimlichen.Enabled:=false; end; // Hz if trumpf<4 then begin armut:=1; btarmut.Enabled:=true; end; if trumpf>3 then begin armut:=0; btarmut.Enabled:=false; end; label1.Caption:=IntToStr(armut); vorbehaltclick:=1; end; end; // for w:=0 to... - end end; // vorbehaltclick - end if (gekarten=4) then begin label1.Visible:=false; if poskr>0 then btsieg.Caption:=('Re!') else btsieg.Caption:=('Kontra!'); if not (laspieler2.Caption=('Spieler 2 - Gegner')) then btsieg.Enabled:=true; end; end; procedure Tformdoppelkopf.gridspieler1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var w:integer; begin for w:=0 to 47 do if other= 1 then begin if spieler1[Acol]=w then gridspieler1.Canvas.Draw(rect.left, rect.top, Karten[w]); end else cleangrd(gridspieler1); end; procedure Tformdoppelkopf.gridspieler2DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if other= 1 then gridspieler2.Canvas.Draw(rect.left, rect.top, Karten[48]); end; procedure Tformdoppelkopf.gridspieler3DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if other= 1 then gridspieler3.Canvas.Draw(rect.left, rect.top, Karten[48]); end; procedure Tformdoppelkopf.gridspieler4DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if other= 1 then gridspieler4.Canvas.Draw(rect.left, rect.top, Karten[48]); end; procedure Tformdoppelkopf.btchatClick(Sender: TObject); begin if not (edit1.Text=('')) then begin chatfenster.Lines.Add('C: ' + edit1.text); chatfenster.Perform(WM_VSCROLL, SB_BOTTOM, 0); edit1.Clear; end; end; procedure Tformdoppelkopf.btKommentarClick(Sender: TObject); begin if not (edit1.Text=('')) then begin chatfenster.Lines.Add('K: ' + edit1.text); edit1.Clear; end; end; procedure Tformdoppelkopf.btregelnClick(Sender: TObject); begin rregeln.Clear; if zstd=0 then begin rregeln.Visible:=true; btregeln.Caption:=('Genug!'); if OpenDlg.Execute then rregeln.Lines.LoadFromFile(OpenDlg.FileName); //rregeln.Lines.LoadFromFile(...\'01_dokoordnung'); zstd:=1; end else begin btregeln.Caption:=('Regeln!'); rregeln.Visible:=false; zstd:=0; end; end; procedure Tformdoppelkopf.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose:= MessageDlg('Wirklich beenden?', mtConfirmation, [mbyes,mbno], 0) = mrYes; end; procedure Tformdoppelkopf.Button1Click(Sender: TObject); var MemoText : String; Text : String; begin MemoText := chatfenster.Text; Text := 'Das ist ein Test'; Insert(Text +Slinebreak, MemoText, +37); chatfenster.Text := MemoText; end; function Tformdoppelkopf.PosN(Substring, Mainstring: string; n: Integer): Integer; // Funktion zum Suchen ob ein Zeichen im String enthalten ist begin // if Pos(substring, mainstring) = 0 then begin // posn := 0; // Exit; // end else begin // if n = 1 then posn := Pos(substring, mainstring) // else begin // posn := Pos(substring, mainstring) + posn(substring, Copy(mainstring, // (Pos(substring, mainstring) + 1), Length(mainstring)), n - 1); // end; // end; // end; procedure Tformdoppelkopf.gridspieler1Click(Sender: TObject); begin gekarten:=gekarten+1; label3.CAption:=IntToStr (gekarten); if anzahl=0 then begin arstich[0]:=spieler1[gridspieler1.Col]; spieler1[gridspieler1.Col]:=nummern[48]; arstich[1]:=nummern[48]; arstich[2]:=nummern[48]; arstich[3]:=nummern[48]; end; if anzahl=1 then begin arstich[1]:=spieler1[gridspieler1.Col]; spieler1[gridspieler1.Col]:=nummern[48]; arstich[2]:=nummern[48]; arstich[3]:=nummern[48]; end; if anzahl=2 then begin arstich[2]:=spieler1[gridspieler1.Col]; spieler1[gridspieler1.Col]:=nummern[48]; arstich[3]:=nummern[48]; end; if anzahl=3 then begin arstich[3]:=spieler1[gridspieler1.Col]; spieler1[gridspieler1.Col]:=nummern[48]; end; anzahl:=anzahl+1; label5.Caption:=IntToStr(anzahl); sortiere(48,1,1,0); gridstich.Refresh; gridspieler1.Refresh; end; procedure Tformdoppelkopf.btschweineClick(Sender: TObject); begin sortiere(28,1,1,0); sortiere(29,1,1,0); btschweine.Visible:=false; textein('A: Spieler 1 hat Schweine!'); btsauen.Enabled:=true; end; procedure Tformdoppelkopf.btsiegClick(Sender: TObject); begin siegja:=1; if btsieg.Caption=('Re!') then textein('A: Spieler 1 sagt Re!'); if btsieg.Caption=('Kontra!') then textein('A: Spieler 1 sagt Kontra!'); btsieg.Enabled:=false; btkeine9.Enabled:=true; bthochzeit.Enabled:=false; btheimlichen.Enabled:=false; end; procedure Tformdoppelkopf.btsauenClick(Sender: TObject); begin sortiere(22,1,1,0); sortiere(23,1,1,0); btsauen.Enabled:=false; textein('A: Spieler 1 hat Superschweine!'); end; procedure Tformdoppelkopf.btheimlichenClick(Sender: TObject); begin textein('(A): Ich spiele einen Heimlichen'); bthochzeit.Enabled:=false; btheimlichen.Enabled:=false; btsieg.Enabled:=false; laspieler2.Caption:=('Spieler 2 - Gegner'); laspieler3.Caption:=('Spieler 3 - Gegner'); laspieler4.Caption:=('Spieler 4 - Gegner'); end; procedure Tformdoppelkopf.btsonssoliClick(Sender: TObject); begin showmessage('Geben Sie dem Programmierer nur 3.000€ für XXL-Version des Programms - und dann gehts'); end; procedure Tformdoppelkopf.btkoenigClick(Sender: TObject); begin showmessage('Das geht nich! Wir sind hier nich bei Maxens!'); end; procedure Tformdoppelkopf.btkeinenvClick(Sender: TObject); begin if not (btheimlichen.Enabled=true) then begin panel1.Visible:=false; disabbl(1); end else showmessage('Entscheiden Sie sich gefälligst zwischen einem "Heimlichen" und der "Hochzeit"'); end; procedure Tformdoppelkopf.bthochzeitClick(Sender: TObject); begin textein('A: ' + 'Spieler 1 hat ne Hochzeit!'); bthochzeit.Enabled:=false; btheimlichen.Enabled:=false; end; procedure Tformdoppelkopf.disabbl; begin if i=0 then begin btschweine.Enabled:=false; btsieg.Enabled:=false; btkeine9.Enabled:=false; btstrich.Enabled:=false; btheimlichen.Enabled:=false; bthochzeit.Enabled:=false; btarmut.Enabled:=false; bt5neun.Enabled:=false; btaus.Enabled:=false; btvorbehalte.Enabled:=false; btgebe.Enabled:=false; gridspieler1.Enabled:=false; gridspieler2.Enabled:=false; gridspieler3.Enabled:=false; gridspieler4.Enabled:=false; panel1.Visible:=true; end; if i=1 then begin btaus.Enabled:=true; btvorbehalte.Enabled:=true; btgebe.Enabled:=true; gridspieler1.Enabled:=true; gridspieler2.Enabled:=true; gridspieler3.Enabled:=true; gridspieler4.Enabled:=true; panel1.Visible:=false; end; end; procedure Tformdoppelkopf.btarmutClick(Sender: TObject); begin if poskr>1 then textein('Spieler 1 ist arm - mit') else textein('Spieler 1 ist arm - ohne'); btarmut.Enabled:=false; end; procedure Tformdoppelkopf.btstrichClick(Sender: TObject); begin textein('Es wird neugegeben, da Spieler1 "unterm Strich ist".'); btstrich.Enabled:=false; end; procedure Tformdoppelkopf.bt5neunClick(Sender: TObject); begin textein('Es wird neugegeben, da Spieler1 mind. fünf Neunen hat.'); bt5neun.Enabled:=false; end; procedure Tformdoppelkopf.btkeine9Click(Sender: TObject); begin if ansa=0 then if btkeine9.Caption=('Keine 9!') then begin btkeine9.Caption:=('Keine 6!'); textein('A: Spieler 1 erreicht mind. 151 Augen.'); end; if ansa=1 then if btkeine9.Caption=('Keine 6!') then begin btkeine9.Caption:=('Keine 3!'); textein('A: Spieler 1 erreicht mind. 181 Augen.'); end; if ansa=2 then if btkeine9.Caption=('Keine 3!') then begin btkeine9.Caption:=('Schwarz!'); textein('A: Spieler 1 erreicht mind. 201 Augen.'); end; if ansa=3 then if btkeine9.Caption=('Schwarz!') then begin textein('A: Spieler 1 bekommt alle Augen.'); btkeine9.Enabled:=false; end; ansa:=ansa+1; end; procedure Tformdoppelkopf.wimageload; var i: integer; begin for i:=0 to 48 do begin karten[i]:=TBitmap.Create; karten[i].LoadFromFile(IntToStr(i)+'.bmp'); end; end; procedure Tformdoppelkopf.btgrid1enabledClick(Sender: TObject); begin if gridspieler1.Enabled=true then begin gridspieler1.Enabled:=false; btgrid1enabled.Caption:=('Enablen'); end else begin gridspieler1.Enabled:=true; btgrid1enabled.Caption:=('Disablen'); end; end; procedure Tformdoppelkopf.gridstichDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var w:integer; begin if other= 1 then begin for w:=0 to 47 do if arstich[Acol]=w then gridstich.Canvas.Draw(rect.left, rect.top, Karten[w]); end else cleangrd(gridspieler1); end ; procedure Tformdoppelkopf.KartenaufnahmeClick(Sender: TObject); begin if anzahl=4 then begin spieler1[8]:=arstich[0]; arstich[0]:=nummern[48]; spieler1[9]:=arstich[1]; arstich[1]:=nummern[48]; spieler1[10]:=arstich[2]; arstich[2]:=nummern[48]; spieler1[11]:=arstich[3]; arstich[3]:=nummern[48]; end; sortiere(0,1,0,0); gridspieler1.Refresh; gridstich.Refresh; end; end. · Bedienen · Stich · Punkte · Sieger . Spielanleitung Bis denn, Wieland |
Re: Doppelkopf-Projekt
Liste der Anhänge anzeigen (Anzahl: 1)
so, ich hab nu einige Verbesserungen vorgenommen, so kann man nun Karten ausspielen (zwar nur eine Runde, aber das wird scho')
|
Re: Doppelkopf-Projekt
wie kann ich diese for-Schleife abbrechen? es soll überprüft werden, ob 'w' in spieler2 enthalten ist.
Delphi-Quellcode:
for s:=0 to 10 do begin
if not spieler2[s]=w then womputerzug(a) else begin if wr2=1 then begin wr3:=2; arstich[0]:=spieler2[s]; arstich[1]:=nummern[48]; arstich[2]:=nummern[48]; arstich[3]:=nummern[48]; hintgr(3); end; if wr2=2 then begin wr3:=3; arstich[1]:=spieler2[s]; hintgr(3); end; if wr2=3 then begin wr3:=4; arstich[2]:=spieler2[s]; hintgr(3); end; if wr2=4 then begin kartenaufnahme.Enabled:=true; arstich[3]:=spieler2[s]; end; spieler2[s]:=nummern[48]; cleangrd(gridspieler2); sortiere(48,1,0,1); gridstich.Refresh; gekarten:=gekarten+1; label3.CAption:=IntToStr (gekarten); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:25 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