je fais un éditeur perso et j'ai le soucis suivant :
lorsque que je double-clic sur un type de fichier déterminé (*.gs dans ce cas),
mon éditeur s'ouvre et affiche le fichier (jusque là ça va), si je refait la
même chose sur un autre fichier ça plante.
Mais si je fais ouvrir directement dans l'éditeur, pas de soucis, il m'affiche
un onglet supplémentaire.
Note: Je gère le fait que le programme ne peut pas se lancer plus d'une fois
Bref, j'essaye de faire un éditeur comme celui de PureBasic

voici le source
Code : Tout sélectionner
; Windows
Enumeration
#Win_0
#Win_About
EndEnumeration
; Menu bars
Enumeration
#Menu_Win_0
#Menu_PopUP
EndEnumeration
; Menu items
Enumeration
#Menu_Nouveau
#Menu_Ouvrir
#Menu_Sauver
#Menu_Sauver_Sous
#Menu_Sauver_Tout
#Menu_Fermer
#Menu_Fermer_Tout
#Menu_Printer
#Menu_Apercu
#Menu_Imprimer
#Menu_Quitter
#Menu_Aide
#Menu_APropos
#Menu_Couper
#Menu_Copier
#Menu_Coller
#Menu_Select_All
#Alt_F4
EndEnumeration
; Status bars
Enumeration
#StatusBar_Win_0
EndEnumeration
; Gadgets
Enumeration
#Panel_Editor
#Editor
EndEnumeration
; File
Enumeration 900
#TMP_FILE
EndEnumeration
Declare Status_Bar()
Declare Open_ReadFile(File.s = "")
Declare CallBack(WindowID.l, Message.l, wParam.l, lParam.l)
Declare Windows_About()
Declare CreateEditor()
Declare Create_PopUP_Menu()
Declare OpenWindow_Win_0()
#GS_TITLE = "GScript Editor"
#GS_VERSION = "V0.1.7Win32"
#GS_TMP_FILENAME = "$LIST$.$$$"
#SonAigue = 250
#SonGrave = 150
#Duree = 100
Global Font_Editor.l, Font_About.l
Global hsb.l, hEdit.l, PosX.l, PosY.l, NbCar.l
Global FullPath.s
Global CurrentFile.s, The_File_To_Load.s
Global Gadget_Editor.l = 0, Num_Editor.l = 0
Global PrintDlg.PRINTDLG
Structure GadgetEditor
Num_Gadget.l
Num.l
FileName.s
Repertoire.s
EndStructure
Global NewList ListEditor.GadgetEditor()
Font_Editor = LoadFont(0, "Lucida console", 9)
Font_About = LoadFont(1, "Tahoma", 8)
Procedure _BEEP()
Beep_(#SonAigue, #Duree)
Delay(15)
Beep_(#SonGrave, #Duree*2)
EndProcedure
Procedure.l LOWORD(value.l)
ProcedureReturn value & $FFFF
EndProcedure
Procedure.l HIWORD(Value.l)
ProcedureReturn (Value >> 16) & $FFFF
EndProcedure
Procedure Status_Bar()
StatusBarText(#StatusBar_Win_0,0," File:"+ListEditor()\FileName)
EndProcedure
Procedure.l Open_ReadFile(File.s = "")
Protected filtre.s = "", filtreDef.l, buffer.s, fichier.s = "", RepEnCours.s = "", Chemin.s = ""
Protected Dont_Read.l = #False
RepEnCours = GetCurrentDirectory()
If file = ""
Filtre = "GScript (*.gs)|*.gs|Include (*.gsi)|*.gsi|Texte (*.txt)|*.txt|Tous les fichiers (*.*)|*.*"
FiltreDef = 0 ; utiliser par défaut le premier des trois filtres possibles
Fichier = OpenFileRequester("Choisissez un fichier à charger", RepEnCours, Filtre, FiltreDef)
Else
Fichier = file
EndIf
If Fichier
OpenFile(#TMP_FILE,#GS_TMP_FILENAME)
FileSeek(#TMP_FILE,Lof(#TMP_FILE))
Chemin = GetPathPart(fichier)
Currentfile = RemoveString(fichier, Chemin)
; MessageRequester("","--[ResetList(ListEditor())] inside [Procedure Open_ReadFile()]--")
ResetList(ListEditor())
ForEach ListEditor()
If ListEditor()\Filename = CurrentFile
Position = ListIndex(ListEditor())
SetGadgetState(#Panel_Editor,Position)
Dont_Read = #True
Break
EndIf
Next
If Dont_Read = #False
; MessageRequester("","--[If Dont_Read = #False] inside [Procedure Open_ReadFile()]--")
;verif si c'est le 1er untitled, sinon on créé
If Left(ListEditor()\FileName,4) <> "<unt"
CreateEditor()
EndIf
; MessageRequester("","--[*Ancien_Element = @ListEditor()] inside [Procedure Open_ReadFile()]--")
*Ancien_Element = @ListEditor()
Position = GetGadgetState(#Panel_Editor)
SelectElement(ListEditor(),Position)
If ReadFile(0, fichier)
buffer = Space(Lof(0))
If ReadData(0, @buffer, Lof(0))
SetGadgetText(ListEditor()\Num_Gadget, buffer) ; *** ERREUR ICI ***
EndIf
CloseFile(0)
Else
MessageRequester("ERROR","Ne peut lire le fichier "+fichier+"!")
ProcedureReturn 1
EndIf
NbLine = CountGadgetItems(ListEditor()\Num_Gadget)
SetGadgetItemText(#Panel_Editor,GetGadgetState(#Panel_Editor),CurrentFile,-1)
ListEditor()\FileName = CurrentFile
ListEditor()\Repertoire = Chemin
ChangeCurrentElement(ListEditor(), *Ancien_Element)
; Status_Bar()
WriteLong(#TMP_FILE,ListEditor()\Num_Gadget)
WriteLong(#TMP_FILE,ListEditor()\Num)
WriteStringN(#TMP_FILE,ListEditor()\Filename)
WriteStringN(#TMP_FILE,ListEditor()\Repertoire)
CloseFile(#TMP_FILE)
EndIf
EndIf
Status_Bar()
SetActiveGadget(ListEditor()\Num_Gadget)
ProcedureReturn 0
EndProcedure
Procedure CallBack(WindowID.l, Message.l, wParam.l, lParam.l)
WW = WindowWidth(#Win_0) : WH = WindowHeight(#Win_0) - StatusBarHeight(#StatusBar_Win_0) - MenuHeight()
Select Message
Case #WM_CTLCOLOREDIT
Case #WM_SIZE
ResizeGadget(#Panel_Editor,0,0,WW,WH)
ResetList(ListEditor())
ForEach ListEditor()
ResizeGadget(ListEditor()\Num_Gadget,0,0,WW - 4,WH - GetGadgetAttribute(#Panel_Editor, #PB_Panel_TabHeight) - 2)
Next
Case #WM_MENUSELECT
If lParam = GetMenu_(WindowID)
Select LOWORD(wParam)
Case 0
StatusBarText(#StatusBar_Win_0,0,"Menu Fichier")
Case 1
StatusBarText(#StatusBar_Win_0,0,"Menu Edition")
Case 2
StatusBarText(#StatusBar_Win_0,0,"Menu Aide")
EndSelect
Else
Select LOWORD(wParam)
Case 0
StatusBarText(#StatusBar_Win_0,0,"Nouveau script")
Case 1
StatusBarText(#StatusBar_Win_0,0,"Ouvrir un script...")
Case 2
StatusBarText(#StatusBar_Win_0,0,"Enregistrer le script")
Case 3
StatusBarText(#StatusBar_Win_0,0,"Enregistrer le script sous...")
Case 4
StatusBarText(#StatusBar_Win_0,0,"Quitter WinGS")
Case 5
StatusBarText(#StatusBar_Win_0,0,"Aide...")
Case 6
StatusBarText(#StatusBar_Win_0,0,"A propos de...")
EndSelect
EndIf
Case #WM_EXITMENULOOP
Position = GetGadgetState(#Panel_Editor)
SelectElement(ListEditor(),Position)
Status_Bar()
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
Procedure Windows_About()
If OpenWindow(#Win_About,10,10,205,140,"About GScript Editor",#PB_Window_SystemMenu|#PB_Window_WindowCentered,WindowID(#Win_0))
If CreateGadgetList(WindowID(#Win_About))
;on récupère le handle de l'icône de la fenêtre de l'application avec
;GetClassLong_(WindowID(#Window), #GCL_HICON)
;Merci à Gnozal :)
ImageGadget(1000,5,5,32,32,GetClassLong_(WindowID(#Win_0), #GCL_HICON))
TextGadget(1001,40,5,105,18,#GS_TITLE)
SetGadgetFont(1001, Font_About)
TextGadget(1002,40,22,105,18,#GS_VERSION)
SetGadgetFont(1002, Font_About)
TextGadget(1003,40,59,195,36,"©2007 by Nicolas DJUROVIC")
SetGadgetFont(1003, Font_About)
TextGadget(1004,75,74,195,36,"aka "+Chr(34)+"Flaith"+Chr(34))
SetGadgetFont(1003, Font_About)
ButtonGadget(1005,70,114,60,18,"Ok")
SetGadgetFont(1004, Font_About)
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
aboutquit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case 1005
aboutquit = 1
EndSelect
EndSelect
Until aboutquit = 1
CloseWindow(#Win_About)
EndIf
EndProcedure
Procedure CreateEditor()
AddElement(ListEditor())
Gadget_Editor + 1
Num_Editor + 1
ListEditor()\Num_Gadget = Gadget_Editor
ListEditor()\Num = Num_Editor
Untitled$ = "<untitled"+RSet(Str(ListEditor()\Num),2,"0")+".gs>"
Directory$ = GetCurrentDirectory()
ListEditor()\Filename = Untitled$
ListEditor()\Repertoire = Directory$
; Debug ListEditor()\Num
; Debug ListEditor()\Num_Gadget
AddGadgetItem(#Panel_Editor, -1, ListEditor()\Filename)
hEdit = EditorGadget(ListEditor()\Num_Gadget, 0, 0, WindowWidth(#Win_0) - 4, WindowHeight(#Win_0) - StatusBarHeight(#StatusBar_Win_0) - MenuHeight() - GetGadgetAttribute(#Panel_Editor, #PB_Panel_TabHeight) - 2)
SetGadgetColor(ListEditor()\Num_Gadget, #PB_Gadget_FrontColor, $FFFFFF)
SetGadgetColor(ListEditor()\Num_Gadget, #PB_Gadget_BackColor, RGB(50,50,50))
SetGadgetFont(ListEditor()\Num_Gadget, Font_Editor)
SetActiveGadget(ListEditor()\Num_Gadget)
SetGadgetState(#Panel_Editor,ListEditor()\Num-1)
Status_Bar()
EndProcedure
Procedure Create_PopUP_Menu()
If CreatePopupMenu(#Menu_PopUP)
MenuItem(#Menu_Couper, "Couper"+Chr(9)+"Ctrl-X")
MenuItem(#Menu_Copier, "Copier"+Chr(9)+"Ctrl-C")
MenuItem(#Menu_Coller, "Coller"+Chr(9)+"Ctrl-V")
MenuBar()
MenuItem(#Menu_Select_All, "Sélectionner tout"+Chr(9)+"Ctrl-A")
MenuBar()
MenuItem(#Menu_Printer, "Configuration de l'impression... ")
; MenuItem(#Menu_Apercu, "Apercu avant impression")
MenuItem(#Menu_Imprimer, "Imprimer"+Chr(9)+"Ctrl-P")
MenuBar()
MenuItem(#Menu_Fermer, "Fermer"+Chr(9)+"Ctrl-W")
EndIf
EndProcedure
Procedure OpenWindow_Win_0()
If OpenWindow(#Win_0, 0, 0, 800, 600, "#Win_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered)
If CreateMenu(#Menu_Win_0, WindowID(#Win_0))
MenuTitle("Fichier")
MenuItem(#Menu_Nouveau, "&Nouveau"+Chr(9)+"Ctrl-N")
MenuItem(#Menu_Ouvrir, "&Ouvrir..."+Chr(9)+"Ctrl-O")
MenuItem(#Menu_Sauver, "&Enregistrer"+Chr(9)+"Ctrl-S")
MenuItem(#Menu_Sauver_Sous, "Enregistrer sous...")
MenuItem(#Menu_Sauver_Tout, "Enregistrer tout")
MenuItem(#Menu_Fermer, "Fermer"+Chr(9)+"Ctrl-W")
MenuItem(#Menu_Fermer_Tout, "Fermer tout")
MenuBar()
MenuItem(#Menu_Printer, "Configuration de l'impression... ")
; MenuItem(#Menu_Apercu, "Apercu avant impression")
MenuItem(#Menu_Imprimer, "Imprimer"+Chr(9)+"Ctrl-P")
MenuBar()
MenuItem(#Menu_Quitter, "&Quitter")
MenuTitle("Edition")
MenuItem(#Menu_Couper, "Couper "+Chr(9)+"Ctrl-X")
MenuItem(#Menu_Copier, "Copier"+Chr(9)+"Ctrl-C")
MenuItem(#Menu_Coller, "Coller"+Chr(9)+"Ctrl-V")
MenuBar()
MenuItem(#Menu_Select_All, "Sélectionner tout"+Chr(9)+"Ctrl-A")
MenuTitle("Aide")
MenuItem(#Menu_Aide, "Aide... "+Chr(9)+"F1")
MenuBar()
MenuItem(#Menu_APropos, "A propos de ...")
EndIf
hsb = CreateStatusBar(#StatusBar_Win_0, WindowID(#Win_0))
If hsb
AddStatusBarField(150) ; Fichier en cours
AddStatusBarField(120) ; Ligne/colonne
AddStatusBarField(60) ; Statut (Insertion/Ecrasement)
AddStatusBarField(40) ; Indication si texte modifié ou pas
AddStatusBarField(2000) ; un max pour aller jusqu'au bout
EndIf
If CreateGadgetList(WindowID(#Win_0))
AddKeyboardShortcut(#Win_0, #PB_Shortcut_N | #PB_Shortcut_Control, #Menu_Nouveau)
AddKeyboardShortcut(#Win_0, #PB_Shortcut_O | #PB_Shortcut_Control, #Menu_Ouvrir)
AddKeyboardShortcut(#Win_0, #PB_Shortcut_S | #PB_Shortcut_Control, #Menu_Sauver)
AddKeyboardShortcut(#Win_0, #PB_Shortcut_W | #PB_Shortcut_Control, #Menu_Fermer)
AddKeyboardShortcut(#Win_0, #PB_Shortcut_X | #PB_Shortcut_Control, #Menu_Couper)
AddKeyboardShortcut(#Win_0, #PB_Shortcut_C | #PB_Shortcut_Control, #Menu_Copier)
AddKeyboardShortcut(#Win_0, #PB_Shortcut_V | #PB_Shortcut_Control, #Menu_Coller)
AddKeyboardShortcut(#Win_0, #PB_Shortcut_A | #PB_Shortcut_Control, #Menu_Select_All)
AddKeyboardShortcut(#Win_0, #PB_Shortcut_P | #PB_Shortcut_Control, #Menu_Imprimer)
AddKeyboardShortcut(#Win_0, #PB_Shortcut_F1 , #Menu_Aide)
AddKeyboardShortcut(#Win_0, #PB_Shortcut_F4 | #PB_Shortcut_Alt , #Alt_F4)
PanelGadget(#Panel_Editor, 0, 0, WindowWidth(#Win_0), WindowHeight(#Win_0) - StatusBarHeight(#StatusBar_Win_0) - MenuHeight())
CreateEditor()
CloseGadgetList()
EndIf
EndIf
EndProcedure
; Pris sur la source de l'éditeur de purebasic
Procedure CreateRegistryKeys()
If GetVersion_() & $FF0000 ; Windows NT/XP
If RegCreateKeyEx_(#HKEY_CLASSES_ROOT, "Applications\WinGS.exe\shell\open\command", 0, 0, #REG_OPTION_NON_VOLATILE, #KEY_ALL_ACCESS, 0, @NewKey, @KeyInfo) = #ERROR_SUCCESS
StringBuffer$ = Chr(34)+FullPath+"WinGS.exe"+Chr(34)+" "+Chr(34)+"%1"+Chr(34)
RegSetValueEx_(NewKey, "", 0, #REG_SZ, StringBuffer$, Len(StringBuffer$)+1)
RegCloseKey_(NewKey)
EndIf
If RegCreateKeyEx_(#HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.gs", 0, 0, #REG_OPTION_NON_VOLATILE, #KEY_ALL_ACCESS, 0, @NewKey, @KeyInfo) = #ERROR_SUCCESS
RegSetValueEx_(NewKey, "Application", 0, #REG_SZ, "WinGS.exe", Len("WinGS.exe")+1)
RegCloseKey_(NewKey)
EndIf
If RegCreateKeyEx_(#HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.gsi", 0, 0, #REG_OPTION_NON_VOLATILE, #KEY_ALL_ACCESS, 0, @NewKey, @KeyInfo) = #ERROR_SUCCESS
RegSetValueEx_(NewKey, "Application", 0, #REG_SZ, "WinGS.exe", Len("WinGS.exe")+1)
RegCloseKey_(NewKey)
EndIf
Else ; The same for Win9x
If RegCreateKeyEx_(#HKEY_LOCAL_MACHINE, "Software\Classes\WinGS.exe\shell\open\command", 0, 0, #REG_OPTION_NON_VOLATILE, #KEY_ALL_ACCESS, 0, @NewKey, @KeyInfo) = #ERROR_SUCCESS
StringBuffer$ = Chr(34)+FullPath+"WinGS.exe"+Chr(34)+" "+Chr(34)+"%1"+Chr(34)
RegSetValueEx_(NewKey, "", 0, #REG_SZ, StringBuffer$, Len(StringBuffer$)+1)
RegCloseKey_(NewKey)
EndIf
If RegCreateKeyEx_(#HKEY_LOCAL_MACHINE, "Software\CLASSES\.gs", 0, 0, #REG_OPTION_NON_VOLATILE, #KEY_ALL_ACCESS, 0, @NewKey, @KeyInfo) = #ERROR_SUCCESS
RegSetValueEx_(NewKey, "", 0, #REG_SZ, "WinGS.exe", Len("WinGS.exe")+1)
RegCloseKey_(NewKey)
EndIf
If RegCreateKeyEx_(#HKEY_LOCAL_MACHINE, "Software\CLASSES\.gsi", 0, 0, #REG_OPTION_NON_VOLATILE, #KEY_ALL_ACCESS, 0, @NewKey, @KeyInfo) = #ERROR_SUCCESS
RegSetValueEx_(NewKey, "", 0, #REG_SZ, "WinGS.exe", Len("WinGS.exe")+1)
RegCloseKey_(NewKey)
EndIf
EndIf
EndProcedure
Procedure Init()
Gadget_Editor = 5000
Num_Editor = 0
FullPath = Space(1000)
GetModuleFileName_(GetModuleHandle_(0), @FullPath, 1000)
FullPath = GetPathPart(FullPath)
CreateRegistryKeys()
If CreateFile(#TMP_FILE,#GS_TMP_FILENAME)
OpenWindow_Win_0()
Create_PopUP_Menu()
SmartWindowRefresh(#Win_0, #False)
PrintDlg\hDevMode = 0
PrintDlg\hDevNames = 0
PrintDlg\lStructSize = SizeOf(PRINTDLG)
PrintDlg\Flags = #PD_ALLPAGES
SetWindowTitle(#Win_0,#GS_TITLE)
StatusBarText(#StatusBar_Win_0,0,"")
StatusBarText(#StatusBar_Win_0,4,#GS_VERSION)
SetWindowCallback(@CallBack())
Else
MessageRequester("ERROR","Impossible de créer un fichier temporaire !")
EndIf
EndProcedure
Procedure CheckParam()
If CountProgramParameters() > 0
The_File_To_Load = ProgramParameter()
Open_ReadFile(The_File_To_Load)
EndIf
EndProcedure
Procedure LoadTMPFile()
Protected a.l, b.l, c.s, d.s
If ReadFile(#TMP_FILE,#GS_TMP_FILENAME)
While Eof(#TMP_FILE) = 0
a = ReadLong(#TMP_FILE)
b = ReadLong(#TMP_FILE)
c = ReadString(#TMP_FILE)
d = ReadString(#TMP_FILE)
AddElement(ListEditor())
ListEditor()\Num_Gadget = a
ListEditor()\Num = b
ListEditor()\Filename = c
ListEditor()\Repertoire = d
Wend
EndIf
EndProcedure
Procedure Quit()
GlobalFree_(PrintDlg\hDevNames)
; CreateFile(#TMP_FILE,#GS_TMP_FILENAME) ;Efface les données
CloseFile(#TMP_FILE)
; DeleteFile(#GS_TMP_FILENAME)
End
EndProcedure
;***************************************************
; #MUTEX_ALL_ACCESS = $1F0001
;
; Hmutex = OpenMutex_(#MUTEX_ALL_ACCESS,#False,Application)
; If Hmutex=0
; ;Si le mutex existe alors l'application est déjà lancée.
; ;sinon on le crée
; Hmutex = CreateMutex_(#Null, #True, Application)
; If Hmutex=0
; ;Fin du programme mutex non créer
; End
; EndIf
; Else
; ;On recherche l'application
; ;pour la mettre au premier plan.
; Handle=FindWindow_(#Null, Application)
; ShowWindow_(Handle,#SW_HIDE)
; ShowWindow_(Handle,#SW_MINIMIZE)
; ShowWindow_(Handle,#SW_RESTORE)
; End
; EndIf
;***************************************************
;l'application est lancée (= 1)
; If AppRunning(Application) = 1
; Handle=FindWindow_(#Null, Application)
; ; ShowWindow_(Handle,#SW_HIDE)
; ; ShowWindow_(Handle,#SW_MINIMIZE)
; ShowWindow_(Handle,#SW_RESTORE)
; ShowWindow_(Handle,#SW_MAXIMIZE)
; ShowWindow_(Handle,#SW_SHOW)
; MessageRequester("","Handle = "+Str(Handle))
; ; CheckParam()
; End
; Else
; Init()
; CheckParam()
; EndIf
;***************************************************
OnErrorGoto(?ShowError)
#MUTEX_ALL_ACCESS = $1F0001
Hmutex = OpenMutex_(#MUTEX_ALL_ACCESS,#False,#GS_TITLE)
If Hmutex > 0
;On recherche l'application
;pour la mettre au premier plan.
Handle=FindWindow_(#Null, #GS_TITLE)
ShowWindow_(Handle,#SW_HIDE)
ShowWindow_(Handle,#SW_MINIMIZE)
ShowWindow_(Handle,#SW_RESTORE)
LoadTMPFile()
CheckParam()
End
Else
;Si le mutex existe alors l'application est déjà lancée.
;sinon on le crée
Hmutex = CreateMutex_(#Null, #True, #GS_TITLE) ;Application)
If Hmutex=0
;Fin du programme mutex non créé
End
EndIf
Init()
CheckParam()
EndIf
; Event loop
Repeat
; Affiche ligne et position dans le fichier
; A MODIFIER : Le hEdit qui ne fonctionne que sur le
; dernier fichier ouvert, donc créer une liste
ExSel.CHARRANGE
PosY = SendMessage_(hEdit, #EM_LINEFROMCHAR, -1,0)
SendMessage_(hEdit, #EM_EXGETSEL, 0, @ExSel)
PosX = ExSel\cpMin - PosY
NbCar = ExSel\cpMin
StatusBarText(#StatusBar_Win_0,1,"Lig: "+Str(PosY+1)+" Pos: "+Str(PosX+1), #PB_StatusBar_Center)
Event = WaitWindowEvent()
Select Event
; ///////////////////
Case #WM_RBUTTONDOWN
DisplayPopupMenu(#Menu_PopUP, WindowID(#Win_0))
Case #PB_Event_Gadget
EventGadget = EventGadget()
EventType = EventType()
Select EventGadget
Case #Editor
Case #Panel_Editor
Position = GetGadgetState(#Panel_Editor)
SelectElement(ListEditor(),Position)
Status_Bar()
SetActiveGadget(ListEditor()\Num_Gadget)
EndSelect
; ///////////////
Case #PB_Event_Menu
EventMenu = EventMenu()
Select EventMenu
Case #Menu_Nouveau
CreateEditor()
Case #Menu_Ouvrir
Open_ReadFile()
Case #Menu_Sauver
Case #Menu_Sauver_Tout
Case #Menu_Fermer
Case #Menu_Fermer_Tout
Case #Menu_Printer
If PrintDlg_(PrintDlg) <> #False
*DEVNAMES.DEVNAMES = GlobalLock_(PrintDlg\hDevNames)
; PrinterDeviceName$ = PeekS(*DEVNAMES + *DEVNAMES\wDeviceOffset)
; Debug "Printer Device Name = " + PrinterDeviceName$
GlobalUnlock_(PrintDlg\hDevNames)
EndIf
; Case #Menu_Apercu
Case #Menu_Imprimer
Case #Menu_Quitter
Quit()
Case #Menu_Couper
Case #Menu_Copier
Case #Menu_Coller
Case #Menu_Select_All
Case #Menu_Aide
; ResetList(ListEditor())
; ForEach ListEditor()
; Debug "-------------------------------------------------"
; Debug "Repertoire du fichier = "+ListEditor()\Repertoire
; Debug " fichier = "+ListEditor()\filename
; Next
Case #Menu_APropos
Windows_About()
EndSelect
; //////////////////////
Case #PB_Event_CloseWindow
EventWindow = EventWindow()
Select EventWindow
Case #Win_0
Quit()
EndSelect
EndSelect
ForEver
End
ShowError:
Reg_EAX$ = "EAX=0x"+RSet( Str(GetErrorRegister(#PB_OnError_EAX)) ,8,"0")+" "
Reg_EBX$ = "EBX=0x"+RSet( Str(GetErrorRegister(#PB_OnError_EBX)) ,8,"0")+" "
Reg_ECX$ = "ECX=0x"+RSet( Str(GetErrorRegister(#PB_OnError_ECX)) ,8,"0")+" "
Reg_EDX$ = "EDX=0x"+RSet( Str(GetErrorRegister(#PB_OnError_EDX)) ,8,"0")+" "
Reg_ESI$ = "ESI=0x"+RSet( Str(GetErrorRegister(#PB_OnError_ESI)) ,8,"0")+#CRLF$
Reg_EDI$ = "EDI=0x"+RSet( Str(GetErrorRegister(#PB_OnError_EDI)) ,8,"0")+" "
Reg_EBP$ = "EBP=0x"+RSet( Str(GetErrorRegister(#PB_OnError_EBP)) ,8,"0")+" "
Reg_ESP$ = "ESP=0x"+RSet( Str(GetErrorRegister(#PB_OnError_ESP)) ,8,"0")+" "
Reg_FFLags$ = "EFL=0x"+RSet( Str(GetErrorRegister(#PB_OnError_FFLags)) ,8,"0")+#CRLF$
Reg_SegCS$ = "CS =0x"+RSet( Str(GetErrorRegister(#PB_OnError_SegCS)) ,4,"0")+" "+#CRLF$
Reg_SegSS$ = "SS =0x"+RSet( Str(GetErrorRegister(#PB_OnError_SegSS)) ,4,"0")+#CRLF$+#CRLF$
err$ = Reg_EAX$+Reg_EBX$+Reg_ECX$+Reg_EDX$+Reg_ESI$+Reg_EDI$
err$ + Reg_EBP$+Reg_ESP$+Reg_FFLags$+Reg_SegCS$+Reg_SegSS$
OpenConsole()
_BEEP()
PrintN("Error line : "+Str(GetErrorLineNR())+#CRLF$+GetErrorDescription()+#CRLF$)
PrintN(err$)
Print("Press Enter :") : Input()
;MessageRequester("Error",err$+#CRLF$+"Erreur ligne : "+Str(GetErrorLineNR())+" => "+GetErrorDescription())
CloseConsole()
End
et les fichiers .gs ici aussi : http://flaith.free.fr/pb/
La compilation s'effectue avec l'option "Activer le numéro de ligne pour 'OnError'"
message d'erreur dès test ouverture du second fichier :
voilouError line : 156
An attemped read or write to/from an address to which that process isn't allowed
