![]() |
TImage.Create will einfach nicht funktionieren.
Moin.
Hier erstmal mein Code:
Delphi-Quellcode:
Der untere for-to-do-Abschnitt funktioniert nicht. Ich habe es schon mit TCustomImage.Create probiert sowie eine Variable "CTisch = TCustomImage" gemacht und es darüber probiert (wurde mir im IRC geraten), aber all das half nicht.
type
{ Karten } TKarte = class Typ: integer; Sichtbar: Boolean; Tisch: TImage; end; var Hauptform: THauptform; Spielerzahl: integer; Kartenmischung: array[0..31] of integer; Kartenblatt: array[0..31] of TPicture; Deckkarte: TPicture; Karte: array[0..8] of array[1..3] of TKarte; function Kartenladen(Pfad, Typ: string): Boolean; var iBlatt, iSpieler, iKarte, iSpielerkarte, iAusgegeben: integer; begin Result := True; Deckkarte := TPicture.Create; If FileExists(Pfad + '\Deck.' + Typ) then Deckkarte.LoadFromFile(Pfad + '\Deck.' + Typ) Else Result := False; for iBlatt:=0 to 31 do begin Kartenblatt[iBlatt] := TPicture.Create; If FileExists(Pfad + '\' + IntToStr(iBlatt) + '.' + Typ) then Kartenblatt[iBlatt].LoadFromFile(Pfad + '\' + IntToStr(iBlatt) + '.' + Typ) Else Result := False; end; for iSpieler := 0 to Spielerzahl do for iKarte := 1 to 3 do begin Karte[iSpieler, iKarte].Tisch := TImage.Create(nil); for iSpielerkarte := 0 to iAusgegeben do begin Karte[iSpieler, iKarte].Tisch.Picture := Kartenblatt[iAusgegeben]; inc(iAusgegeben); end; end; end; Wo ist das Problem? Ein Update auf Lazarus 0.9.29 half auch nicht. Es kommt: "Projekt a.exe hat Exception-Klasse 'External: SIGSEGV' ausgelöst." und danach ein Assembler-Fenster. |
AW: TImage.Create will einfach nicht funktionieren.
ich weiß nicht ob hier ein Teil des nur nicht mitgeliefert ist:
Delphi-Quellcode:
Karte: array[0..8] of array[1..3] of TKarte;
// ich vermisse etwas in der Art for x := 0 to 8 do for x := 1 to 3 do Karte[x,y] := TKarte.Create; |
AW: TImage.Create will einfach nicht funktionieren.
Da TKarte keine Create-Prozedur hat, wäre das hinfällig.
|
AW: TImage.Create will einfach nicht funktionieren.
behandelt Lazarus Klassen wie Records??
|
AW: TImage.Create will einfach nicht funktionieren.
Keine Ahnung, bin Delphi-Umsteiger. :P
|
AW: TImage.Create will einfach nicht funktionieren.
Dann schreib doch mal statt
TKarte = class TKarte = Record |
AW: TImage.Create will einfach nicht funktionieren.
Hmm gute Idee, als Record geht es.
Aber nun sagt er mir "Cannot assign a TImage to a TPicture" ;)
Delphi-Quellcode:
Karte[iSpieler, iKarte].Tisch.Picture := Kartenblatt[iAusgegeben];
Aber TImage.Picture erwartet doch ein TPicture. Wo isn das Problem? Außerdem sagt er mir immer, wenn ich mit Strg+Leertaste die Eigenschaften aufrufen will, dass er die Unit "ExtCtrls" nicht findet :? |
AW: TImage.Create will einfach nicht funktionieren.
Geraten und nicht getestet:
Delphi-Quellcode:
Edit: Vergiss nicht alles, was du mit "Create" erzeugt hast, am Ende freizugeben (deine ganzen Arrays).
Karte[iSpieler, iKarte].Tisch.Picture.Assign(Kartenblatt[iAusgegeben]);
|
AW: TImage.Create will einfach nicht funktionieren.
Gute Idee, aber gleiches Problem :(
Der findet die ExtCtrls net und daran wirds liegn... aber warum... |
AW: TImage.Create will einfach nicht funktionieren.
Also für meinen Geschmack steckt in dem Code viel zu wenig Objektorientierung (nämlich gar keine).
Dabei kann man in einem Kartenspiel so viele Objekte entdecken: * Die Karte * Der Spieler * Der Spieltisch * Die Kartenliste * Die Spielerliste ... Und ausserdem: nur weil eine Klasse keinen Konstruktor hat, bedeutet das nicht, dass man den Konstruktor nicht aufrufen kann oder muss:
Delphi-Quellcode:
type
TKarte = class Typ: integer; Sichtbar: Boolean; Tisch: TImage; end; var k : TKarte; begin // Da TKarte impliziert von TObject abgeleitet ist und TObject // den Konstruktor .Create bereitstellt, gibt es nur einen // richtigen Weg davon ein Objekt zu erzeugen k:= TKarte.Create; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 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-2025 by Thomas Breitkreuz