Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Anweisungen werden nicht durchgeführt. Warum? (https://www.delphipraxis.net/60639-anweisungen-werden-nicht-durchgefuehrt-warum.html)

nowmaxx 10. Jan 2006 13:56


Anweisungen werden nicht durchgeführt. Warum?
 
Hi Jungs!
Mein erstes Posting hier, also erst mal ein Hi :lol:
Hab mich gerade hier angemeldet, da ich hoffe, dass ihr mir bei einem Problem helfen könnt. Es geth um das Arbeiten mit BitMaps. Hab da so ein Programm geschrieben. Wenn's fertig ist, soll's nach nem kleinen Spiel aussehen.
Doch nun zum Problem:
Hab in einer Button-Klick Methode einige Anweisungen stehen, die auch alle abliefen, also alles gut funktionierte, dann hab ich eine Quell-Text Zeile eingefügt, und es ging gar nichts mehr. Das Programm startet aber und es wird auch keine Exception ausgelöst. Diese Problem hatte ich schon manchmal, immer dann, wenn ich mit BitMaps arbeite. Ich schreib einfach mal den Quelltext, und dann, was passieren soll:
Delphi-Quellcode:
procedure TfMain.bKampfClick(Sender: TObject);
begin
//Formular fKampf zeigen
  fKampf.Show;

 
//Radiogroupzuweisungen
  //Spieler
  if rgPlayer.ItemIndex = 0 then
  begin
    art[1] := ice;
    aussehen[1] := 'Eiselement';
  end;
  //Soll noch erweitert werden.
  //Gegner
  if rgComputer.ItemIndex = 1 then
  begin
    art[2] := earth;
    aussehen[2] := 'Erdelement';
  end;
  //Soll noch erweitert werden.
 
//Spieler = [1]
  //Monsterklasse initialisieren
  Monster := cMonster.create(100,art[1]);
  //Monster zeichnen
  Monster.Show_Monster(10,130,format('Kreaturen/%s.Bmp',[aussehen[1]]),fKampf.Canvas);
  //Level berechnen
  level[1] := Monster.Level;
  //Life zeichnen
  Monster.Show_Life(50,405,Monster.Life_max,Monster.Life_max,fKampf.Canvas);
  {Wenn ich die Zeile drin hab, funktioniert's nicht....?????? 
  fKampf.lLife.Caption := format('%d/%d',[Monster.Life_max,Monster.Life_max]);} 

 
//Gegner = [2]
  //Monsterklasse initialisieren
  Monster := cMonster.create(100,art[2]);
  //Monster zeichnen
  Monster.Show_Monster(510,-15,format('Kreaturen/%s.Bmp',[aussehen[2]]),fKampf.Canvas);
  //Level berechnen
  level[2] := Monster.Level;
  //Life zeichnen
  Monster.Show_Life(580,250,Monster.Life_max,Monster.Life_max,fKampf.Canvas);
end;
Über diesen Button soll jetzt praktisch ein Formular angezeigt werden (fKampf). Aus einigen Radiogroups sollen einige Informationen hereusgelesen werden, mit denen dann auf fKampf handiert werden soll. Dann geth es los mit dem Monster, dass dem Spieler zur Verfügung steht. Sie soll gezeichnet werden (BitMap) und es sollen Eigenschaften zugeordnet werden(Life,Level...). Wenn ich jetzt diese eine Programmcodezeile (durch Kommentar gekennzeichnet) einfüge, werden dir vorigen Anweisungen nicht mehr durchgeführt. Woran könnte das liegen? :wall:

chaosben 10. Jan 2006 14:01

Re: Anweisungen werden nicht durchgeführt. Warum?
 
Hi nowmaxx! Herzlich willkommen in der DelphiPraxis! :hi:

Leider kann ich so auf die Schnelle keinen Fehler sehen. Wenn du partout nicht weiterkommst, könntest du uns ja auch mal das Programm uploaden.

nowmaxx 10. Jan 2006 14:17

Re: Anweisungen werden nicht durchgeführt. Warum?
 
Alles klar, wird gemacht.
Da ich nicht weiß, wie das hier funktioniert, kann man sich das Programm hier downloaden - natürlich kostenfrei! :-D

chaosben 10. Jan 2006 14:31

Re: Anweisungen werden nicht durchgeführt. Warum?
 
Alsoooo,
die vorigen Zeilen werden bei mir ausgeführt. Da stellt sich mir die Frage: Wie kommst du drauf, das diese Zeilen nicht ausgeführt werden?

nowmaxx 10. Jan 2006 15:06

Re: Anweisungen werden nicht durchgeführt. Warum?
 
Wenn das Programm so gestartet werden, wie man es downloaden kann, müsste es auch gehen. Aber nimm mal die Kommentarklammern bei der Zeile "{Wenn ich die Zeile drin hab, funktioniert's nicht....??????fKampf.lLife.Caption := format('%d/%d',[Monster.Life_max,Monster.Life_max]);}" raus. Da funzt's nicht mehr... :gruebel:

chaosben 10. Jan 2006 15:40

Re: Anweisungen werden nicht durchgeführt. Warum?
 
Mensch nowmaxx ... das hab ich doch gemacht. :) Und es geht. 100%ig. Garantiert. Definitiv.

Wie kommst du denn drauf, das es nicht geht?

Luckie 10. Jan 2006 15:42

Re: Anweisungen werden nicht durchgeführt. Warum?
 
Bist du den Code schon mal Schritt für Schritt mit F7 durchgegangen? Werden die Anweisungen überhaupt kompiliert (Ersichtlich an den blaune Punkten am linken Rand.) oder vom Kompiler wegoptimiert?

