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



BeitragVerfasst: Sa 11.03.06 00:04 
Hey!

Ich möchte in mien Programm 6 kleine bmps einbin, die auch ungedingt brauche. Wenn ich nur 2 davon drin habe lässt sich das programm ausführen. Sind es aber schon 4, führt das Compilen zu einem EStackoverflow ...

Was kann ich jetzt tun?

Ich brauche diese Grafiken. Hilft es sie als Jpgs zu nehmen?

danke
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Sa 11.03.06 00:19 
Normalerweise dürfte das kein Problem darstellen.
Wie wärs mit ImageList.
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Sa 11.03.06 00:24 
Ich hoffe, ich täusche mich nicht, aber ein EStackOverflow ist kein EOutOfResources (oder wie der eine da heist...) Bitmaps werden mit sicherheit nicht in den Stack geladen... der ist IIRC für Register gedacht also E*X (* für a-d) welche eine größe von 4 Byte haben... Siehe Assembler.
Was ich darunter verstehen wüde, wäre eine überflutung des Stacks mit PUSHs.
Zu blöd nur dass ich letztens meine Code-Kristallkugel hab fallen lassen, nu isse in der Werkstatt. Könnten wir wohl auf altbewährte Art vom Code erfahren? ;>

Mal schaun obs wirklich an der Größe der Images liegt, aber ich glaubs kaum.

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.


Zuletzt bearbeitet von JayEff am Sa 11.03.06 01:35, insgesamt 1-mal bearbeitet
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Sa 11.03.06 01:29 
In dem Zusammenhang möchte ich bemerken, dass eine EOutOfResources Exception sich sehr oft auch hinter anderen Exceptions versteckt. Wenn die Resourcen für ein Programm knapp werden, dann gibt es die komischten Meldungen: EAccessViolation, EStackOverflow, EOSError, EInvalidGraphic, etc.

Alles selber erlebt und daher nicht ausschliessbar.

_________________
49 63 68 68 61 62 65 6B 65 69 6E 65 41 68 6E 75 6E 67 21
Bockscar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 105



BeitragVerfasst: Sa 11.03.06 10:25 
Das problem ist: Ich kann schlecht den Code pasten, da ich nicht sehe wo der Fehler auftritt und die Unit viel zu groß ist um sie zu pasten. Der Fehler ist aber NIE aufgetreten, erst seit dem 4 kleine bitmaps dazugekommen sind. mache ich sie weg läuft es wieder einwandfrei


kann es deswegen sein, dass immer 2 bilder die gleiche bitmapfile sind (also 8 kleine bilder insgesamt, aber 4mal die gleichen 2/2/2/2) ?
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Sa 11.03.06 21:54 
wenn du nicht weist wo der fehler auftritt, helfen die tasten F7 und F8. diese erlauben es dir, deine Unit zeile für zeile durchlaufen zu lassen. F7 geht da weiter und durchläuft auch andere Units als die von dir geschriebenen, wenn zu Funktionen daraus verwendest. Drücke beim starten einfach F8 statt F9 und schau mal was passiert. (für die nächste Zeile dann halt nochmal F8, dann nochmal usw)

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Bockscar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 105



BeitragVerfasst: So 12.03.06 09:44 
Folgendes ist die Prozedur, die die neuen Muenzen auf das Spielfeld malt.
Dazu kommt draw_coin, die wiederrum die Beschriftung auf die Münzen malt.
Und Del_bets, die die Grafiken löscht.

Zur Funktion:
Man muss sich vorstellen, dass es jeweils 2 runde und 2 eckige Münzen der Farbe rot (player1) und das gleiche der Farbe rosa gibt.
Diese Münzen sind unbeschriften und nicht sichtbar.

Beim Click auf den Tisch wird geprüft ob der Einsatz ok ist und dann in der Table_click Prozedur die Coin_draw aufgerufen und den Wert des Einsatzes auf die linke leere Münze (Rund bei <100 und Eckig bei > 100 ... vgl. Jetons bei Roulette).
Diese Münze wird auf den Tisch gemalt und dann wird die 2. leere Münze nochmal kopiert für das nächste Mal.

