![]() |
Anzeige:
|
|
|||||||
| XProfan Alles rund um die Programmiersprache XProfan. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
War schon mal da
Registriert seit: 21.10.2011
Beiträge: 32
|
Hallöle - ich hoffe, ich nerve nicht!
Obwohl ich in einer Proc die Variablen deklariere (mit declare) akzeptiert der Interpreter diese an bestimmten Stellen nicht. Extern sind sie nicht nocheinmal dekariert! Das betrifft in dieser Art die Variablen V$, O$ und Nr&, alle anderen aber nicht. Hier der Code: ' Auswerten Klick Suchen ' ----------------------------------------------------------------------------- proc Bei_Klick_Suche declare Text$, Vorw$, Ort$, V$, O$ declare Gefunden%, Nr& Text$ = Gettext$(txtSuche%) ' Lesen des Eingabefeldes if val(Text$) > 0 ' Vorwahl oder Ort erkennen Vorw$ = val(Text$): Ort$ = "" else Ort$ = Text$ : Vorw$ = 0 endif ' Schnellsuche im Array, Markierung im Listenfeld Gefunden% = 0 Nr& = 0 repeat O$ = objArr#.GetOrt(Nr&) V$ = objArr#.GetVorwahl(Nr&) if (V$ = Vorw$) OR (O$ = Ort$) Gefunden% = 1 SelectString(lstVwo%, -1, v$) return endif inc Nr& until (Nr& = objArr#.Anz&-1) endproc Und hier die Meldung: (für V$) sinngemäß auch für O$ und Nr& Wat nu? Im Voraus wieder vielen Dank! |
|
|
|
|
|
|
#2 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 15.02.2011
Beiträge: 106
|
Ist natürlich ohne lauffähigen Code schwer zu sagen aber es könnte hierdran liegen:
O$ = objArr#.GetOrt(Nr&) V$ = objArr#.GetVorwahl(Nr&) Versuch mal, ob es mit: O$ = Str$(objArr#.GetOrt(Nr&)) V$ = Str$(objArr#.GetVorwahl(Nr&)) funktioniert. Hast Du schonmal versucht, die Variablen umzubenennen in längere Namen?
__________________
Anhören lohnt sich wuestensand.info |
|
|
|
|
|
#3 (Direktlink) |
|
War schon mal da
Registriert seit: 21.10.2011
Beiträge: 32
|
Hallo _Joerg_!
Vielen Dank. Jedoch liegt es nicht daran - habe es auch getestet. Das Seltsame ist ja: Die Schleife wird sogar korrekt ausgeführt. (Suchen nach Ort bzw. Vorwahl, danach Markieren des Eintrags in der Liste) Ich habe mal ein messagebox(O$, "",0) hinter das O$ = Str$(objArr#.GetOrt(Nr&)) gesetzt. Und es wird auch das angezeigt, was ich erwartet habe. Aber erst am Ende der Prozedur kommt dann die Meldung - komisch. Also arbeitet der Interpreter zunächst korrekt mit den Variablen. Nur am Ende der Proc hat er sie "vergessen". Die Gesamtprozedur tut also komplett, was sie soll. Das ist ja das Problem, wo ich nicht weiter weiß. Gruß Matthias! |
|
|
|
|
|
#4 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
|
Dann poste mal einen lauffähigen (!!!) Code, der den Fehler bei mir reproduziert. Dann kann Dir bestimmt geholfen werden.
Gruß Roland
__________________
Pentium D 2,8 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon HD5450 1024 MB / Windows 7(32) - XProfan X2.0c AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 / Windows 7(64) - XProfan X2.0c http://www.xprofan.de |
|
|
|
|
|
#5 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Ändere mal diese Zeile
Code:
until (Nr& = objArr#.Anz&-1) Code:
until (Nr& >= objArr#.Anz&-1)
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
|
|
|
#6 (Direktlink) |
|
War schon mal da
Registriert seit: 21.10.2011
Beiträge: 32
|
@Alle:
Ich habe noch ein wenig rum probiert. Es scheint der IF-Befehl zu sein! Drehe ich die Zeile if (V$ = Vorw$) OR (O$ = Ort$) um in (Vorw$ = V$) OR (Ort$ = O$), und vertausche die Variablennamen links und rechts von Istgleich, dann schipft der Interpreter plötzlich über die andere Variable! Hat das IF vielleicht Probleme, wenn es zwei Variablen vergleichen soll? Ansonsten läuft ja das Ganze! Es ist ja kein Problem mit dem Speicher (Schleifenüberlauf etc.) sondern eine Unstimmigkeit mit deklarierten Variablen, die aber vorher korrekt benutzt werden! Schaun wir mal weiter... Mal sehen, ob ich den Qellcode rüber kriege.... Gruß Matthias |
|
|
|
|
|
#7 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Die Fehlermeldung muss nicht korrekt sein. Bei einem Speicherüberlauf ist die oft nicht korrekt.
Überprüfe, was in Anz& steht. Versuche auch das mal: Code:
until (Nr& >= ((objArr#.Anz&)-1))
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
|
|
#8 (Direktlink) |
|
MoRoGeP-Träger 2011
![]() Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.878
|
Vielleicht fehlt hier noch ein IF ?
Code:
if (V$ = Vorw$) OR (O$ = Ort$) IF Gefunden% = 1 SelectString(lstVwo%, -1, v$) ENDIF return endif
__________________
Gruss, horst Computer werden kleiner und kleiner, bald verschwinden sie völlig. (Ephraim Kishon 1924-2005) http://www.web-treffpunkt.de |
|
|
|
|
|
#9 (Direktlink) |
|
War schon mal da
Registriert seit: 21.10.2011
Beiträge: 32
|
@AHT
In Anz& steht die Anzahl der Elemente. Die Schleife endet, wenn Nr& den Wert Anz&-1 hat. (Nr& als Index immer 0..Anz&-1) Ich schicke mal den Code rüber. Ist sicherlich besser. Habe auch etwas zusätzlich rumkommentiert. Aber keine Hektik. Für heute ist bei mir erst mal Feierabend. Ich melde mich dann im Laufe des Tages morgen wieder. Gönn Dir auch eine Pause! Gruß und Dank: Matthias Geändert von Transrapidfan (04.03.2012 um 15:55 Uhr) |
|
|
|
|
|
#10 (Direktlink) |
|
War schon mal da
Registriert seit: 21.10.2011
Beiträge: 32
|
@AHT und @ Horsthorn!!
Ich habe noch mal schnell den Tipp von HorstHorn versucht. Knapp daneben - aber es war dennoch ein Joker drin! Mit folgenden Änderungen: 1. Mein Gefunden% hatte doch einen tieferen Sinn... Aha: repeat Blablabla.... if DiesUndDas dann Gefunden% = 1 sonst weiter !!!! until Gefunden% OR (Nr& = objArr#.Anz&-1) !!!! Das isses! 2. Nicht mit RETURN die Proc verlassen! (Zeile löschen Fehlerquelle!!! Durch UNTIL Gefunden% ... ja überflüssig! Dann klappt es!!!!! Huraaaaaaaaa.... Warum darf ich die Proc nicht mit Return verlassen????? Aber quält das Programm ruhig noch ein wenig, vielleicht sind ja noch ein paar Bugs drin, die ich noch nicht bemerkte. U n t e r p r o b l e m : Das nicht rechtzeitige Aktualisieren des Dialogfensters in der Prc Bei_Klick_Einlesen. Da passt was noch nicht so richtig.... Nochmals vielen Dank an Alle Helfer. Matthias Geändert von Transrapidfan (04.03.2012 um 15:55 Uhr) |
|
|
|
|
|
|
#11 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
|
>>> Warum darf ich die Proc nicht mit Return verlassen?????
Du darfst die Proc mit Return verlassen, aber nicht die Schleife! Der Stack oder Schleifenzähler müssen doch bereinigt werden, sonst gibt es so komische Fehlermeldungen
__________________
Gruß Thomas Wenn mir früher jemand gesagt hätte, ich würde freiwillig eine Wanze mit mir herum tragen und sie auch noch selbst aufladen, hätte ich laut gelacht. Heute habe ich ein Smartphone. http://realsource.de |
|
|
|
|
|
#12 (Direktlink) | |
|
Weiß worum´s geht
![]() Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
|
Zitat:
Edit: oops, Thomas war schneller....
__________________
Gruß Jörg Ideen gibt es viele - man muß sie nur haben... XProfan 11.2, XP-Pro SP2/3 |
|
|
|
|
|
|
#13 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 15.02.2011
Beiträge: 106
|
Du darfst eine Prozedur wohl mit Return verlassen aber nicht eine Schleife.
Mit Break/Continue kann man Schleifen verlassen/neu starten. Am besten ist es, eine Variable Wert$ (oder so) zu deklarieren, die in der Prozedur bestückt und am Ende mit Return zurückgeliefert wird. es wäre außerdem besser, wenn Du Deinen Code formatiert hier postest. Dann fallen solche Sachen eher auf. Also so: Code:
repeat
O$ = objArr#.GetOrt(Nr&)
V$ = objArr#.GetVorwahl(Nr&)
if (V$ = Vorw$) OR (O$ = Ort$)
Gefunden% = 1
SelectString(lstVwo%, -1, v$)
Break 'damit kannst Du eine Schleife verlassen
endif
inc Nr&
until (Nr& = objArr#.Anz&-1)
__________________
Anhören lohnt sich wuestensand.info |
|
|
|
|
|
#14 (Direktlink) |
|
War schon mal da
Registriert seit: 21.10.2011
Beiträge: 32
|
@Alle
Erst mal allen einen "Guten Morgen"! Aha: Also erst mal die Schleife sauber verlassen und nicht einfach gleich die ganze Proc - alles klar. Hätte MIR! nicht passieren dürfen nach 24 Jahren Hobbyprogrammierung. Eigentlich müßte ich mich dafür Erschiessen lassen! Aber diese Gehehmigungen jedes Mal..... Vielleicht sollte ich vor dem Eintippen mal gründlicher im Handbuch lesen! Besonders, wenn ich eine neue Programmiersprache verwende - wie zur Zeit. Hat schon jemand die Sache mit dem "Nichtaktualisieren" des Dialogfensters heraus gefunden? (siehe Quellcode Proc Bei_Klick_Einlesen) Wäre toll. Also bis denne & nochmals vielen Dank für die Tipps! Matthias |
|
|
|
|
|
#15 (Direktlink) |
|
Gast
Beiträge: n/a
|
Bei mir tritt es nicht auf, hängt vielleicht mit der geringen Datenmenge zusammen oder sz deine GraKa zu schwach.
Ich würde während des einlesen das ganze Fenster sperren und danach wieder Freigeben. Dann sieht man die Werte auch erst wenn sie komplett eingelesen sind und es flackert nichts. Sperren External("USER32","LockWindowUpdate",%Hwnd) Einlesen Freigeben External("USER32","LockWindowUpdate",0) repaint Wäre ein Versuch wert |
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Variable Linkbox bei Ebay | Zeriel | Sonstige Programmiersprachen | 0 | 27.07.2008 18:45 |
| Variable von VBA an Excel übergeben! | NeXoDrEuS | Visual Basic, Visual Basic.NET | 0 | 04.07.2008 10:13 |
| DivX6(Variable Bitrate) | Switcher | Software - Allgemein | 0 | 04.08.2006 00:02 |
| system variable | powerweb | Windows XP | 3 | 06.04.2006 10:25 |
| Kann Arrays mit Anzahl von const-Variable nicht deklarieren | ~Flammadarion~ | C/C++, Visual C++, Visual C++.NET | 3 | 21.03.2005 18:56 |