nowmaxx 10. Jan 2006 15:46

Re: Anweisungen werden nicht durchgeführt. Warum?
 
:gruebel:
Wenn ich das Programm starte, werden die BitMaps nicht gemalt, die blitzen nur ganz kurz auf... :wall:
Das versteh ich absolut nicht... :gruebel:
Zitat:

Bist du den Code schon mal Schritt für Schritt mit F7 durchgegangen? Werden die Anweisungen überhaupt kompiliert (Ersichtlich an den blaune Punkten am linken Rand.) oder vom Kompiler wegoptimiert?
Gerade gemacht...werden alle kompiliert... :wall:
Nico

nowmaxx 10. Jan 2006 20:39

Re: Anweisungen werden nicht durchgeführt. Warum?
 
Ist das jetzt ein Problem meines Rechners, meiner Delphi Version oder eins, was allein mich betrifft :lol: Aber wenn das Programm bei chaosben funktioniert...
Was könnte ich tun, wenn es an meinem Rechner, oder an der Version liegt. Ist das vielleicht ein technisches Problem, von Delphi selbst? Kennt sich damit jemand hier aus?

chaosben 11. Jan 2006 06:55

Re: Anweisungen werden nicht durchgeführt. Warum?
 
So, jetzt kommen wir der Sache näher.
Bei mir läuft das Programm zwar, aber Bilder hab ich nicht gesehen. Jedefalls nicht bewusst wahrgenommen.

nowmaxx 11. Jan 2006 13:21

Re: Anweisungen werden nicht durchgeführt. Warum?
 
Oben hab ich mal geschrieben:
Zitat:

Wenn ich jetzt diese eine Programmcodezeile (durch Kommentar gekennzeichnet) einfüge, werden dir vorigen Anweisungen nicht mehr durchgeführt.
:lol:
Aber woran könnte das liegen?
Muss der Befehl, der auf das Label zugreift vor dem zeichnen der BitMaps? Wenn ja, warum? eigentlich müsste das doch keine Rolle spielen?

Oxmyx 11. Jan 2006 14:15

Re: Anweisungen werden nicht durchgeführt. Warum?
 
Wenn du die Bilder der Monster nur einmal zeichnest, dann sind sie beim nächsten Repaint-Ereignis wieder weg. Du musst also immer wenn ein Repaint- oder Refreshereignis ausgelöst wird, die Bilder neu zeichnen.

Desweiteren musst du deine Objekte wieder freigeben, du rufst zwei mal Monster := cMonster.Create auf, ohne die Objekte auch wieder freizugeben. So müllst du den Speicher zu.

nowmaxx 11. Jan 2006 14:54

Re: Anweisungen werden nicht durchgeführt. Warum?
 
Die .Free Methoden hab ich mittlerweile schon eingefügt. Danke!
Doch ich hab versucht, den Befehl, der das Lebal füllt vor dem Zeichnen der Monster unterzubringen. Somit wird ja nach dem Zeichnen kein neuer Repaint ausgeführt. Doch funktioniet es immer noch nicht... :wall:

bluescreen25 11. Jan 2006 19:43

Re: Anweisungen werden nicht durchgeführt. Warum?
 
Hallo, wenn man im Objektinspektor lLife auf visible = false setzt, dann klappts so: (sprich beim starten des Programms ist lLife.visible := false;)

Delphi-Quellcode:
...
Monster.Show_Life(50,405,Monster.Life_max,Monster.Life_max,fKampf.Canvas);
  //Wenn ich die Zeile drin hab, funktioniert's nicht....??????
  fKampf.lLife.Caption := format('%d/%d',[Monster.Life_max,Monster.Life_max]);
  fKampf.lLife.Visible:=true;
...
Gruß bluescreen25

nowmaxx 11. Jan 2006 20:41

Re: Anweisungen werden nicht durchgeführt. Warum?
 
Funktioniert auch nicht...

bluescreen25 11. Jan 2006 20:49

Re: Anweisungen werden nicht durchgeführt. Warum?
 
Zitat:

Zitat von nowmaxx
Funktioniert auch nicht...

doch sicher.....es ging bei mir erst, nachdem ich das Label auf visible := false gesetzt hatte,
und nach der Formatierung erst auf visible := true;

Der Fehler war doch, das die Monster beim Starten nur kurz aufflackerten, anstatt konstant gezeichnet zu bleiben.

du kannst es auch im Ereignis TfKampf.FormCreate einsetzen, geht genauso gut.

Delphi-Quellcode:
procedure TfKampf.FormCreate(Sender: TObject);
begin
 lLife.Visible:= false; //<-----
end;
Allerding habe ich dies anhand deines Projektes zum runterladen gemacht. Du sagst, du hast die free-Methoden eingesetzt, da weiss ich natürlich nicht, was du da gemacht hast !

Ich habe dies mal so gelöst, es wird kein weiterer Speicher mehr abgenommen.
Delphi-Quellcode:
procedure cMonster.Show_Monster(x,y:Integer; filename:string; Canvas:TCanvas);
var Monster : TBitMap;
begin
  Monster := TBitMap.Create;
  Monster.LoadFromFile(filename);
  Monster.Transparent := True;
  Canvas.Draw(x,y,Monster);
  Monster.Free; // <-----
end;

nowmaxx 11. Jan 2006 21:28

Re: Anweisungen werden nicht durchgeführt. Warum?
 
Hatte die Reihenfolge verändert. Jetzt funktioniert's! Danke! :cheers:
Doch verstehen kann ich's immer noch nicht so richtig...
Naja, Problem gelöst! :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 12: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