Entschuldigt, dass soviel auskommentiert ist, aber damit es läuft kann ich eben bisher nur eine Grafik auf dem Bildschirm haben (Gestern Mittag konnten es noch 2 sein ... *seltsamfind*)

Irgendjemand hatte etwas von bitmap.free oder so gesagt. Es scheint ja irgendeine LOKALE Variable riesig zu werden (vlt. die die die bilder speichert) ...

Ich wäre sehr dankbar für erklaerungen!

ausblenden volle Höhe 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:
50:
procedure TSpielflaeche.table_click(Sender: TObject);
var bet,new,x,y :integer;

begin

...

{Berechnung der Koordinaten}

...

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
       Spielflaeche.Fakemuenze1.Canvas.Brush.Style:=bsClear;
       Spielflaeche.draw_coin(new,1); // Auf Image7 den Einsatz schreiben
       Spielflaeche.l_tisch.Canvas.Draw(x,y,Spielflaeche.Fakemuenze1.Picture.Graphic);
      Spielflaeche.Fakemuenze1.Picture.Graphic:=Spielflaeche.Fakemuenze2.Picture.Graphic; 
      end
     else
      begin
      {Spielflaeche.draw_coin(new,2); // Auf Image7 den Einsatz schreiben
      Spielflaeche.l_tisch.Canvas.Draw(x,y,Spielflaeche.Fakemuenze3.Picture.Graphic);
      Spielflaeche.Fakemuenze3.Picture.Graphic:=Spielflaeche.Fakemuenze4.Picture.Graphic;}

      end;
   end
    else if croupier.show_active_player = 2 then
    begin
     if croupier.show_bets(bet) < 100 then
      begin
       {Spielflaeche.draw_coin(new,3); // Auf Image7 den Einsatz schreiben
       Spielflaeche.l_tisch.Canvas.Draw(x,y,Spielflaeche.Fakemuenze5.Picture.Graphic);
       Spielflaeche.Fakemuenze5.Picture.Graphic:=Spielflaeche.Fakemuenze6.Picture.Graphic;}

      end
     else
      begin
      {Spielflaeche.coin(new,4); // Auf Image7 den Einsatz schreiben
      Spielflaeche.l_tisch.Canvas.Draw(x,y,Spielflaeche.Fakemuenze7.Picture.Graphic);
      Spielflaeche.Fakemuenze7.Picture.Graphic:=Spielflaeche.Fakemuenze8.Picture.Graphic;}

      end;
     end;
   end;
end;


Die Beschriftung der Münzen:


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TSpielflaeche.draw_coin(Value,coin:Integer);
begin
 {Fakemuenze1.Canvas.Font.Style := [fsbold]; }
 case coin of
 1 : Spielflaeche.Fakemuenze1.Canvas.TextOut(3,5,IntToStr(Value));
 {'2' : Spielflaeche.Fakemuenze3.Canvas.TextOut(3,5,IntToStr(Value));
 '3' : Spielflaeche.Fakemuenze5.Canvas.TextOut(3,5,IntToStr(Value));
 '4' : Spielflaeche.Fakemuenze7.Canvas.TextOut(3,5,IntToStr(Value));}

 end;
end;


hier zum entfernen der münzen

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TSpielflaeche.b_delbetClick(Sender: TObject);
begin
croupier.delete_bets(activeplayer);
l_tisch.Repaint;
end;
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Mo 13.03.06 13:34 
Ich sehe in deinem Quellcode Methoden der Klasse TSpielflaeche. Darin greifst du auf eine Variable namens Spielflaeche zu. Warum? Du bist in der Klasse und greifst auf eine Variable zu, welche immer nur eine Instanz beinhalten kann -> kreuz gefährlich. Wenn du das bei deinen Formularen auch machst: gewöhn es dir schleunigst ab! Form1. innerhalb von Methoden von TForm1 verhindert jede Möglichkeit einer zweiten Instanz bzw. zerstört das gesamte OOP Konzept.

_________________
49 63 68 68 61 62 65 6B 65 69 6E 65 41 68 6E 75 6E 67 21