![]() |
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:
Ü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:
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; |
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. |
Re: Anweisungen werden nicht durchgeführt. Warum?
Alles klar, wird gemacht.
Da ich nicht weiß, wie das hier funktioniert, kann man sich das Programm ![]() |
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? |
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:
|
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? |
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?
|
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:
Nico |
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? |
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. |
Re: Anweisungen werden nicht durchgeführt. Warum?
Oben hab ich mal geschrieben:
Zitat:
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? |
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. |
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: |
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:
Gruß bluescreen25
...
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; ... |
Re: Anweisungen werden nicht durchgeführt. Warum?
Funktioniert auch nicht...
|
Re: Anweisungen werden nicht durchgeführt. Warum?
Zitat:
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:
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 !
procedure TfKampf.FormCreate(Sender: TObject);
begin lLife.Visible:= false; //<----- end; 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; |
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 22:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz