Entwickler-Ecke

Sonstiges (Delphi) - Repaint eines Labels betrifft auch andere Labels?


Bockscar - So 12.03.06 11:22
Titel: Repaint eines Labels betrifft auch andere Labels?
Guten Morgen.

Eine kleine Frage habe ich.

Je nach dem welcher Spieler dran ist, werden Münzen auf dem label l_tisch1 oder l_tisch2 gemalt. Diese Labels liegen beinahe übereinander.

Bei einem Click auf DELETE sollen eigentlich nur die Münzen des Spielers der dran ist gelöscht werden. Sprich: Bei player1 führt der Click auf DELETE eben l_tisch1.repaint aus.

Komischerweise ist es aber so, dass wenn ich als Spieler 2 (der nach Spieler1 dran ist) DELETE drücke eben nicht nur seine münzen(l_tisch2.repaint) sondern auch die von spieler1(l_tisch1.repaint) gelöscht werden.

Wie ist das möglich?


GTA-Place - So 12.03.06 11:25

Hab gestern schon gesagt, dass meine Glaskugel verschwunden ist. Wir brauchen Source :wink:


Bockscar - So 12.03.06 11:38

Da gibt es wenig sinnvollen Code: :)

Zum zeichnen:

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:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
try
new := croupier.show_bets(bet);

//Münzen zeichnen Prozess!
if (croupier.show_bets(bet) > 0then
   begin
   //Münze zeichnen
    if croupier.show_active_player = 1 then
     begin
     if croupier.show_bets(bet) < 100 then
      begin
       with bitmap do begin
       Loadfromfile(path);
       Transparent := true;
       Canvas.Brush.Style:=bsClear;
       Canvas.TextOut(3,5,IntToStr(new)); //  Einsatz schreiben
       Spielflaeche.l_tisch1.Canvas.Draw(x,y,bitmap);
       end;
      end
     else
      begin
       with bitmap do begin
       {...}
       Spielflaeche.l_tisch1.Canvas.Draw(x,y,bitmap);
       end;
       end;
   end
    else if croupier.show_active_player = 2 then
    begin
     if croupier.show_bets(bet) < 100 then
      begin
       with bitmap do begin
       {...}
       Spielflaeche.l_tisch2.Canvas.Draw(x,y,bitmap);
       end;
     end
     else
      begin
       with bitmap do begin
       {...}
       Spielflaeche.l_tisch2.Canvas.Draw(x,y,bitmap);
       end;
      end;
     end;
   end;

finally
bitmap.free;
end;


Zum löschen


Delphi-Quelltext
1:
2:
3:
4:
procedure TSpielflaeche.b_delbetClick(Sender: TObject);
begin
croupier.delete_bets(activeplayer);
end;



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
//Einsätze auf Chancen löschen bei Klick auf Delbet!
procedure Tcroupier.delete_bets(activeplayer :Tplayerpointer);
var i :integer;
begin

if activeplayer^ = player1 then
 begin
  Spielflaeche.l_tisch1.Repaint;
  ...

 end

 else
  begin
   Spielflaeche.l_tisch2.Repaint;
   ...
  end;

 croupier.set_round_amount(-Fround_amount);
  end;



Kann es vlt sein dass Repaint nur den Bereich wo das Label liegt was repainted wird neuzeichnet, also auch alles was DAVOR oder dahinter liegt und sich eben nciht auf den inhalt von exakt diesem label beschraenkt?