
To be clear, ON ERROR RESUME NEXT and ON ERROR GOTO 0 both produce the same results... they disable the error handler (if one exists).
------------------
Lance
PowerBASIC Support
mailto:[email protected][email protected]</A>
Function SomeFunction()as long On Error GoTo Errhandler ..... Errclear:Open File$ for binary as #1 If ErrClear > 0 Then ... ... Errhandler: Resume next End Function
FilNr& = GetFreeFile() Retry& = 0 Do ErrClear:Open TransIdxDir$ & FilNamn$ For Binary Access Read Lock Shared As FilNr& If ErrClear = 0 Then Function = %True:Exit Do If Retry& > 5 Then Function = %False:GoTo ErrExit Incr Retry&:Sleep 50 Loop
#Compile Exe "EXE\MASTXX.EXE" #Register None #Dim All %NOANIMATE = 1 %NOBUTTON = 1 %NOCOMBO = 1 %NODRAGLIST = 1 %NOHEADER = 1 %NOIMAGELIST = 1 %NOLIST = 1 %NOLISTVIEW = 1 %NOSTATUSBAR = 1 %NOTABCONTROL = 1 %NOTOOLBAR = 1 %NOTOOLTIPS = 1 %NOTRACKBAR = 1 %NOTREEVIEW = 1 %NOUPDOWN = 1 #Include "\!INCLUDE\WIN32API\WIN32API.INC" #Include "\!INCLUDE\WIN32API\COMMCTRL.INC" #Include "\!INCLUDE\DECLARES\FOXRUN32.INC" %LISTBOX = 100 %BUTTON1 = 105 ' -------------------------------------------------- Declare CallBack Function Form1_DLGPROC Declare CallBack Function CBF_BUTTON1 '--Tråd-Status UDT-s----------------------------- Global udtProd As Typ_ThreadStatus Global hForm1& ' Dialog handle Global gDisk As String Global gMasterDir As String Global gMasterId As Long Global glbAbort As Long Function PbMain Local Count& Local CC1 As INIT_COMMON_CONTROLSEX CC1.dwSize=SizeOf(CC1) CC1.dwICC=%ICC_WIN95_CLASSES InitCommonControlsEX CC1 Local Style&, ExStyle& Style& = %WS_POPUP Or %DS_MODALFRAME Or %WS_CAPTION Or %WS_MINIMIZEBOX Or %WS_SYSMENU Or %DS_CENTER ExStyle& = 0 Dialog New %Hwnd_Desktop, "Your Dialog", 0, 0, 448, 177, Style&, ExStyle& To hForm1& Dim LList(0) As String Control Add ListBox, hForm1&, %LISTBOX, LList(), 0, 2, 448, 150, _ %WS_CHILD Or %WS_VISIBLE Or %LBS_NOTIFY Or %LBS_SORT Or %LBS_NOINTEGRALHEIGHT Or %WS_VSCROLL Or %WS_TABSTOP, _ %WS_EX_CLIENTEDGE Control Send hForm1&, %LISTBOX, %WM_SETFONT,GetStockObject(%ANSI_FIXED_FONT), %TRUE Control Add "Button", hForm1&, %BUTTON1, "Button 1", 176, 158, 53, 15, _ %WS_CHILD Or %WS_VISIBLE Or %BS_PUSHBUTTON Or %WS_TABSTOP Call CBF_BUTTON1 Call RUNTIME_INIT(20,"\\NTSERVER\DATA\SPIDER\MASTER20") Dialog Show Modeless hForm1& , Call Form1_DLGPROC Do Dialog DoEvents To Count& Loop Until Count&=0 End Function CallBack Function Form1_DLGPROC Select Case CbMsg ' Common Windows Messages you may want to process ' ----------------------------------------------- Case %WM_TIMER Case %WM_HSCROLL Case %WM_VSCROLL Case %WM_SIZE Case %WM_CLOSE Case %WM_DESTROY Case %WM_SYSCOMMAND Case %WM_PAINT ' ----------------------------------------------- Case %WM_CTLCOLORMSGBOX , %WM_CTLCOLORBTN, %WM_CTLCOLOREDIT,_ %WM_CTLCOLORSTATIC, %WM_CTLCOLORSCROLLBAR, %WM_CTLCOLORLISTBOX ' Control colors Select Case GetDlgCtrlID(CbLparam) Case Else Function=0 End Select Case %WM_NOTIFY Case %WM_COMMAND Case Else End Select End Function CallBack Function CBF_BUTTON1 Local ThreadId&,Test&,Retry& If CbCtlMsg=%BN_CLICKED Then '--PROD----------------- If udtProd.Running = 0 Then udtProd.Id = 0 udtProd.Running = 0 udtProd.ExitCode = 0 udtProd.CBLogg = CodePtr(MAST_LoggEvent) udtProd.CBMaster = CodePtr(MAST_LoggEvent) udtProd.CBError = CodePtr(MAST_LoggEvent) udtProd.CBAlertHold = 0 udtProd.CBAlertQue = 0 udtProd.hWndMaster = hForm1& udtProd.CBStatus = 0 'CodePtr(SetIndicator) Thread Create Prodscan(VarPtr(udtProd)) To ThreadId& End If End If End Function Function MAST_LoggEvent(LM As LogMsg_Typ) As Long Local Datum$,Msg$,UtMsg$,ListCount&,Li&,chkStatus& Local Nu As Double On Error Resume Next Nu = Now() Msg$ = Space$(SizeOf(LM)) Lset Msg$ = LM Replace Chr$(0) With Chr$(32) In Msg$ Msg$ = Rtrim$(Msg$) '--Formattera meddelandet------------------------ Datum$ = FormatDateTime(Nu,"YYMMDD HH:MM:SS") UtMsg$ = Datum$ & " " & Msg$ 'EnterCriticalSection CS_GateList '--radera i listan om mer än 10,000 meddelanden-- Control Send hForm1&,%Listbox,%LB_GETCOUNT,0,0 To ListCount& If ListCount& > 10000 Then Control Send hForm1&,%Listbox,%WM_SETREDRAW,0&,0& For Li& = 1 To 1000 Control Send hForm1&,%Listbox,%LB_DELETESTRING, 0, 0 Next Control Send hForm1&,%Listbox,%WM_SETREDRAW,1&,0& End If '--lägg ut meddelandet i listan------------------- Control Send hForm1&,%Listbox,%LB_ADDSTRING,0,StrPtr(UtMsg$) To ListCount& Control Send hForm1&,%Listbox,%LB_SETCURSEL , ListCount&, 0 To Li& '--så skall det ut till loggfilen----------------- Datum$ = FormatDateTime(Nu,"YYYYMMDD HH:MM:SS") UtMsg$ = Datum$ & " " & Msg$ Call LOG_MasterLogg(Msg$) End Function Type XfpMsg_Typ Datum As String * 11 Tid As String * 9 DxId As String * 5 Rutin As String * 9 OrderNr As String * 9 End Type Global ClrXM As XfpMsg_Typ Type XfpRadTyp Tid as string * 9 ' 1,9 Datum as string * 11 '10,11 Rutin as string * 7 '21,7 x1 as string * 2 '28,2 DxOrginal as string * 7 '30,7 DxPages as string * 9 '37,9 Unknown as string * 9 '46,9 DxCopies as string * 6 '55,6 x2 as string * 4 '61,4 DxId as string * 5 '65,5 DxMag as string * 4 '70,4 x3 as string * 25 '74,25 DxFil as string * 15 '99,15 DxOrder as string * 8 '114,8 x4 as string * 8 '122,8 End type ' Declare Function proto_loggevent(LM As logMsg_Typ)As Long Function XFP_ReadLogg(ByVal Fil$,udt&) As Long Dim dbLog As LogInfo Local yy%,mm%,dd%,hh%,mi%,ss% Local FilNr&,InRad$,Sync$ Local glbCB_Logg As DWord Local pUdt As Typ_ThreadStatus Ptr pUdt = udt& glbCB_Logg = @pudt.CBLogg '..Öppna filen i Binary mode......................................... On Error Resume Next If FSO_FileExists(Fil$) = 0 Then Function = 100: GoTo ErrExit FilNr& = GetFreeFile ErrClear:Open Fil$ For Binary Access Read Shared As FilNr& If ErrClear > 0 Then Function = 100: GoTo ErrExit '..Läs in filens sync................................................ dbLog.FilNamn = Fil$ ErrClear:Get FilNr&,1, dbLog.Sync If ErrClear > 0 Then Close FilNr&: Function = 101: GoTo ErrExit Close FilNr& '..Hämta Logginfo-posten............................................. If DBLOG_GetInfo(Fil$, ByCopy dbLog.Sync, dbLog) = %False Then Function = 102: GoTo ErrExit '..Öppna filen i Shared mode......................................... ErrClear:Open Fil$ For Input Lock Shared As FilNr& If ErrClear > 0 Then Function = 100: GoTo ErrExit If dbLog.FilePos >= Lof(FilNr&) Then Close FilNr&: Function = %True: GoTo ErrExit '..Gå till sista läsposition......................................... ErrClear:Seek FilNr&, dbLog.FilePos '..loopa genom filen till slutet..................................... Local XR As XfpRadTyp Do While Not Eof(FilNr&) Sleep 0 If glbAbort <> 0 Then Call DBLOG_SaveInfo(dbLog) Close FilNr&:Function = 200:Exit Function End If ErrClear:Line Input #FilNr&,InRad$ If ErrClear > 0 Then Close FilNr&: Function = 101: GoTo ErrExit dbLog.FilePos = Seek(FilNr&) LSet XR = UCase$(InRad$) If Instr(XR.DxFil, "OFFLINE") > 0 Then Iterate Do If (Instr(XR.DxMag, "X")> 0) And _ (Len(RTrim$(XR.DxFil,any Chr$(0,32)))> 0) Then GoSub NyttXFPEntry Loop '..Filslut så uppdatera FilPos och stäng filen....................... ErrClear:dbLog.FilePos = Seek(FilNr&) Call DBLOG_SaveInfo(dbLog) Close FilNr& Function = 0 ErrExit: Exit Function '--SUBRUTIN---------------------------------------------------------- NyttXFPEntry: Replace any "./-" With "---" In XR.Datum Replace any "./-" With ":::" In XR.Tid '--LoggDatum------------------------------------- yy% = Val(Parse$(XR.Datum,"-",1)) mm% = Val(Parse$(XR.Datum,"-",2)) dd% = Val(Parse$(XR.Datum,"-",3)) dbLog.LogDate = VbDateSerial(yy%,mm%,dd%) '--LoggTid--------------------------------------- hh% = Val(Parse$(XR.Tid,":",1)) mi% = Val(Parse$(XR.Tid,":",2)) ss% = Val(Parse$(XR.Tid,":",3)) dbLog.LogTime = VbTimeSerial(hh%,mi%,ss%) '--Spara entryt---------------------------------- Call DBLOG_SaveInfo(dbLog) '--hämta transaktionen--------------------------- Dim T As UtCmdTyp Local LM As LogMsg_Typ,XM As XfpMsg_Typ Local TransNr$,TransIdx$ LSet LM = Space$(400) LSet XM = Space$(400) TransNr$ = Trim$(XR.DxFil,any Chr$(0,32)) TransIdx$ = TransNr$ LM.Modul = "XFPLOG" LM.Funktion = "NY POST" LM.FilNamn = TransIdx$ XM.Datum = RTrim$(XR.Datum,any Chr$(0,32)) XM.Tid = RTrim$(XR.Tid,any Chr$(0,32)) XM.DxId = RTrim$(XR.DxId,any Chr$(0,32)) XM.Rutin = RTrim$(XR.Rutin,any Chr$(0,32)) XM.OrderNr = Format$(Val(XR.DxOrder),"0000000") If IsFalse TRANS_GetRecord(TransNr$,T) Then If IsFalse TRANS_FindTrans(TransIdx$,T) Then LSet LM.Text = XM & "*VARNING* Kan inte finna transaktionen" 'SendMessage hWnd_Master,%LOG_PROD,ByVal VarPtr(LM),0 If glbCB_Logg <> 0 Then Call DWord glbCB_Logg Using proto_LoggEvent(LM) Return End If End If '--Skapa index----------------------------------- Local Tidx As TransIdxTyp,Tmp$ TransNr$ = RTrim$(T.TransNr,any Chr$(0,32)) TIdx.TransNr = T.TransNr TIdx.FilNamn = T.FilNamn '--skapa meddelande------------------------------ LM.Funktion = "NY POST " LM.TransNr = TransNr$ Tmp$ = FSO_GetBaseName(RTrim$(T.InFil,any Chr$(0,32))) If Len(Tmp$) > 8 Then Tmp$ = Mid$(Tmp$,1,8) Tmp$ = Tmp$ & "." & FSO_GetExtensionName(RTrim$(T.InFil,any Chr$(0,32))) LM.FilNamn = Tmp$ '--Uppdatera transaktionen------------------------ T.ProdDatum = dbLog.LogDate T.ProdTid = dbLog.LogTime T.PrintId = XR.DxId If Val(XR.DxOrder) > 0 Then T.OrderNr = Val(XR.DxOrder) T.DXRutin = XR.Rutin T.DXOrginal = Val(XR.DXOrginal) T.DXPages = Val(XR.DXPages) T.DXCopies = Val(XR.DXCopies) '--Uppdatera transaktionen------------------------ If IsFalse TRANS_UpDateRecord(T) Then LSet LM.Text = XM & " *ERROR* Kan inte uppdatera transaktionen" 'SendMessage hWnd_Master,%LOG_PROD,ByVal VarPtr(LM),0 If glbCB_Logg <> 0 Then Call DWord glbCB_Logg Using proto_LoggEvent(LM) Return End If '--Alles Ok skapa JobMsg------------------------- Call MSG_PCSTvaPost(TransNr$,TIdx) LSet LM.Text = XM 'SendMessage hWnd_Master,%LOG_PROD,ByVal VarPtr(LM),0 If glbCB_Logg <> 0 Then Call DWord glbCB_Logg Using proto_LoggEvent(LM) Return End Function Function PRODSCAN(ByVal udt&)As Long Local LM As LogMsg_Typ Local CB_Master As Dword Local pUdt As Typ_ThreadStatus Ptr pUdt = udt& @pudt.ID = GetCurrentThreadId @pudt.Running = 1 CB_Master = @pudt.CBMaster LM.TransNr = "--------" LM.FilNamn = "------------" LM.Modul = "PRODLOGG" LM.Funktion = "PRGSTART" LM.Text = "Tråden PRODUKTIONS-LOGGAR startar " If CB_Master <> 0 Then Call Dword CB_Master Using proto_Loggevent(LM) Call Xfp_ReadLogg("\\NTSERVER\DATA\XFPLOG\PRODXFP1.LOG",udt&) LM.TransNr = "--------" LM.FilNamn = "------------" LM.Modul = "PRODLOGG" LM.Funktion = "PRGSTOPP" LM.Text = "Tråden PRODUKTIONS-LOGGAR har avslutats " If CB_Master <> 0 Then Call Dword CB_Master Using proto_Loggevent(LM) @pudt.Running = 0 End Function
#Compile Exe #Dim All #Register None #Include "WIN32API.INC" %ID_LIST1 = 101 Global hDlg As Long Function MyThread (ByVal x As Long) As Long Dim n As Long, Txt As String For n = 1 To 1000 Txt = Str$(100000 - n) + Str$(n) + Str$(x) ListBox Add hDlg, %ID_LIST1, Txt Sleep 1 Next Dialog Send hDlg, %WM_USER + 401, 0, 0 End Function CallBack Function DlgProc Local i As Long, t2 As Dword, t1 As Dword, hList As Long Select Case CbMsg Case %WM_INITDIALOG Local x As Long Local s As Long Dim idThread As Long hList = GetDlgItem(CbHndl, %ID_LIST1) For i = 1 To 10 Thread Create MyThread(i) To idThread Thread Close idThread To idThread Sleep 1 Next Case %WM_USER + 401 Dim h As Static Long Incr h: If h = 10 Then MsgBox "Finished" End Select End Function Function PbMain Local i As Long Dialog New 0, "Listbox", , , 200, 100, %WS_CAPTION Or %WS_SYSMENU To hDlg Control Add ListBox, hDlg, %ID_LIST1, , 5, 5, 190, 65 Dialog Show Modal hDlg, Call DlgProc End Function
#Compile Exe #Dim All #Register None #Include "WIN32API.INC" %ID_LIST1 = 101 %nEl = 10000 Global arr() As String CallBack Function DlgProc Local i As Long, t2 As Dword, t1 As Dword, hList As Long Select Case CbMsg Case %WM_INITDIALOG ReDim arr(%nEl - 1) For i = 0 To %nEl - 1 arr(i) = "Item" + Str$(i) + String$(100, "-") Next Case %WM_COMMAND If CbCtl = 102 Then t1 = GetTickCount Control Handle CbHndl, %ID_LIST1 To hList For i = 0 To %nEl - 1 SendMessage hList, %LB_ADDSTRING, i, 0 Next SendMessage hList, %LB_SETCURSEL, 3, 0 ' Item 3 t2 = GetTickCount SetWindowText CbHndl, Str$(t2 - t1) End If Case %WM_DRAWITEM Local lpdis As DRAWITEMSTRUCT Ptr lpdis = CbLparam If @lpdis.itemID = &HFFFFFFFF& Then Exit Function If IsFalse(@lpdis.itemState And %ODS_SELECTED) Then FillRect @lpdis.hDC, @lpdis.rcItem, GetStockObject(%WHITE_BRUSH) SetBkColor @lpdis.hDC, %WHITE SetTextColor @lpdis.hDC, %BLACK Else FillRect @lpdis.hDC, @lpdis.rcItem, GetStockObject(%BLACK_BRUSH) SetBkColor @lpdis.hDC, %BLACK SetTextColor @lpdis.hDC, %WHITE End If TextOut @lpdis.hDC, 0, @lpdis.rcItem.ntop, ByVal StrPtr(arr(@lpdis.itemID)), Len(arr(@lpdis.itemID)) Function = 1: Exit Function End Select End Function Function PbMain Local hDlg As Long, i As Long, hList As Long Dialog New 0, "Listbox", , , 200, 100, %WS_CAPTION Or %WS_SYSMENU To hDlg Control Add ListBox, hDlg, %ID_LIST1, , 5, 5, 190, 65, _ %WS_CHILD Or %LBS_OWNERDRAWFIXED Or _ %WS_TABSTOP Or %LBS_DISABLENOSCROLL Or %WS_VSCROLL, %WS_EX_CLIENTEDGE Control Add Button, hDlg, 102, "Add", 50, 75, 90, 15 Dialog Show Modal hDlg, Call DlgProc End Function
We process personal data about users of our site, through the use of cookies and other technologies, to deliver our services, and to analyze site activity. For additional details, refer to our Privacy Policy.
By clicking "I AGREE" below, you agree to our Privacy Policy and our personal data processing and cookie practices as described therein. You also acknowledge that this forum may be hosted outside your country and you consent to the collection, storage, and processing of your data in the country where this forum is hosted.
Leave a comment: