Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Nochmal Lagersimulation (https://www.delphipraxis.net/135144-nochmal-lagersimulation.html)

DeiDextra 5. Jun 2009 14:11


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

p80286 5. Jun 2009 15:47

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:
assignfile(lst, 'aaa.lst');
rewrite(lst);
an den Anfanfg der procedure stellst, dann sollte das
Delphi-Quellcode:
closefile(lst);
auch am Ende stehen.

Gruß
K-H

Patrick L. 5. Jun 2009 18:08

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;

DeiDextra 8. Jun 2009 14:14

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 11:19 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