Quelltexte/ Codesnippets | | | | KHR | Hallo miteinander,
aus dem Wunsch heraus ein Logbuch für die Fehlermeldungen von Profan einrichten zu können, habe ich mich mit der Prozedur ERRORPROC näher befaßt.
Herausgekommen ist nun ein System, das alle Fehlermeldungen von Profan abfängt, in eine Log-Datei einträgt und mit einem DIALOG abfragt, ob man trotz Fehlermeldung weiterarbeiten will.
Dadurch ist man - besonders in der Testphase - wesentlich flexibler als wenn man nur mit SET ERRORLEVEL die Abbruchschwelle anhebt oder absenkt.
Zum anderen hat man - insbesondere bei Programmen die an andere anderen weitzergegeben werden - die Möglichkeit aus der Logdatei die Fehler nachzuvollziehen.
Die Fehlertexte habe ich der Hilfe von xProfan 11 entnommen.
Der Dialog ist etwas verbesserungswürdig, Ich hab ihn auf die schnelle zusammengeschustert, da ich in meinen Programmen eine andere Routine verwende, die sich nicht so einfach anpassen läßt.
Möge jeder draus machen, was er benötigt.
Error behandlung individuell
Abfangen der Programm-Fehler
Zur Weiterverarbeitung
und Protokollierung
Ab hier ein Testprogramm zur Vorstellung der Funktion
declare FehlerLogDatei$
declare Modul$
Time String 8-stellig
def std_min_sek$(0) @left$(@time$(0)+:+time$(1),8)
Name der Fehler-Log Datei - ich verwende immer Dateinamen die einen Bezug zum Programm bieten
FehlerLogDatei$ = Xprofan-Fehler.log
wird je nach Programmteil/Modul geändert so daß sich Fehler besser lokalisieren lassen und
schon beim ersten Blick auf das Fehlerlog erkannt werden kann, woder Schuh drückt
Modul$ = Testprogramm
CLS
Errorlevel -3 bedeutet: alle Fehler verzweigen auf die Fehlerbehandlungsroutine
muß zu Beginn des Programms eingesetzt werden
Set(ErrorLevel, -3)
Set(OnError, 1)
dieser Code ist nur als test gedacht:
whileloop 200
WaitInput 100
print &loop
diese Variable ist nicht deklariert und löst eine Fehlermeldung aus
MeinZaehler_1%=0
Error 331, zu Testzwecken eingebaute Fehlernummer
endwhile
End
Ende des Testprogramms
Fehlerbehandlungsroutine
Name ist ProfanVorgabe: ErrorProc
ErrorProc
declare fehler%, FehlerNum%
Errorlevel wieder auf 1 setzen, damit Fehler in dieser Routine nicht zu Selbstaufrufen führen können
Set(ErrorLevel, 1)
Werte übernehmen, da beim auslesen gelöscht wird
Fehler% = %Error + 3
FehlerNum% = %ErrNumber
Eintrag in Fehlerlogbuch
kann entfernmt werden sofern nicht gewünscht
Assign #99,FehlerLogDatei$ Name wird im Hauptprogramm bestimmt
ifnot @FileExists(FehlerLogDatei$)
Rewrite #99
close #99
endif
Append #99
set (Decimals,0)
set (Numwitdh,0)
print #99, Date$(3);-;std_min_sek$(), Modul$ ,ErrorProc:, ErLevel:+@str$(Fehler%),
print #99, ErNum:+ @str$(FehlerNum% ), Zeile: +@str$(%ErrLine), $ErrStr, $ErrFile
close #99
Aufruf des Dialogs zur Entscheidung Abbrechen JA oder NEIN
if ErrorDialog% (Fehler%,FehlerNum%,%ErrLine,$ErrStr,$ErrFile )
end
endif
Errorlevel wieder auf -3 setzen, damit jeder weitere Fehler wieder auf diese Routine verzweigen kann
Set(ErrorLevel, -3)
EndProc
Dialog zur Anzeige und Entscheidung
proc ErrorDialog%
declare dialogWindow&
declare JaButton&
declare NeinButton&
declare DialogEnde%
declare Rueckgabe%
declare Ausgabe&[10]
parameters FeLevel&,FeNum&,FeLine&,FeString$,FeFile$
dialogWindow& = @Create(Dialog,%hwnd,SYSTEM-Meldung,50,50,400,400)
Ausgabe&[1] = create (text,dialogWindow&,,5,5,360,20)
Ausgabe&[2] = create (text,dialogWindow&,,5,35,360,20)
Ausgabe&[3] = create (text,dialogWindow&,,5,65,360,20)
Ausgabe&[4] = create (text,dialogWindow&,,5,95,360,50)
Ausgabe&[5] = create (text,dialogWindow&,,5,155,360,20)
Ausgabe&[6] = create (text,dialogWindow&,,5,185,360,20)
Ausgabe&[7] = create (text,dialogWindow&,,5,215,360,20)
Ausgabe&[8] = create (text,dialogWindow&,,5,245,360,20)
settext Ausgabe&[1],Errorproc - Fehlerbehandlung
settext Ausgabe&[2],Fehler-Level: +@str$(FeLevel&)
settext Ausgabe&[3],Fehlernummer: +@str$(FehlerNum%)
settext Ausgabe&[4],Fehlercode(FehlerNum%)
settext Ausgabe&[5],Zeile: +@str$(%ErrLine)
settext Ausgabe&[6],Code: + $ErrStr
settext Ausgabe&[7],Datei: +$ErrFile
settext Ausgabe&[8],Programm abbrechen ???
JaButton& = create (BUTTON,dialogWindow&,Abbrechen,5,280,150,30)
NeinButton& = create (BUTTON,dialogWindow&,Weiterarbeiten,170,280,150,30)
if FeLevel& =3
settext dialogWindow&,Schwerer Programmfehler
elseif FeLevel& =2
settext dialogWindow&,Programmfehler
elseif FeLevel& =1
settext dialogWindow&,Fehlerwarnung
endif
whilenot DialogEnde%
waitinput
if clicked(JaButton&)
DialogEnde% = 1
Rueckgabe% = 1
elseif clicked(NeinButton&)
DialogEnde% = 1
Rueckgabe% = 0
endif
endwhile
return Rueckgabe%
endproc
Zuweisen von Gruppe und Texten nach Fehlernummer
proc Fehlercode
parameters ErrorNum%
declare ErrorGruppe$
Fehlercodes und Beschreibungen entnommen aus der Hilfe von Xprofan 11.1
if ErrorNum% >= 900
ErrorGruppe$ = Sonstige Fehler:
elseif ErrorNum% >= 600
ErrorGruppe$ = Datenbank-Fehler:
elseif ErrorNum% >= 500
ErrorGruppe$ = ODBC-Fehler und Meldungen:
elseif ErrorNum% >= 400
ErrorGruppe$ = OpenGL-Fehler:
elseif ErrorNum% >= 300
ErrorGruppe$ = IO-Fehler:
elseif ErrorNum% >= 200
ErrorGruppe$ = Ungültige/fehlende Parameter:
elseif ErrorNum% >= 100
ErrorGruppe$ = Programm-Struktur:
endif
if ErrorNum% = 100
return ErrorGruppe$ +Systemvariable unbekannt
elseif ErrorNum% = 101
return ErrorGruppe$ +Funktion unbekannt
elseif ErrorNum% = 102
return ErrorGruppe$ +Befehl unbekannt
elseif ErrorNum% = 103
return ErrorGruppe$ +Integer-Variable erwartet
elseif ErrorNum% = 104
return ErrorGruppe$ +Dateikennung erwartet
elseif ErrorNum% = 105
return ErrorGruppe$ +Tabellenkennung erwartet
elseif ErrorNum% = 106
return ErrorGruppe$ +ENDelseif bzw. ELSE nicht gefunden
elseif ErrorNum% = 107
return ErrorGruppe$ +ENDelseif nicht gefunden
elseif ErrorNum% = 108
return ErrorGruppe$ +Zu tiefe WHILE-Verschachtelung
elseif ErrorNum% = 109
return ErrorGruppe$ +ENDWHILE bzw. WHILE nicht gefunden
elseif ErrorNum% = 110
return ErrorGruppe$ +WHILE fehlt
elseif ErrorNum% = 111
return ErrorGruppe$ +GOSUB/PROC fehlt
elseif ErrorNum% = 112
return ErrorGruppe$ +PROC fehlt
elseif ErrorNum% = 113
return ErrorGruppe$ +Label nicht gefunden
elseif ErrorNum% = 114
return ErrorGruppe$ +Zu tiefe GOSUB/PROC-Verschachtelung
elseif ErrorNum% = 115
return ErrorGruppe$ +ENDPROC nicht gefunden
elseif ErrorNum% = 116
return ErrorGruppe$ +DIM% darf nur einmal verwandt werden
elseif ErrorNum% = 117
return ErrorGruppe$ +DIM& darf nur einmal verwandt werden
elseif ErrorNum% = 118
return ErrorGruppe$ +DIM$ darf nur einmal verwandt werden
elseif ErrorNum% = 119
return ErrorGruppe$ +DIM! darf nur einmal verwandt werden
elseif ErrorNum% = 120
return ErrorGruppe$ +STARTPRINT fehlt
elseif ErrorNum% = 121
return ErrorGruppe$ +Bereichs-Variable erwartet
elseif ErrorNum% = 122
return ErrorGruppe$ +Variablenbezeichner fehlerhaft
elseif ErrorNum% = 123
return ErrorGruppe$ +Variablenname zu lang
elseif ErrorNum% = 124
return ErrorGruppe$ +STARTPAINT fehlt
elseif ErrorNum% = 125
return ErrorGruppe$ +SUBPOPUP fehlt
elseif ErrorNum% = 126
return ErrorGruppe$ +elseif oder IFNOT fehlt
elseif ErrorNum% = 127
return ErrorGruppe$ +Befehl hinter CASE fehlt
elseif ErrorNum% = 128
return ErrorGruppe$ +Strukturbezeichner erwartet
elseif ErrorNum% = 129
return ErrorGruppe$ +Strukturbezeichner fehlerhaft
elseif ErrorNum% = 130
return ErrorGruppe$ +Strukturbezeichner zu lang
elseif ErrorNum% = 131
return ErrorGruppe$ +Variablenbezeichner erwartet
elseif ErrorNum% = 132
return ErrorGruppe$ +WITH-Verschachtelung nicht erlaubt
elseif ErrorNum% = 133
return ErrorGruppe$ +WITH fehlt
elseif ErrorNum% = 134
return ErrorGruppe$ +16-Bit DLLs werden von XProfan nicht mehr unterstützt
elseif ErrorNum% = 135
return ErrorGruppe$ +Klasse nicht gefunden
elseif ErrorNum% = 136
return ErrorGruppe$ +Direktiven sind nur am Zeilenanfang erlaubt
elseif ErrorNum% = 137
return ErrorGruppe$ +Zu tiefe IF/IFNOT-Verschachtelung
elseif ErrorNum% = 138
return ErrorGruppe$ +$IFDEF oder $IFNDEF fehlt
elseif ErrorNum% = 139
return ErrorGruppe$ +Zu tiefe $IFDEF/$IFNDEF-Verschachtelung
elseif ErrorNum% = 140
return ErrorGruppe$ +SELECT fehlt
elseif ErrorNum% = 141
return ErrorGruppe$ +Zu tiefe SELECT-Verschachtelung
elseif ErrorNum% = 142
return ErrorGruppe$ +ENDSELECT bzw. OTHERWISE nicht gefunden
elseif ErrorNum% = 143
return ErrorGruppe$ +ENDSELECT nicht gefunden
elseif ErrorNum% = 144
return ErrorGruppe$ +ERRORPROC nicht gefunden
elseif ErrorNum% = 145
return ErrorGruppe$ +Variablentyp bei VAR nicht erlaubt
elseif ErrorNum% = 146
return ErrorGruppe$ +Nur Zuweisung mittels NEW() erlaubt
elseif ErrorNum% = 147
return ErrorGruppe$ +Variable doppelt deklariert
elseif ErrorNum% = 148
return ErrorGruppe$ +Dynamisches Bereichsarray nicht erlaubt
elseif ErrorNum% = 149
return ErrorGruppe$ +Dynamisches Array ist eindimensional
elseif ErrorNum% = 150
return ErrorGruppe$ +Dynamisches Array bei INPUT nicht erlaubt
elseif ErrorNum% = 151
return ErrorGruppe$ +SUBCLASSPROC nicht gefunden
elseif ErrorNum% = 152
return ErrorGruppe$ +SUBCLASSPROC mehr als einmal vorhanden
elseif ErrorNum% = 153
return ErrorGruppe$ +ERRORPROC mehr as einmal vorhanden
elseif ErrorNum% = 154
return ErrorGruppe$ +Nur in SUBCLASSPROC erlaubt
elseif ErrorNum% = 155
return ErrorGruppe$ +DOWNLOADFILE bereits/noch aktiv
elseif ErrorNum% = 156
return ErrorGruppe$ +Ungültiger Matrix-Operator
elseif ErrorNum% = 157
return ErrorGruppe$ +Ungültiger Operator
elseif ErrorNum% = 158
return ErrorGruppe$ +Ungültiges Ersatzzeichen
elseif ErrorNum% = 199
return ErrorGruppe$ +Befehl oder Funktion wird nicht mehr unterstützt
elseif ErrorNum% = 200
return ErrorGruppe$ +Ungültiger Funktionswert
elseif ErrorNum% = 201
return ErrorGruppe$ +Division durch 0
elseif ErrorNum% = 202
return ErrorGruppe$ +Falscher Typ für @DTOC$
elseif ErrorNum% = 203
return ErrorGruppe$ +Falscher Typ für @CTOD$
elseif ErrorNum% = 204
return ErrorGruppe$ +String-Index ist < 1
elseif ErrorNum% = 205
return ErrorGruppe$ +Substring-Nr ist < 1
elseif ErrorNum% = 206
return ErrorGruppe$ +So viele Elemente sind nicht da
elseif ErrorNum% = 207
return ErrorGruppe$ +Bereichsgrenze überschritten
elseif ErrorNum% = 208
return ErrorGruppe$ +Kommandozeilenparameter fehlt
elseif ErrorNum% = 209
return ErrorGruppe$ +Datei nicht gefunden
elseif ErrorNum% = 210
return ErrorGruppe$ +Dateinummer nicht im erlaubten Bereich
elseif ErrorNum% = 211
return ErrorGruppe$ +Parameterzahl muss zwischen 0 und 15 liegen
elseif ErrorNum% = 212
return ErrorGruppe$ +Zu wenig Parameter
elseif ErrorNum% = 213
return ErrorGruppe$ +Funktionsargument fehlt
elseif ErrorNum% = 214
return ErrorGruppe$ +Keine Zahl
elseif ErrorNum% = 215
return ErrorGruppe$ +Variable nicht deklariert
elseif ErrorNum% = 216
return ErrorGruppe$ +Falscher Parametertyp
elseif ErrorNum% = 217
return ErrorGruppe$ +Speicher für Integer-Variablen erschöpft
elseif ErrorNum% = 218
return ErrorGruppe$ +Speicher für LongInt-Variablen erschöpft
elseif ErrorNum% = 219
return ErrorGruppe$ +Speicher für String-Variablen erschöpft
elseif ErrorNum% = 220
return ErrorGruppe$ +Speicher für Float-Variablen erschöpft
elseif ErrorNum% = 221
return ErrorGruppe$ +Während der Druckausgabe verboten
elseif ErrorNum% = 222
return ErrorGruppe$ +Box nicht innerhalb des Fensters
elseif ErrorNum% = 223
return ErrorGruppe$ +Negative Fenstergröße
elseif ErrorNum% = 224
return ErrorGruppe$ +ICON nicht vorhanden
elseif ErrorNum% = 225
return ErrorGruppe$ +ICON nicht vorhanden! (Nur 0..4
elseif ErrorNum% = 226
return ErrorGruppe$ +Fehler bei der Menüerstellung
elseif ErrorNum% = 227
return ErrorGruppe$ +Zu tiefe Menüverschachtelung
elseif ErrorNum% = 228
return ErrorGruppe$ +Bitmap nicht ladbar
elseif ErrorNum% = 229
return ErrorGruppe$ +Bitmap konnte nicht gespeichert werden
elseif ErrorNum% = 230
return ErrorGruppe$ +Cursor nicht vorhanden! (Nur 0..16
elseif ErrorNum% = 231
return ErrorGruppe$ +Negative Elemente sind nicht erlaubt
elseif ErrorNum% = 232
return ErrorGruppe$ +Zu viele Elemente
elseif ErrorNum% = 233
return ErrorGruppe$ +Das Element gibt es nicht
elseif ErrorNum% = 234
return ErrorGruppe$ +Fehler bei der Tonerzeugung
elseif ErrorNum% = 235
return ErrorGruppe$ +Drucken ist nicht möglich
elseif ErrorNum% = 236
return ErrorGruppe$ +Fehler bei der HardCopy
elseif ErrorNum% = 237
return ErrorGruppe$ +Der Befehl setzt ein Fenster vorraus
elseif ErrorNum% = 238
return ErrorGruppe$ +Stringende fehlt
elseif ErrorNum% = 239
return ErrorGruppe$ +Speicher für Bereichs-Variablen erschöpft
elseif ErrorNum% = 240
return ErrorGruppe$ +Zu wenig Speicher für Bereichs-Variable
elseif ErrorNum% = 241
return ErrorGruppe$ +Bereichsvariable ist bereits DIMensioniert
elseif ErrorNum% = 242
return ErrorGruppe$ +Ungültiges Fenster-Handle
elseif ErrorNum% = 243
return ErrorGruppe$ +Bereichsvariable ist nicht DIMensioniert
elseif ErrorNum% = 244
return ErrorGruppe$ +Der Text paßt nicht komplett in die Bereichsvariable
elseif ErrorNum% = 245
return ErrorGruppe$ +Die Parameterzahl unterscheidet sich von der Parameterbeschreibung
elseif ErrorNum% = 246
return ErrorGruppe$ +Ungültiger Typ in der Parameterbeschreibung
elseif ErrorNum% = 247
return ErrorGruppe$ +Fehler beim Laden der DLL
elseif ErrorNum% = 248
return ErrorGruppe$ +Funktion in DLL nicht vohanden
elseif ErrorNum% = 249
return ErrorGruppe$ +Zwischen STARTPAINT/ENDPAINT verboten
elseif ErrorNum% = 250
return ErrorGruppe$ +SETTIMER fehlt
elseif ErrorNum% = 251
return ErrorGruppe$ +Der TIMER ist schon eingestellt
elseif ErrorNum% = 252
return ErrorGruppe$ +Menü ist nicht ladbar
elseif ErrorNum% = 253
return ErrorGruppe$ +Speicher für Array-Variablen erschöpft
elseif ErrorNum% = 254
return ErrorGruppe$ +Maximal drei Dimensionen erlaubt
elseif ErrorNum% = 255
return ErrorGruppe$ +Klammern nicht ausgewogen
elseif ErrorNum% = 256
return ErrorGruppe$ +Zu viele Strukturvariablen
elseif ErrorNum% = 257
return ErrorGruppe$ +Fehler in Strukturdefinition
elseif ErrorNum% = 258
return ErrorGruppe$ +Zu viele Strukturen
elseif ErrorNum% = 259
return ErrorGruppe$ +Struktur nicht definiert
elseif ErrorNum% = 260
return ErrorGruppe$ +Definition im Header fehlt
elseif ErrorNum% = 261
return ErrorGruppe$ +Unbekanntes Create-Objekt
elseif ErrorNum% = 262
return ErrorGruppe$ +Unbekannter Schalter
elseif ErrorNum% = 263
return ErrorGruppe$ +Unbekannte Subfunktio
elseif ErrorNum% = 264
return ErrorGruppe$ +Ungültige WHILELOOP-Parameter
elseif ErrorNum% = 265
return ErrorGruppe$ +Doppelter Name in Struktur oder Klasse
elseif ErrorNum% = 266
return ErrorGruppe$ +Die beerbte Klasse muss an erster Stelle stehen
elseif ErrorNum% = 267
return ErrorGruppe$ +Methode fehlt
elseif ErrorNum% = 268
return ErrorGruppe$ +Prozedur nicht gefunden
elseif ErrorNum% = 269
return ErrorGruppe$ +Kein freier CALLBACK mit der gewünschten Parameterzahl
elseif ErrorNum% = 270
return ErrorGruppe$ +Kein Zugriff auf geschützte Eigenschaft/Methode
elseif ErrorNum% = 271
return ErrorGruppe$ +Eine Struktur kann keine Klasse erben
elseif ErrorNum% = 272
return ErrorGruppe$ +Operation nicht auf Objekte anwendbar
elseif ErrorNum% = 273
return ErrorGruppe$ +Variable nicht in Struktur vorhanden
elseif ErrorNum% = 274
return ErrorGruppe$ +Eigenschaft/Methode nicht in Objekt vorhanden
elseif ErrorNum% = 275
return ErrorGruppe$ +Zuweisung auf dieses Objekt nicht möglich
elseif ErrorNum% = 276
return ErrorGruppe$ +Struktur bzw. Bereich zu klein
elseif ErrorNum% = 277
return ErrorGruppe$ +Unbekannter Arraytyp
elseif ErrorNum% = 278
return ErrorGruppe$ +Zuweisung nur auf undimensionierte Bereichsvariable möglich
elseif ErrorNum% = 279
return ErrorGruppe$ +Fehler in SQL-Anweisung
elseif ErrorNum% = 280
return ErrorGruppe$ +Funktion nicht auf dieses Fensterobjekt anwendbar
elseif ErrorNum% = 281
return ErrorGruppe$ +Unbekanntes db-Methode
elseif ErrorNum% = 282
return ErrorGruppe$ +Das Array paßt nicht komplett in die Liste
elseif ErrorNum% = 283
return ErrorGruppe$ +Ein Bereichsarray ist hier nicht erlaubt
elseif ErrorNum% = 284
return ErrorGruppe$ +Fehler im Regulären Ausdruck
elseif ErrorNum% = 285
return ErrorGruppe$ +So viele Parameter gibt es nicht
elseif ErrorNum% = 286
return ErrorGruppe$ +&Index ist nur in einer Array-Zuweisung erlaubt
elseif ErrorNum% = 287
return ErrorGruppe$ +Matrix-Zuweisung hier nicht möglich
elseif ErrorNum% = 288
return ErrorGruppe$ +Array-Bezeichner erwartet
elseif ErrorNum% = 289
return ErrorGruppe$ +Beide Arrays müssen den selben Typ haben
elseif ErrorNum% = 290
return ErrorGruppe$ +Das Quell-Array paßt nicht komplett in das Ziel-Array
elseif ErrorNum% = 291
return ErrorGruppe$ +Array-Zuweisung hier nicht möglich
elseif ErrorNum% = 292
return ErrorGruppe$ +Dynamische Arrays bei MAT nicht erlaubt
elseif ErrorNum% = 293
return ErrorGruppe$ +Unbekannter INTERSECT-Typ
elseif ErrorNum% = 294
return ErrorGruppe$ +Array für Zuweisung muß vom gleichen Typ sein
elseif ErrorNum% = 295
return ErrorGruppe$ +UserMessage nicht vorhanden
elseif ErrorNum% = 296
return ErrorGruppe$ +Ungültiger Format-String
elseif ErrorNum% = 297
return ErrorGruppe$ +Unbekannter Aufrufmodus
elseif ErrorNum% = 298
return ErrorGruppe$ +Metafile nicht ladbar
elseif ErrorNum% = 300
return ErrorGruppe$ +Datei kann nicht gelesen werden
elseif ErrorNum% = 301
return ErrorGruppe$ +Datei kann nicht erzeugt werden
elseif ErrorNum% = 302
return ErrorGruppe$ +Fehler beim Lesen
elseif ErrorNum% = 303
return ErrorGruppe$ +Fehler beim Schreiben
elseif ErrorNum% = 304
return ErrorGruppe$ +PROF16.EXE nicht ausführbar oder fehlt
elseif ErrorNum% = 305
return ErrorGruppe$ +REGISTRY
elseif ErrorNum% = 306
return ErrorGruppe$ +Datei nicht gefunden
elseif ErrorNum% = 307
return ErrorGruppe$ +Fensterobjekt nicht vorhanden
elseif ErrorNum% = 308
return ErrorGruppe$ +Datei kann nicht kopiert werden
elseif ErrorNum% = 309
return ErrorGruppe$ +Ungültige Datei
elseif ErrorNum% = 310
return ErrorGruppe$ +Kein freies Datei-Handle
elseif ErrorNum% = 311
return ErrorGruppe$ +FindFirst$ fehlt
elseif ErrorNum% = 350
return ErrorGruppe$ +Internetverbindung nicht möglich
elseif ErrorNum% = 351
return ErrorGruppe$ +URL konnte nicht geöffnet werden
elseif ErrorNum% = 400
return ErrorGruppe$ +OpenGL ist nicht initialisiert
elseif ErrorNum% = 401
return ErrorGruppe$ +Devicekontext für OpenGL konnte nicht erstellt werden
elseif ErrorNum% = 402
return ErrorGruppe$ +Kein passendes Pixelformat für OpenGL gefunden
elseif ErrorNum% = 403
return ErrorGruppe$ +OpenGL-Pixelformat kann nicht gesetzt werden
elseif ErrorNum% = 404
return ErrorGruppe$ +OpenGL-Renderkontext kann nicht erzeugt werden
elseif ErrorNum% = 405
return ErrorGruppe$ +OpenGL-Renderkontext kann nicht aktiviert werden
elseif ErrorNum% = 406
return ErrorGruppe$ +Ungültige Textur-Datei
elseif ErrorNum% = 407
return ErrorGruppe$ +Fehler in XPGL-Datei
elseif ErrorNum% = 408
return ErrorGruppe$ +XPGL-Daten nicht gefunden
elseif ErrorNum% = 409
return ErrorGruppe$ +Zu viele XPGL-Dateien geladen
elseif ErrorNum% = 410
return ErrorGruppe$ +Ungültiger XPGL-Typ
elseif ErrorNum% = 411
return ErrorGruppe$ +Ungültger Objekttyp
elseif ErrorNum% = 412
return ErrorGruppe$ +Ungültige XPGL-Nummer
elseif ErrorNum% = 500
return ErrorGruppe$ +ODBC ist nicht initialisiert
elseif ErrorNum% = 501
return ErrorGruppe$ +Fehler bei der ODBC-Initialisierung
elseif ErrorNum% = 502
return ErrorGruppe$ +ODBC.DLL nicht gefunden
elseif ErrorNum% = 503
return ErrorGruppe$ +ODBC-Fehle
elseif ErrorNum% = 504
return ErrorGruppe$ +Sätze bearbeitet
elseif ErrorNum% = 505
return ErrorGruppe$ +Operation erfolgreich
elseif ErrorNum% = 506
return ErrorGruppe$ +Ergebnisdatei kann nicht geöffnet werden
elseif ErrorNum% = 507
return ErrorGruppe$ +Zu große Ergebnismenge
elseif ErrorNum% = 600
return ErrorGruppe$ +dB-Fehler
elseif ErrorNum% = 601
return ErrorGruppe$ +Datei nicht gefunden
elseif ErrorNum% = 602
return ErrorGruppe$ +Doppelter Feldnam
elseif ErrorNum% = 603
return ErrorGruppe$ +Ungültige Feldläng
elseif ErrorNum% = 604
return ErrorGruppe$ +Ungültige Dezimalstelle
elseif ErrorNum% = 605
return ErrorGruppe$ +Index-Datei nicht in Ordnun
elseif ErrorNum% = 606
return ErrorGruppe$ +Feld nicht gefunde
elseif ErrorNum% = 607
return ErrorGruppe$ +Dateiname fehlerhaf
elseif ErrorNum% = 608
return ErrorGruppe$ +Schlüsselfeld nicht in Ordnun
elseif ErrorNum% = 609
return ErrorGruppe$ +Tabellennummer nicht im erlaubten Bereich
elseif ErrorNum% = 610
return ErrorGruppe$ +Tabellennummer noch nicht vergeben
elseif ErrorNum% = 611
return ErrorGruppe$ +Formel nicht in Ordnun
elseif ErrorNum% = 612
return ErrorGruppe$ +Feld beim Lesen nicht gefunde
elseif ErrorNum% = 613
return ErrorGruppe$ +Feldnummer beim Lesen nicht gefunde
elseif ErrorNum% = 614
return ErrorGruppe$ +Feld zum Schreiben nicht gefunde
elseif ErrorNum% = 615
return ErrorGruppe$ +Feldnummer zum Schreiben nicht gefunden
elseif ErrorNum% = 616
return ErrorGruppe$ +Index-Dateiname fehlerhaft
elseif ErrorNum% = 617
return ErrorGruppe$ +Ungültige Eingabe
elseif ErrorNum% = 618
return ErrorGruppe$ +Sonstige Fehler: Es ist keine Tabelle geöffnet
elseif ErrorNum% = 900
return ErrorGruppe$ +Dieser Befehl ist in der Sharewareversion nicht vorhanden
elseif ErrorNum% = 901
return ErrorGruppe$ +Nur xxxx Zeilen sind erlaubt! (Kommat ab XProfan 11 nicht mehr vor!
elseif ErrorNum% = 902
return ErrorGruppe$ +Zeile zu lang (max. 32767 Zeichen)
elseif ErrorNum% = 903
return ErrorGruppe$ +INCLUDE-Datei nicht gefunden
elseif ErrorNum% = 904
return ErrorGruppe$ +INCLUDE-Verschachtelung verboten
elseif ErrorNum% = 905
return ErrorGruppe$ +Keine gültige XProfan Datei
elseif ErrorNum% = 906
return ErrorGruppe$ +Programmdatei fehlerhaft
elseif ErrorNum% = 913
return ErrorGruppe$ +HEADER-Datei nicht gefunden
elseif ErrorNum% = 914
return ErrorGruppe$ +HEADER-Verschachtelung verboten
elseif ErrorNum% = 915
return ErrorGruppe$ +UNIT-Datei nicht gefunden
elseif ErrorNum% = 916
return ErrorGruppe$ +Unpassende Runtime-Version
elseif ErrorNum% = 999
return ErrorGruppe$ +Programm abgebrochen
else
return unbekannter Fehler
endif
endproc
|
| | | Gruß Karl-Heinz WIN XP home/Pro / XPROFAN 11 / P2CPP ATMEL + BASCOM Fan | 30.12.2008 ▲ |
| |
| | Jac de Lad | Die Idee finde ich gut, aber:
1.
Errorlevel wieder auf -3 setzen, damit jeder weitere Fehler wieder auf diese Routine verzweigen kann Set(ErrorLevel, -3)
-3???
2. Du veränderst in der ErrorProc NumWidth und Decimals ohne es zurückzusetzen und vergibst das Dateihandle 99 ohne zu wissen, ob es schon benutzt wird.
Ich will dir keine Komkurrenz machen, aber hier mal mein Vorschlag, wie ich ihn in Gamsav verwende (nur Loggen in einer Datei):
Struct OSVERSIONINFO=dwOSVersionInfoSize&,dwMajorVersion&,dwMinorVersion&,dwBuildNumber&,dwPlatformId&,szCSDVersion$(128)
Def ZwQueryInformationProcess(5) !NTDLL,ZwQueryInformationProcess
Def Globalmemorystatus(1) !KERNEL32,GlobalMemoryStatus
proc WinVer_
Select Val($WinVer)
CaseOf 3.5
Return Windows NT 3.5
CaseOf 3.51
Return Windows NT 3.51
CaseOf 4.0
Return Windows 95 oder NT 4.0
CaseOf 4.1
Return Windows 98/98SE
CaseOf 4.9
Return Windows ME
CaseOf 5
Return Windows 2000
CaseOf 5.1
Return Windows XP
CaseOf 5.2
Return Windows 2003
CaseOf 6
Return Windows Vista
CaseOf 6.1
Return Windows Vista SP1
Otherwise
Return $WinVer
EndSelect
endproc
errorproc
declare ef&,a$,errnumber%,ms#,size&
errnumber%=%ErrNumber
ef&=Assign($WinPath+\LoggedErrors.txt)
if FileExists($WinPath+\LoggedErrors.txt)
Append ef&
Print #ef&,
else
Rewrite ef&
endif
Print #ef&,Fehlerbericht für Gamsav +$Ver
Print #ef&,Zeitstempel: +Date$(0)+, +Time$(0)+:+Time$(1)
Select %Error
CaseOf 0
a$=Kein Fehler
CaseOf 1
a$=Fehler
CaseOf 2
a$=Warnung
Caseof 3
a$=Hinweis
Otherwise
a$=unbekannt
EndSelect
Print #ef&,Art des Fehlers: +a$
Print #ef&,Fehlernummer: +Str$(ErrNumber%)
Print #ef&,Fehlerzeile: +Str$(%ErrLine)
Print #ef&,Fehlerstring: +If($ErrStr=,kein Fehlerstring,$ErrStr)
Print #ef&,Erweiterter Fehlerstring: +Error_(ErrNumber%)
Print #ef&,Benutzer: +user$in Gamsav global deklariert!!!
Dim ms#,OSVERSIONINFO
ms#.dwOSVersionInfoSize&=148
GetVersionEx(ms#)
Print #ef&,Windows-Version: +WinVer_()+ (+$WinVer+, Build +Str$(ms#.dwBuildNumber&)+)
Print #ef&,Architektur: +If(IsWin64(),x64,x86)
Dim ms#,32
Globalmemorystatus(ms#)
Print #ef&,Speicher in Gebrauch: +Str$(Long(ms#,4))+%
Print #ef&,Physikalischer Speicher gesamt: +ConvertBytes(Long(ms#,8),2)
Print #ef&,Freier physikalischer Speicher: +ConvertBytes(Long(ms#,12),2)
Print #ef&,Größe der Auslagerungsdatei: +ConvertBytes(Abs(Long(ms#,16)),2)
Print #ef&,Freier Speicher in der Auslagerungsdatei: +ConvertBytes(Abs(Long(ms#,20)),2)
Print #ef&,Gesammter virtueller Speicher: +ConvertBytes(Long(ms#,24),2)
Print #ef&,Freier virtueller Speicher: +ConvertBytes(Long(ms#,28),2)
if w2000%Global deklariert, gibt an, ob win2000 oder höher benutzt wird!!!
ZwQueryInformationProcess(hpr&,3,hpr#,44,Addr(size&))
Print #ef&,Speicherbelegung: +Format$(##,##0kB,Long(hpr#,16)/1024)
endif
Dispose ms#
Close ef&
Assign ef&,
endproc
proc Error_
Parameters err%
declare err$
Select err%
caseof 300
err$=Datei kann nicht gelesen werden.
caseof 301
err$=Datei kann nicht erzeugt werden
caseof 302
err$=Fehler beim Lesen.
caseof 303
err$=Fehler beim Schreiben.
caseof 304
err$=PROF16.EXE nicht ausführbar oder fehlt!
caseof 305
err$=REGISTRY
caseof 306
err$=Datei nicht gefunden.
caseof 600
err$=dB-Fehler.
caseof 601
err$=Datei nicht gefunden.
caseof 602
err$=Doppelter Feldname.
caseof 603
err$=Ungültige Feldlänge.
caseof 604
err$=Ungültige Dezimalstellen.
caseof 605
err$=Index-Datei nicht in Ordnung.
caseof 606
err$=Feld nicht gefunden.
caseof 607
err$=Dateiname fehlerhaft.
caseof 608
err$=Schlüsselfeld nicht in Ordnung.
caseof 609
err$=abellennummer nicht im erlaubten Bereich!
caseof 610
err$=Tabellennummer noch nicht vergeben!
caseof 611
err$=Formel nicht in Ordnung.
caseof 612
err$=Feld beim Lesen nicht gefunden.
caseof 613
err$=Feldnummer beim Lesen nicht gefunden.
caseof 614
err$=Feld zum Schreiben nicht gefunden.
caseof 615
err$=Feldnummer zum Schreiben nicht gefunden.
caseof 616
err$=Index-Dateiname fehlerhaft.
caseof 617
err$=Ungültige Eingabe.
caseof 100
err$=Systemvariable unbekannt.
caseof 101
err$=Funktion unbekannt.
caseof 102
err$=Befehl unbekannt.
caseof 103
err$=Integer-Variable erwartet.
caseof 104
err$=Dateikennung erwartet.
caseof 105
err$=Tabellenkennung erwartet.
caseof 106
err$=ENDIF bzw. ELSE nicht gefunden.
caseof 107
err$=ENDIF nicht gefunden.
caseof 108
err$=Zu tiefe WHILE-Verschachtelung.
caseof 109
err$=ENDWHILE bzw. WHILE nicht gefunden.
caseof 110
err$=WHILE fehlt.
caseof 111
err$=GOSUB/PROC fehlt.
caseof 112
err$=PROC fehlt.
caseof 113
err$=Label nicht gefunden.
caseof 114
err$=Zu tiefe GOSUB/PROC-Verschachtelung.
caseof 115
err$=ENDPROC nicht gefunden.
caseof 116
err$=qDIM%q darf nur einmal verwandt werden.
caseof 117
err$=qDIM&q darf nur einmal verwandt werden.
caseof 118
err$=qDIM$q darf nur einmal verwandt werden.
caseof 119
err$=qDIM!q darf nur einmal verwandt werden.
caseof 120
err$=STARTPRINT fehlt.
caseof 121
err$=Bereichs-Variable erwartet.
caseof 122
err$=Variablenbezeichner fehlerhaft.
caseof 123
err$=Variablenname zu lang.
caseof 124
err$=STARTPAINT fehlt.
caseof 125
err$=SUBPOPUP fehlt.
caseof 126
err$=IF oder IFNOT fehlt.
caseof 127
err$=Befehl hinter CASE fehlt.
caseof 128
err$=Strukturbezeichner erwartet.
caseof 129
err$=Strukturbezeichner fehlerhaft.
caseof 130
err$=Strukturbezeichner zu lang.
caseof 131
err$=Variablenbezeichner erwartet.
caseof 132
err$=WITH-Verschachtelung nicht erlaubt.
caseof 133
err$=WITH fehlt.
caseof 134
err$=16-Bit DLLs werden von XProfan nicht mehr unterstützt.
caseof 135
err$=Klasse nicht gefunden.
caseof 136
err$=Direktiven sind nur am Zeilenanfang erlaubt.
caseof 137
err$=Zu tiefe IF/IFNOT-Verschachtelung.
caseof 200
err$=Ungültiger Funktionswert.
caseof 201
err$=Division durch 0.
caseof 202
err$=Falscher Typ für DTOC$.
caseof 203
err$=Falscher Typ für CTOD$.
caseof 204
err$=String-Index ist < 1.
caseof 205
err$=Substring-Nr ist < 1.
caseof 206
err$=So viele Elemente sind nicht da.
caseof 207
err$=Bereichsgrenze überschritten.
caseof 208
err$=Kommandozeilenparameter fehlt.
caseof 209
err$=Datei nicht gefunden.
caseof 210
err$=Dateinummer nicht im erlaubten Bereich.
caseof 211
err$=Parameterzahl muss zwischen 0 und 15 liegen.
caseof 212
err$=Zu wenig Parameter.
caseof 213
err$=Funktionsargument fehlt.
caseof 214
err$=Keine Zahl.
caseof 215
err$=Variable nicht deklariert.
caseof 216
err$=Falscher Parametertyp.
caseof 217
err$=Speicher für Integer-Variablen erschöpft.
caseof 218
err$=Speicher für LongInt-Variablen erschöpft.
caseof 219
err$=Speicher für String-Variablen erschöpft.
caseof 220
err$=Speicher für Float-Variablen erschöpft.
caseof 221
err$=Während der Druckausgabe verboten.
caseof 222
err$=Box nicht innerhalb des Fensters.
caseof 223
err$=Negative Fenstergröße.
caseof 224
err$=ICON nicht vorhanden.
caseof 225
err$=ICON nicht vorhanden! (Nur 0..4).
caseof 226
err$=Fehler bei der Menüerstellung.
caseof 227
err$=Zu tiefe Menüverschachtelung.
caseof 228
err$=Bitmap nicht ladbar.
caseof 229
err$=Bitmap konnte nicht gespeichert werden.
caseof 230
err$=Cursor nicht vorhanden! (Nur 0..16).
caseof 231
err$=Es sind lediglich 0 bis xxxxx Elemente erlaubt.
caseof 232
err$=Zu viele Elemente.
caseof 233
err$=Das Element gibt es nicht.
caseof 234
err$=Fehler bei der Tonerzeugung.
caseof 235
err$=Drucken ist nicht möglich.
caseof 236
err$=Fehler bei der HardCopy.
caseof 237
err$=Der Befehl setzt ein Fenster voraus.
caseof 238
err$=Stringende fehlt.
caseof 239
err$=Speicher für Bereichs-Variablen erschöpft.
caseof 240
err$=Zu wenig Speicher für Bereichs-Variable.
caseof 241
err$=Bereichsvariable ist bereits DIMensioniert.
caseof 242
err$=Ungültiges Fenster-Handle.
caseof 243
err$=Bereichsvariable ist nicht DIMensioniert.
caseof 244
err$=Der Text paßt nicht komplett in die Bereichsvariable.
caseof 245
err$=Die Parameterzahl unterscheidet sich von der Parameterbeschreibung.
caseof 246
err$=Ungültiger Typ in der Parameterbeschreibung.
caseof 247
err$=Fehler beim Laden der DLL.
caseof 248
err$=Funktion in DLL nicht vohanden.
caseof 249
err$=Zwischen STARTPAINT/ENDPAINT verboten.
caseof 250
err$=SETTIMER fehlt.
caseof 251
err$=Der TIMER ist schon eingestellt.
caseof 252
err$=Menü ist nicht ladbar.
caseof 253
err$=Speicher für Array-Variablen erschöpft.
caseof 254
err$=Maximal drei Dimensionen erlaubtn.
caseof 255
err$=Klammern nicht ausgewogen.
caseof 256
err$=Zu viele Strukturvariablen.
caseof 257
err$=Fehler in Strukturdefinition.
caseof 258
err$=Zu viele Strukturen.
caseof 259
err$=Struktur nicht definiert.
caseof 260
err$=Definition im Header fehlt.
caseof 261
err$=Unbekanntes Create-Objekt.
caseof 262
err$=Unbekannter Schalter.
caseof 263
err$=Unbekannte Subfunktion.
caseof 264
err$=Ungültige WHILELOOP-Parameter.
caseof 265
err$=Doppelter Name in Struktur oder Klasse.
caseof 266
err$=Die beerbte Klasse muss an erster Stelle stehen.
caseof 267
err$=Methode fehlt.
caseof 268
err$=Prozedur nicht gefunden.
caseof 269
err$=Kein freier CALLBACK mit der gewünschten Parameterzahl.
caseof 270
err$=Kein Zugriff auf geschützte Eigenschaft/Methode.
caseof 271
err$=Eine Struktur kann keine Klasse erben.
caseof 272
err$=Operation nicht auf Objekte anwendbr.
caseof 273
err$=Variable nicht in Struktur vorhanden.
caseof 274
err$=Eigenschaft/Methode nicht in Objekt vorhanden.
caseof 275
err$=Zuweisung auf dieses Objekt nicht möglich.
caseof 276
err$=Struktur bzw. Bereich zu klein.
caseof 277
err$=Unbekannter Arrayty.
caseof 278
err$=Zuweisung nur auf undimensionierte Bereichsvariable möglich.
caseof 279
err$=Fehler in SQL-Anweisung.
caseof 500
err$=ODBC ist nicht initialisiert.
caseof 501
err$=Fehler bei der ODBC-Initialisierung.
caseof 502
err$=ODBC.DLL nicht gefunden.
caseof 503
err$=ODBC-Fehler.
caseof 504
err$=Sätze bearbeitet.
caseof 505
err$=Operation erfolgreich.
caseof 506
err$=Ergebnisdatei kann nicht geöffnet werden.
caseof 507
err$=Zu große Ergebnismenge.
caseof 900
err$=Dieser Befehl ist in der Sharewareversion nicht vorhanden.
caseof 901
err$=Nur 9999 Zeilen sind erlaubt.
caseof 902
err$=Zeile zu lang (max. 254 Zeichen).
caseof 903
err$=INCLUDE-Datei nicht gefunden.
caseof 904
err$=INCLUDE-Verschachtelung verboten.
caseof 905
err$=Keine gültige XProfan Datei.
caseof 906
err$=Programmdatei fehlerhaft.
caseof 913
err$=HEADER-Datei nicht gefunden.
caseof 914
err$=HEADER-Verschachtelung verboten.
caseof 915
err$=UNIT-Datei nicht gefunden.
caseof 916
err$=Unpassende Runtime-Version.
caseof 999
err$=Programm abgebrochen.
otherwise
err$=Unbekannter Fehler!
endselect
Return err$
endproc
proc ConvertBytes
Parameters s!,c%
declare l%
While Not(s!<1024) AND (l%<9)
Inc l%
s!=s!/1024
endwhile
Return Format$(If(l%,###0.+MkStr$(0,c%),####0),s!)+ +Mid$(kMGTPEZY,l%,1)+B
endproc
Proc IsWin64
declare d&,h&,r%
d&=UseDLL($SysPath+\Kernel32.dll)
h&=External(kernel32,GetProcAddress,d&,IsWow64Process)
if h&<>0
External(kernel32,IsWow64Process,External(kernel32,GetCurrentProcess),Addr(r%))
endif
FreeDLL d&
Return r%
endproc
Ich hoffe, ich habe alle relevanten Procs mitkopiert. Jac |
| | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 30.12.2008 ▲ |
| |
| | KHR | Hallo JAC
danke für Deine Antwort.
Ich versteh zwar was Du meinst, seh aber nicht so recht, was Du willst
1. Errorlevel wieder auf -3 setzen, damit jeder weitere Fehler wieder auf diese Routine verzweigen kann Set(ErrorLevel, -3)
-3???
2. Du veränderst in der ErrorProc NumWidth und Decimals ohne es zurückzusetzen und vergibst das Dateihandle 99 ohne zu wissen, ob es schon benutzt wird.
Ich hab den Code aus meinem Programm herausgenommen, wie er da läuft. Den Dialog hab ich ergänzt, weil der originale nicht zu übernehmen war.
Da ich ne gewisse Struktur in meinen Dateinummern habe kann ich bei mir die 99 problemlos verwenden.
Dasselbe gilt bei mir mit NumWidth und Decimals Wers anders braucht, muß es sich halt anpassen. Ich denke, es wird den wenigsten einfallen ihre Code-Schnipsel so umzustricken, daß sie jeder allgemeingültig direkt verwenden kann.
Normalerweise such ich erst mal mit der Suchfunktion hier im Forum, Wenn ich da nichts zum klauen finde suche ich die Quellcodesammlung des MMJ durch. Finde ich dadurch was brauchbares ist es gut.
Wenn nicht, dann bastele ich mir das halt selbst und biete es selbstverständlich anderen hier im Forum an.
Ich behaupte ja nicht, daß jeder den Code plug and play bei sich einbauen und verwenden kann/soll. Die meisten Code-Schnipsel muß man anpassen.
Und genau dafür dokumentiere ich etwas ausführlicher als die meisten anderen hier.
Wenn Fehler drin sind - klar - darauf aufmerksan machen.
Wenn man Verbesserungsvorschläge hat - klar - hier posten
Kokurrenz machen? hier bei den Code-Schnipseln?? versteh ich nicht.
Jeder der Lust hat liefert ab was er hat/will/kann. Wers besser kann, macht halt seine eigenen Schnipsel rein. Je mehr sich hier sammelt, desto weniger oft kommt es vor, daß das Rad an 9 verschiedenen Orten erfunden wird.
So seh ich das |
| | | Gruß Karl-Heinz WIN XP home/Pro / XPROFAN 11 / P2CPP ATMEL + BASCOM Fan | 30.12.2008 ▲ |
| |
| | | KHR
Jeder der Lust hat liefert ab was er hat/will/kann. Wers besser kann, macht halt seine eigenen Schnipsel rein. Je mehr sich hier sammelt, desto weniger oft kommt es vor, daß das Rad an 9 verschiedenen Orten erfunden wird. So seh ich das
So ist es gedacht.
Jacs Anmerkungen und Anmerkungen sind wichtig - darum hat jedes Snippet auch einen Thread.
Bleibt erst somit offen für jeden, es z.B. zu verbessern... |
| | | | |
| | Jac de Lad | Hallo KHR.
Ich wollte auch nur sagen, dass ich einiges in deinem Quelltext entdeckt habe, dass genauer untersucht werden sollte. Set(Errorlevel,-3) ist laut der Hilfe nicht definiert, was da passiert kann ich ohne es auszuprobieren nicht vorhersagen. Und das mit dem Dateihandle und NumWidth etc.; damit wollte ich doch nur darauf hinweisen, dass es damit Probleme geben kann. Und das mit der Konkurrenz war nur so gemeint, dass ich zufällig aus einem eigenen Programm etwas ähnliches rumliegen hatte und das noch schnell anhängen wollte. Natürlich kann sich jeder das beste herauspicken und anpassen, meine Proc ist auch nicht optimal.
In diesem Sinne: Einen guten Rutsch (bitte nicht zu weit rutschen) und ein schönes neues Jahr 2009, Jac |
| | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 31.12.2008 ▲ |
| |
| | Michael Wodrich | Hallo.
Ich sehe es oft, daß Ihr mit Str$() kämpft und hierfür Decmals und NumWidth abschaltet.
XProfan hat auch hierfür eine sehr elegante Lösung. Die Zahl als String, wie immer man sie formatiert haben möchte, liefert Format$() am Besten.
Eine einfache Ganzzahl aus einer Floatzahl:
Ganzzahl_String$ = Format$(#0,Floatzahl!)
...und nochmal, jetzt mit Tausenderpunkten:
Ganzzahl_String$ = Format$(#,0,Floatzahl!)
Decimals und NumWidth werden hier nicht benutzt/benötigt.
Und: Ab XProfan 11 kann sogar die Syntax der Programmiersprache C mit Format$() genutzt werden.
Schöne Grüße Michael Wodrich |
| | | Programmieren, das spannendste Detektivspiel der Welt. | 02.01.2009 ▲ |
| |
| | | Michael Wodrich
Hallo. Ich sehe es oft, daß Ihr mit Str$() kämpft und hierfür Decmals und NumWidth abschaltet. halte ich fürs Eleganteste. |
| | | | |
| | Michael Wodrich | (seufz) |
| | | Programmieren, das spannendste Detektivspiel der Welt. | 02.01.2009 ▲ |
| |
| | Jac de Lad | Da muss ich iF zustimmen. |
| | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 02.01.2009 ▲ |
| |
| | Alexander Beloch | | | | | |
| | Jörg Sellmeyer | Hm - bei diesem kommt dann aber einfach nur 1 heraus:
Michaels Variante ist schon richtig.
Nachtrag:
Eine einfache Ganzzahl aus einer Floatzahl:
Oh - übersehen... |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 02.01.2009 ▲ |
| |
| | Frank Abbing |
Eine einfache Ganzzahl aus einer Floatzahl:
Ist doch dann korrekt mit Int(). Ich mache es ebenso. |
| | | | |
|
Zum QuelltextThemenoptionen | 15.745 Betrachtungen |
ThemeninformationenDieses Thema hat 7 Teilnehmer: |