AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen FreePascal FreePascal TImage.Create will einfach nicht funktionieren.
Thema durchsuchen
Ansicht
Themen-Optionen

TImage.Create will einfach nicht funktionieren.

Ein Thema von Qnkel · begonnen am 7. Nov 2010 · letzter Beitrag vom 7. Nov 2010
Antwort Antwort
Qnkel

Registriert seit: 14. Mär 2004
114 Beiträge
 
FreePascal / Lazarus
 
#1

TImage.Create will einfach nicht funktionieren.

  Alt 7. Nov 2010, 10:38
Moin.

Hier erstmal mein Code:

Delphi-Quellcode:
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;
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.

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.
Lazarus v0.9.29 (2010-10-31 SVN 28000)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: TImage.Create will einfach nicht funktionieren.

  Alt 7. Nov 2010, 11:11
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Qnkel

Registriert seit: 14. Mär 2004
114 Beiträge
 
FreePascal / Lazarus
 
#3

AW: TImage.Create will einfach nicht funktionieren.

  Alt 7. Nov 2010, 11:16
Da TKarte keine Create-Prozedur hat, wäre das hinfällig.
Lazarus v0.9.29 (2010-10-31 SVN 28000)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: TImage.Create will einfach nicht funktionieren.

  Alt 7. Nov 2010, 11:26
behandelt Lazarus Klassen wie Records??
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Qnkel

Registriert seit: 14. Mär 2004
114 Beiträge
 
FreePascal / Lazarus
 
#5

AW: TImage.Create will einfach nicht funktionieren.

  Alt 7. Nov 2010, 11:33
Keine Ahnung, bin Delphi-Umsteiger.
Lazarus v0.9.29 (2010-10-31 SVN 28000)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: TImage.Create will einfach nicht funktionieren.

  Alt 7. Nov 2010, 11:36
Dann schreib doch mal statt
TKarte = class
TKarte = Record
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Qnkel

Registriert seit: 14. Mär 2004
114 Beiträge
 
FreePascal / Lazarus
 
#7

AW: TImage.Create will einfach nicht funktionieren.

  Alt 7. Nov 2010, 11:50
Hmm gute Idee, als Record geht es.

Aber nun sagt er mir "Cannot assign a TImage to a TPicture"
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
Lazarus v0.9.29 (2010-10-31 SVN 28000)

Geändert von Qnkel ( 7. Nov 2010 um 11:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#8

AW: TImage.Create will einfach nicht funktionieren.

  Alt 7. Nov 2010, 11:52
Geraten und nicht getestet: Karte[iSpieler, iKarte].Tisch.Picture.Assign(Kartenblatt[iAusgegeben]); Edit: Vergiss nicht alles, was du mit "Create" erzeugt hast, am Ende freizugeben (deine ganzen Arrays).

Geändert von Matze ( 7. Nov 2010 um 11:55 Uhr)
  Mit Zitat antworten Zitat
Qnkel

Registriert seit: 14. Mär 2004
114 Beiträge
 
FreePascal / Lazarus
 
#9

AW: TImage.Create will einfach nicht funktionieren.

  Alt 7. Nov 2010, 11:55
Gute Idee, aber gleiches Problem

Der findet die ExtCtrls net und daran wirds liegn... aber warum...
Lazarus v0.9.29 (2010-10-31 SVN 28000)

Geändert von Qnkel ( 7. Nov 2010 um 12:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#10

AW: TImage.Create will einfach nicht funktionieren.

  Alt 7. Nov 2010, 12:54
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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz