Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 242928 (4364)
  Suchen
 Zurück zur Übersicht
 AutorThema: Probleme beim 2. Start einer Prozedur
Martin Pohl
Datum:01.06.02 15:43 Antwortenals Email verschicken (bananenfresser@msn.com) 


Hallo! Ich habe ein Fenster mit einem Menü. Wenn ich den Menüpunkt "Notizzettel" anklicke soll er die Prozedur notizzettel ausführen. Das klappt auch. Ist die Prozedur fertig, dann bin ich wieder in dem Hauptpprogramm. Will ich die Prozedur dann wieder starten, dann sagt er mir, dass es nicht ausrechíchend DIMensioniert ist. Warum? Wie kann ich den Fehler beseitigen? Hier ist der Code für die Prozedur:

proc notizzettel
declare _ende%,_dlg%,notizblock%,notiz$,size#,nr%,max%,x%,y%
let x%=@div(%maxx,2)
let x%=@sub(x%,201)
let y%=@div(%maxy,2)
let y%=@sub(y%,150)
let _dlg%=@createdialog(%Hwnd,"Kleiner Helper - Notizzettel",x%,y%,402,300)
let notizblock%=@createmultiedit(_dlg%,"",0,0,392,-264)
dim size#,@add(@filesize("notiz.txt"),2000)
ReadText size#,"notiz.txt"
@sendmessage(notizblock%,$000C,0,size#)
dispose size#
let _ende% = 0
whilenot _ende%
waitinput
if @equ(%key,2)
assign #1,"notiz.txt"
rewrite #1
let nr%=0
let max%=@getlinecount(notizblock%)
whilenot @gt(nr%,max%)
print #1,@getline$(notizblock%,nr%)
inc nr%
wend
close #1
let _ende% = 1
endif
wend
@destroywindow(_dlg%)
endproc

Danke im Vorraus!
MFG MPSD - Martin Pohl Software Development (klingt gut, wa?)


Rolf Koch
Datum:01.06.02 16:54 Antwortenals Email verschicken (webmaster@rokosoft.de) 


Hi
auf jedenfall solltest Du:

inc nr%
wend
dispose size#
close #1

das dispose size# einfügen, um den Speicher wieder freizugeben. (Vielleicht liegts daran)
und
am besten immer Dateiangaben GROSS schreiben
"NOTIZ.TXT" - dies hat aber nichts mit Deinem Problem zu tun.
Hoffe es klappt
Rolf




Rolf Koch
Datum:01.06.02 16:59 Antwortenals Email verschicken (webmaster@rokosoft.de) 


Ohh hab nicht richtig gekuckt - Du hast ja dispose size#
Sorry
Rolf


Thorsten
Datum:01.06.02 17:19 Antwortenals Email verschicken (mrk@mrk-soft.de) 


>declare _ende%,_dlg%,notizblock%,notiz$,size#,nr%,max%,x%,y%
^^^^^^^

Bereichsvariablen NIE in einer Prozedure definieren, diese
MÜSSEN IMMER an Anfang des Programms, und sind somit LOKAL
für ALLLE verfügbar.

declare size#

proc notizzettel
declare _ende%,_dlg%,notizblock%,notiz$,nr%,max%,x%,y%
....

Thorsten
www.mrk-soft.de



Martin Pohl
Datum:01.06.02 17:19 Antwortenals Email verschicken (bananenfresser@msn.com) 


Das habe ich auch gerade herausgefunden. aber trotzdem danke.


Jörg Sellmeyer
Datum: 03.06.02 00:25 Antwortenals Email verschicken (joerse@gmx.de) 


Hallo Martin,
Du darfst die Bereichsvariable size# nicht innerhalb der Prozedur deklarieren.
Das sagt die Hilfe dazu:
"Bereichsvariablen sind immer GLOBAL und dürfen nur außerhalb von Prozeduren deklariert werden."
Dann sollte es funktionieren.
Gruß
Jörg


 Zurück zur Übersicht