![]() |
Nochmal Lagersimulation
Hallo zusammen,
Mein allererster Beitrag heute :) hab gleich mal ein schwieriges Problem für euch! mir selber raucht der Kopf. ich bin grad total am Ende, hab einfach keine Idee mehr, wie ich den fehler weg bekomme. vielleicht könnt ihr mir helfen?! Es geht um folgendes: Wir programmieren im Team eine Lagersimulation. Meine Aufgabe im Moment ist die grafische Aufarbeitung. ich habe bereits 2 Images erstellt. In dem linken wird das gesamte Lager aus der Vogelperspektive angezeit. Nach einem Klick auf eine Lagerfläche, die in dem Image angezeigt werden, öffnet sich ein neues Imagefeld, in dem die Lagerfläche von vorne angezeigt wird. Man soll also die einzelnen regalflächen anschauen können. soweit so gut. tut auch alles ganz gut. jetzt mein Problem: Ich möchte gerne durch einen Kick auf eine Ware in der Regalfläche Inoformationen über diese Ware angezeigt haben. Das klappt auch einigermaßen. Allerdings wenn man 2 mal neben ein Regal klickt, kommt anstatt meiner programmierten fehlermeldung : "Regalfläche nicht gefunden. Bitte erneut klicken." ein E/A Fehler 32. edit: Nach dem Fehler springt der Cursor in die line wo rewrite(lst) steht. aber warum bloß. Weiß jemand warum ich diesen fehler bekomme!? Hier die Procedure:
Delphi-Quellcode:
procedure TForm1.Image2Click(Sender: TObject);
var i,ii, zae, k, x_anf,y_anf, x_max,y_max, // alte Eckpunke x_h,y_h, x,y: integer; found: boolean; p:inhn; ts: array[1..8] of string; begin assignfile(lst, 'aaa.lst'); rewrite(lst); x_anf:= 150; y_anf:= 50; x_max:= x_anf + 150; // .. meter y_max:= y_anf + 50; // .. meter x_h:= form1.image2.Left; y_h:= form1.image2.Top; x:= mouse.CursorPos.x-x_h ; // - x_h -4 ; {tpoint} y:= mouse.CursorPos.y - y_h ; // -y_h -30; // woher 4 und 30 kommen, ist unklar. pereufen if debuglevel>3 then showmessage(' Doppelklick im Regal auf den Punkt '+ inttostr(x) + ' ' + inttostr(y)); found:= false; for i:= 0 to 6 do with form1.image2.canvas do begin if (x_anf<=x) and (x<=x_max) and (y_anf<= y) and (y_anf +50 >= y) then begin k:= 6- i; kglob:=k; if debuglevel=0 then showmessage ('Gefunden Doppelklick auf regalflaeche' +inttostr(k) ); found:=true; writeln(lst,iglob); writeln(lst,jglob); writeln(lst,kglob); for ii:= 1 to 8 do ts[ii]:= ' '; zae:=1; p:=ar[iglob,jglob].inh[kglob].wa; // vorher dreier for ii:= 1 to 8 do if p[ii].warenr>0 then begin { ts[ii]:= 'warenr:' + inttostr(p[ii].warenr) + ' ' +'datum_einlager:'+inttostr(p[ii].datum_einlager)+ ' ' + 'Anzplatten:' +inttostr(p[ii].Anzahl_platten) +' ' + 'hoehe:' +inttostr(p[ii].hoehe)+ ' ' + 'gewicht:' +inttostr(p[ii].gewicht) +' ' + 'breite:' + inttostr(p[ii].breite)+ ' ' + 'Laenge' + inttostr(p[ii].laenge)+ ' ' ; } label11.caption:= inttostr(p[ii].warenr); end ; for ii:=1 to 8 do writeln(lst, ts[ii]); closefile(lst); //form3.show; // hier weiter end; y_anf:= y_anf +50 ; end; if not(found) then showmessage( 'Leider das Regalfach nicht gefunden. Nochmal klicken!'); //showmessage ('Doppelklick auf Einzelregal '); end; // proc Ich hoffe ihr könnt mir helfen! Vielen Dank schon mal. gruß Dextra |
Re: Nochmal Lagersimulation
Hallo Dextra,
einmal abgesehen von der Unübersichtlichkeit Deines Sourcetextes, etwas formatieren hilft auch die Logik darzustellen, sieht die Fehlermeldung so aus als wäre das closefile(lst) vor einem writeln(lst,...) aufgerufen worden. wenn Du
Delphi-Quellcode:
an den Anfanfg der procedure stellst, dann sollte das
assignfile(lst, 'aaa.lst');
rewrite(lst);
Delphi-Quellcode:
auch am Ende stehen.
closefile(lst);
Gruß K-H |
Re: Nochmal Lagersimulation
Benutze lieber das MouseDown-Ereigniss des Objekts, dieses liefert die X und Y Werte des Clicks auf dem Image gleich mit. 8)
Delphi-Quellcode:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin ... end; |
Re: Nochmal Lagersimulation
Besten dank für die Antworten.
das Problem mit der File hat irgendwie nicht hingehauen. selbst wenn ichs ganz ans ende der Procedure geschrieben habe. hab das ganze rausgehauen. Die wege von Delphi scheinen unergründlich zu sein. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:26 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