Autor Beitrag
Bockscar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 105



BeitragVerfasst: So 12.03.06 21:24 
Ich habe ein wenig im Forum gestöbert und vlt. eine Lösung für mein Problem gefunden.
Die sieht wie folgt aus:
Allerdings bekomme ich beim DELBET klicken einen EAccessviolationfehler in der Prozedur!

Deklaration:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
type
Tplayermuenzen = array [1..100of Tbitmap;

{...}

var   p1_coins,p2_coins     :Tplayermuenzen;



Münzen zeichnen für Player1 (Player 2 Analog: Nur p1_coins = p2_coins)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
if croupier.show_active_player = 1 then
     begin
     p1_coins[coin_counter+1] := Tbitmap.create; {!!!}
     if croupier.show_bets(bet) < 100 then
      begin
       with p1_coins[coin_counter+1do begin
  //Coin_counter steht bei Spielerwechsel wieder auf 0, weil derjenige ja erst 0 Münzen gelegt hat
       {pfad := ExtractFilePath(Application.ExeName) + 'bilder\muenzen\coin0rosarund.bmp';
       Loadfromfile(pfad);
       Transparent := true;
       Canvas.Brush.Style:=bsClear;
       Canvas.TextOut(3,5,IntToStr(new));   Einsatz schreiben}

       Spielflaeche.l_tisch1.Canvas.Draw(x,y,p1_coins[coin_counter+1]);
       end;
      end
     else
      begin
       with p1_coins[coin_counter+1do begin
       {pfad := ExtractFilePath(Application.ExeName) + 'bilder\muenzen\coin0rosaeck.bmp';
       Loadfromfile(pfad);
       Transparent := false;
       Canvas.Brush.Style:=bsClear;
       Canvas.TextOut(3,5,IntToStr(new));   Einsatz schreiben}

       Spielflaeche.l_tisch1.Canvas.Draw(x,y,p1_coins[coin_counter+1]);
       end;
       end;


Um bei Klick auf DELBETS wieder die Münzgrafiken zu löschen folgender Code in der clickprozedur

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
if croupier.show_active_player = 1 then begin
 for i:=1 to 100 do
  begin
   p1_coins[i].Width := 0{Hier haette ich gerne visible := false, aber er kennts irgendwie nicht}
   p1_coins[i].Height := 0;
   p1_coins[i].Free;
  end;
 end
 else
  begin
   p2_coins[i].Width := 0;
   p2_coins[i].Height := 0;
   p2_coins[i].Free;
  end;


ich wäre für jede Hilfe dankbar!"
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: So 12.03.06 22:03 
Ein TBitmap ist keine sichtbare Komponente... Die kann man nicht direkt anzeigen lassen. Es ist quasi nur ein Container für Bitmap-Graphiken.
Bockscar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 105



BeitragVerfasst: So 12.03.06 22:09 
Also soll ich TImage nehmen? oder was möchtest du mir damit sagen?
Ich kann wunderbar Grafiken erstellen, aber wenn ich eben auf diese zugreifen will und sie invisible und dann .free machen will gibts nen accessfehler
root_at_localhost
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 191



BeitragVerfasst: So 12.03.06 23:20 
ausblenden Delphi-Quelltext
1:
2:
p2_coins[i].Width := 0;
p2_coins[i].Height := 0;

sind schlicht und einfach überflüssig

du initialisierst per
ausblenden Delphi-Quelltext
1:
p1_coins[coin_counter+1] := Tbitmap.create;					


aber ist da noch ne Schleife drumrum? Ich sehe nicht, dass du alle 100 Objekte initialisieren würdest, wenn du aber ein nicht existierendes Objekt per .Free freizugeben versuchst kriegst du eine Access Violation.
Bockscar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 105



BeitragVerfasst: Mo 13.03.06 07:08 
ok verstanden, aber ich will die nicht nur FREE machen, sondern eben auch invisible wie geht das ...
oder mach ich es grundlegend falsch?
frank-wob
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 13.03.06 09:22 
Hallo,
so wie ich das sehe, möchtest du die Münzen auf deiner Spielfläche wieder unsichtbar machen, oder? Dazu mußt einen Teil des Canvas der Spielfläche, oder die ganze Spielfläche wieder neu zeichnen.

Der EAccessviolationfehler tritt vermutlich auf, weil nicht alle 99 Münzen auch initialisiert wurden.

Gruß Frank