Appli "freez" + Editor
Appli "freez" + Editor
Bonjour
J effectue un long traitement et durant ce temps, impossible de déplacer, cliquer ou d effectuer toute autre action sur le form.
Est il possible de l en empêcher ?
Par ailleurs, les affichages de très longues séries de textes provoquent le même problème dans l affichage dans un Editor. Il affiche les premières lignes (il est rempli) et freeze. Aussi, il ne scroll pas automatiquement . Y a t il un moyen de voir l affichage 'normalement" je veux dire par là que quand le gadget est rempli il scroll automatiquement ?
J'ai cherché dans l aide (peut être mal) mais je n ai pas trouvé.
J ai cherché sur internet et ai vu qu il s agissait de messages windows alors j ai cherché dans l aide rien trouvé non plus. Peut etre avec WindowEvent() mais bien qu ayant lu l aide, je n y ai pas trouvé mon bonheur...
Vos conseils sont les bienvenus
Merci
J effectue un long traitement et durant ce temps, impossible de déplacer, cliquer ou d effectuer toute autre action sur le form.
Est il possible de l en empêcher ?
Par ailleurs, les affichages de très longues séries de textes provoquent le même problème dans l affichage dans un Editor. Il affiche les premières lignes (il est rempli) et freeze. Aussi, il ne scroll pas automatiquement . Y a t il un moyen de voir l affichage 'normalement" je veux dire par là que quand le gadget est rempli il scroll automatiquement ?
J'ai cherché dans l aide (peut être mal) mais je n ai pas trouvé.
J ai cherché sur internet et ai vu qu il s agissait de messages windows alors j ai cherché dans l aide rien trouvé non plus. Peut etre avec WindowEvent() mais bien qu ayant lu l aide, je n y ai pas trouvé mon bonheur...
Vos conseils sont les bienvenus
Merci
Re: Appli "freez" + Editor
Pense à bien désactiver le debugger si tu veux avoir les vraies conditions de travail de ton programme (et si tu n'as pas besoin du debbug pour la partie lourde).
Mais pour les opérations lourdes, tu dois utiliser les Threads qui travailleront en parallèle de ta fenêtre principale.
Regarde l'exemple de threaded, c'est très intéressant. Tu as d'autres exemple sur le forum très bien fait.
Tout comme CreateThread avec les mots clés associés : Semaphore, Mutex
Bon là on est plus dans la prog de jojo la bidouille.
Fais attention avec les Thread, c'est délicat.
Note : Code est à compiler avec l'option Thread dans les directives de compilation si tu les utilises
Code : Tout sélectionner
Disabledebbuger
gros traitement
enabledebugger
Regarde l'exemple de threaded, c'est très intéressant. Tu as d'autres exemple sur le forum très bien fait.
Tout comme CreateThread avec les mots clés associés : Semaphore, Mutex
Bon là on est plus dans la prog de jojo la bidouille.

Fais attention avec les Thread, c'est délicat.
Note : Code est à compiler avec l'option Thread dans les directives de compilation si tu les utilises
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Appli "freez" + Editor
Un petit coup d'oeil aussi sur d'autres sites :
Speeder un chargement lourd sur une ListIconGadget()
Speeder un chargement lourd sur une ListIconGadget()
Re: Appli "freez" + Editor
Merci, je vais m intéresser à ça d autant que je n ai pas l usage du debugger dans cette partie du code et que c est vrai, on peut charger les données au fur et à mesure. J y avais pas pensé...
Par contre, l un d entre vous pourrait il me dire quelle est la propriété ou directive qui permet de faire que quand le texte s affiche dans un Editor, celui-ci scroll automatiquement une fois rempli. Je pensais que cela était automatique avec Wordwrap mais ce n est pas le cas et je n ai pas trouvé

Par contre, l un d entre vous pourrait il me dire quelle est la propriété ou directive qui permet de faire que quand le texte s affiche dans un Editor, celui-ci scroll automatiquement une fois rempli. Je pensais que cela était automatique avec Wordwrap mais ce n est pas le cas et je n ai pas trouvé
Re: Appli "freez" + Editor
Salut Stéphane,
Si WordWrap est la bonne solution pour passer a la ligne automatiquement
un exemple :
@++
Si WordWrap est la bonne solution pour passer a la ligne automatiquement

un exemple :
Code : Tout sélectionner
If OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(8, 8, 8, 306, 133, #PB_Editor_WordWrap)
AddGadgetItem(8, 0, "PureBasic possède un jeu de commandes étendues (plus de 1 400 commandes internes) auxquelles s'ajoute un accès simplifié à une grande partie de l'API du système d'exploitation. Le programmeur peut appeler les commandes de l'API de Windows, de Linux ou Mac OS directement comme s'il s'agissait des commandes internes à PureBasic, sans avoir à les déclarer au préalable (ainsi que les constantes). Rien de mieux qu'un exemple pratique pour illustrer ceci. Comparons un programme simple en Visual Basic avec son équivalent en PureBasic : comment obtenir le chemin du répertoire Windows. ")
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
@++
Dernière modification par venom le jeu. 30/avr./2020 6:00, modifié 1 fois.
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Re: Appli "freez" + Editor
Merci mais je me suis peut être mal expliqué ou j ai raté un truc.
Si je fais une boucle de 1000 et que j affiche mon texte avec AddGadgetItem(editor,-1,text...) et que mon editor a une hauteur qui permet d afficher seulement 100 lignes, j aurais les 100 premières lignes visibles alors que toutes seront bien affichées mais il faut que j utilise l ascenceur pour descendre jusqu'à la dernière ligne.
Ce que je souhaiterais c est voir de 0 à 99, de 1 à 100, de 2 à 101... le texte défiler verticalement de manière automatique en fait
Si je fais une boucle de 1000 et que j affiche mon texte avec AddGadgetItem(editor,-1,text...) et que mon editor a une hauteur qui permet d afficher seulement 100 lignes, j aurais les 100 premières lignes visibles alors que toutes seront bien affichées mais il faut que j utilise l ascenceur pour descendre jusqu'à la dernière ligne.
Ce que je souhaiterais c est voir de 0 à 99, de 1 à 100, de 2 à 101... le texte défiler verticalement de manière automatique en fait
Re: Appli "freez" + Editor
C'est la fonction de défilement ('scrolling') des gadgets.Stéphane a écrit :Ce que je souhaiterais c est voir de 0 à 99, de 1 à 100, de 2 à 101... le texte défiler verticalement de manière automatique en fait
Elle n'existe pas nativement, mais tu as quelques solutions via les API
Exemples
https://www.purebasic.fr/english/viewtopic.php?t=18258
http://forums.purebasic.com/english/vie ... 13&t=70635

Re: Appli "freez" + Editor
Pourquoi ne fais-tu pas 30 et 23.15 sont a déterminer, car ils dépendent de la taille de la police utilisée, #Gadget est le nom de ton gadget.
Code : Tout sélectionner
ResizeGadget(#Gadget, #PB_Ignore, #PB_Ignore, #PB_Ignore, 30+CountGadgetItems(#Gadget)*23.15
Dernière modification par Micoute le jeu. 30/avr./2020 8:35, modifié 1 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Appli "freez" + Editor
Faire défiler des lignes dans un EditorGadgetCe que je souhaiterais c est voir de 0 à 99, de 1 à 100, de 2 à 101... le texte défiler verticalement de manière automatique en fait
Code : Tout sélectionner
; Faire défiler des lignes automatiquement dans un EditorGadget
; Basé sur un code de Srod
; https://www.purebasic.fr/english/viewtopic.php?p=115944#p115944
; Nécessite une version de PB enregistrée (API)
; Windows only
OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(0, 8, 8, 306, 133)
For a = 0 To 50
AddGadgetItem(0, a, "Ligne "+Str(a))
Next
For i = 1 To 5
SendMessage_(GadgetID(0), #EM_LINESCROLL, 0, 10)
SetWindowTitle(0, "Ligne: " + Str(i * 10) + " à... ")
Delay(1000)
Next
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
(option: sélectionner des caractères)
Code : Tout sélectionner
; Positionner le curseur dans un EditorGadget
; Basé sur un code de Srod
; https://www.purebasic.fr/english/viewtopic.php?p=115944#p115944
; Nécessite une version de PB enregistrée (API)
; Windows only
OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(0, 8, 8, 306, 133)
For a = 0 To 500
AddGadgetItem(0, a, "Ligne "+Str(a))
Next
; Positionner après le 50 ième caractère
; (avec 2 nombres différents on peut sélectionner des caractères)
SendMessage_(GadgetID(0), #EM_SETSEL, 150, 150)
; Pause 3 secs le temps de voir
Delay(3000)
; Positionner après le dernier caractère
SendMessage_(GadgetID(0), #EM_SETSEL, -1, -1)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

Re: Appli "freez" + Editor
Merci pour vos réponses, j ai tout ce qu il me faut.
Re: Appli "freez" + Editor
Après avoir farfouillé dans l'API, j'ai réalisé ce petit truc qui permet de faire défiler page/page avec les touches PgUp et PgDn (ça existe surement déjà sur le forum)
Le défilement se fait toujours par page même si on change la taille de la fenêtre.
Version un peu plus élaborée
Le défilement se fait page /page même si on ajoute/supprime des lignes
(on peut bloquer en lecture seule avec #PB_Editor_ReadOnly)
Du code facile à maintenir (pas d'ID numérique et obligation de déclarer les type de variables (EnableExplicit))

Le défilement se fait toujours par page même si on change la taille de la fenêtre.
Code : Tout sélectionner
; Faire défiler un EditorGadget page par page
; Basé sur un code de Srod
; https://www.purebasic.fr/english/viewtopic.php?p=115944#p115944
; et sur l'API
; EM_SCROLL message
; https://docs.microsoft.com/en-us/windows/win32/controls/em-scroll
; Nécessite une version de PB enregistrée (API)
; Windows only
EnableExplicit
Enumeration
#Win
#Edt
#Pg_Up
#Pg_Dn
EndEnumeration
OpenWindow(#Win, 0, 0, 322, 150, "Page Up / Page Down",
#PB_Window_SystemMenu |
#PB_Window_ScreenCentered |
#PB_Window_SizeGadget)
EditorGadget(#Edt, 8, 8, 306, 133)
; Raccourcis clavier
AddKeyboardShortcut(#Win, #PB_Shortcut_PageUp, 1)
AddKeyboardShortcut(#Win, #PB_Shortcut_PageDown, 2)
; Remplissage pour exemple
Define a.a
For a = 0 To 50
AddGadgetItem(#Edt, a, "Ligne "+Str(a))
Next
; Redimensionne l'éditeur selon la taille de la fenêtre
Procedure Resize_Window()
ResizeGadget(#Edt, 8, 8, WindowWidth(#Win) - 16, WindowHeight(#Win) - 16)
EndProcedure
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_SizeWindow
Resize_Window()
Case #PB_Event_Menu
Select EventMenu()
Case 1
SendMessage_(GadgetID(#Edt),
#WM_VSCROLL , #SB_PAGEUP, 0)
Case 2
SendMessage_(GadgetID(#Edt),
#WM_VSCROLL, #SB_PAGEDOWN, 0)
EndSelect
EndSelect
ForEver
End
Code : Tout sélectionner
; Faire défiler un EditorGadget page par page
; Basé sur un code de Srod
; https://www.purebasic.fr/english/viewtopic.php?p=115944#p115944
; et sur l'API
; EM_SCROLL message
; https://docs.microsoft.com/en-us/windows/win32/controls/em-scroll
; Nécessite une version de PB enregistrée (API)
; Windows only
EnableExplicit
Enumeration
#Win
#Edt
#Pg_Up
#Pg_Dn
#Btn_First
#Btn_Up
#Btn_Dn
#Btn_Last
#Stb
EndEnumeration
OpenWindow(#Win, 0, 0, 450, 250, "Page Up / Page Down",
#PB_Window_SystemMenu |
#PB_Window_ScreenCentered |
#PB_Window_SizeGadget)
EditorGadget(#Edt, 8, 38, WindowWidth(#Win) - 16, WindowHeight(#Win) - 68)
ButtonGadget(#Btn_First, 8, 8, 100, 25, "Première Ligne")
ButtonGadget(#Btn_Up, 110, 8, 100, 25, "Page Précédente")
ButtonGadget(#Btn_Dn, 212, 8, 100, 25, "Page Suivante")
ButtonGadget(#Btn_Last, 314, 8, 100, 25, "Dernière Ligne")
; Statusbar pour afficher des infos (et montrer le grip)
CreateStatusBar(#Stb, WindowID(#Win))
AddStatusBarField(#PB_Ignore)
; Raccourcis clavier
AddKeyboardShortcut(#Win, #PB_Shortcut_PageUp, 1)
AddKeyboardShortcut(#Win, #PB_Shortcut_PageDown, 2)
; Remplissage pour exemple
Define a.a
For a = 0 To 100
AddGadgetItem(#Edt, a, "Ligne "+Str(a))
Next
; Redimensionne l'éditeur selon la taille de la fenêtre
Procedure Resize_Window()
ResizeGadget(#Edt, #PB_Ignore, #PB_Ignore, WindowWidth(#Win) - 16, WindowHeight(#Win) - 68)
EndProcedure
Procedure Scroll_Page(Direction.c)
Select Direction
Case 1
SendMessage_(GadgetID(#Edt),
#WM_VSCROLL , #SB_PAGEUP, 0)
Case 2
SendMessage_(GadgetID(#Edt),
#WM_VSCROLL, #SB_PAGEDOWN, 0)
Case 3
SendMessage_(GadgetID(#Edt),
#EM_SETSEL, 0, 0)
Case 4
SendMessage_(GadgetID(#Edt),
#EM_SETSEL, -1, -1)
EndSelect
EndProcedure
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_SizeWindow
Resize_Window()
Case #PB_Event_Gadget
Select EventGadget()
Case #Btn_Up
Scroll_Page(1)
Case #Btn_Dn
Scroll_Page(2)
Case #Btn_First
Scroll_Page(3)
Case #Btn_Last
Scroll_Page(4)
EndSelect
Case #PB_Event_Menu ; (raccourcis clavier)
Select EventMenu()
Case 1
Scroll_Page(1)
Case 2
Scroll_Page(2)
EndSelect
EndSelect
ForEver
End
(on peut bloquer en lecture seule avec #PB_Editor_ReadOnly)

