Je voudrais créer un logiciel pour prendre des notes
Je voudrais créer un logiciel pour prendre des notes
Bonsoir à tous,
je souhaite faire un logiciel pour prendre toutes sortes de notes, avec comme gadgets principaux un TreeGadget , un EditorGadget et un SplitterGadget, mais le comportement de ce dernier me cause des problèmes quand je veux redimensionner la fenêtre principale, peut-être devrais-je utiliser un container et adapter mes deux gadgets aux dimensions de ce container ?
Je souhaiterais aussi, mais je n'en suis pas encore là que le TreeGadget sélectionne une note dans l'EditorGadget quand on clique sur son titre.
Ne voyant pas la solution, je me suis permis de solliciter vos aide judicieuse et je vous remercie à l'avance pour votre soutient.
je souhaite faire un logiciel pour prendre toutes sortes de notes, avec comme gadgets principaux un TreeGadget , un EditorGadget et un SplitterGadget, mais le comportement de ce dernier me cause des problèmes quand je veux redimensionner la fenêtre principale, peut-être devrais-je utiliser un container et adapter mes deux gadgets aux dimensions de ce container ?
Je souhaiterais aussi, mais je n'en suis pas encore là que le TreeGadget sélectionne une note dans l'EditorGadget quand on clique sur son titre.
Ne voyant pas la solution, je me suis permis de solliciter vos aide judicieuse et je vous remercie à l'avance pour votre soutient.
Dernière modification par Micoute le sam. 01/oct./2016 10:22, 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: Je voudrais marier un TreeGadget avec un EditorGadget
Avec le VD tu fais ça en moins d'une minute.
Splitter.pbf (aucune modification manuelle n'a été effectuée)
Il ne te reste plus qu'à créer le code principal.
Splitter.pb
(et encore, on peut simplifier et laisser le VD générer la procédure d’évènement principale de chaque gadget)

- Créé les deux gadgets (tree et editor)
- Ancres-les (gauche haut et bas pour le tree, droite, haut et bas pour l'editeur)
- Entoure le tout avec le splitter
- Sélectionne les deux gadgets dans la fenêtre qui s'ouvre alors.
- Change l'orientation du splitter (coche vertical dans les options)
- Quand tu coche le type de fenêtre (#PB_Window_SizeGadget) le VD créé tout seul la procédure de resize
Splitter.pbf (aucune modification manuelle n'a été effectuée)
Code : Tout sélectionner
;
; This code is automatically generated by the FormDesigner.
; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled.
; Event procedures needs to be put in another source file.
;
Enumeration FormWindow
#Window_0
EndEnumeration
Enumeration FormGadget
#Tree_0
#Editor_0
#Splitter_0
#Btn_Quit
EndEnumeration
Declare ResizeGadgetsWindow_0()
Procedure OpenWindow_0(x = 0, y = 0, width = 600, height = 400)
OpenWindow(#Window_0, x, y, width, height, "", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
TreeGadget(#Tree_0, 10, 15, 177, 340)
EditorGadget(#Editor_0, 196, 15, 394, 340)
SplitterGadget(#Splitter_0, 10, 15, 580, 340, #Tree_0, #Editor_0, #PB_Splitter_Vertical)
SetGadgetState(#Splitter_0, 177)
ButtonGadget(#Btn_Quit, 485, 365, 100, 25, "Quitter")
EndProcedure
Procedure ResizeGadgetsWindow_0()
Protected FormWindowWidth, FormWindowHeight
FormWindowWidth = WindowWidth(#Window_0)
FormWindowHeight = WindowHeight(#Window_0)
ResizeGadget(#Tree_0, 10, 15, 177, FormWindowHeight - 60)
ResizeGadget(#Editor_0, FormWindowWidth - 404, 15, 394, FormWindowHeight - 60)
ResizeGadget(#Splitter_0, 10, 15, FormWindowWidth - 20, FormWindowHeight - 60)
ResizeGadget(#Btn_Quit, GadgetWidth(#Splitter_0) - 95, GadgetHeight(#Splitter_0) - -25, 100, 25)
EndProcedure
Splitter.pb
Code : Tout sélectionner
XIncludeFile "Splitter.pbf"
OpenWindow_0()
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case #Btn_Quit
Break
EndSelect
Case #PB_Event_SizeWindow
ResizeGadgetsWindow_0()
EndSelect
ForEver

Re: Je voudrais marier un TreeGadget avec un EditorGadget
C'est plus facile à faire en remplaçant l'EditorGadget par le ListViewGadget.
Sinon avec l'EditorGadget, il faut utiliser les apis.
J'ai mis les deux codes, ci-dessous.
ListViewGadget
EditorGadget
Mesa.
Sinon avec l'EditorGadget, il faut utiliser les apis.
J'ai mis les deux codes, ci-dessous.
ListViewGadget
Code : Tout sélectionner
;
; This code is automatically generated by the FormDesigner.
; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled.
; Event procedures needs to be put in another source file.
;
Enumeration FormWindow
#Window_0
EndEnumeration
Enumeration FormGadget
#Tree_0
#Editor_0
#Splitter_0
#Btn_Quit
EndEnumeration
Declare ResizeGadgetsWindow_0()
Procedure OpenWindow_0(x = 0, y = 0, width = 600, height = 400)
OpenWindow(#Window_0, x, y, width, height, "", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
TreeGadget(#Tree_0, 10, 15, 177, 340)
ListViewGadget(#Editor_0, 196, 15, 394, 340);EditorGadget(#Editor_0, 196, 15, 394, 340)
SplitterGadget(#Splitter_0, 10, 15, 580, 340, #Tree_0, #Editor_0, #PB_Splitter_Vertical)
SetGadgetState(#Splitter_0, 177)
ButtonGadget(#Btn_Quit, 485, 365, 100, 25, "Quitter")
EndProcedure
Procedure ResizeGadgetsWindow_0()
Protected FormWindowWidth, FormWindowHeight
FormWindowWidth = WindowWidth(#Window_0)
FormWindowHeight = WindowHeight(#Window_0)
ResizeGadget(#Tree_0, 10, 15, 177, FormWindowHeight - 60)
ResizeGadget(#Editor_0, FormWindowWidth - 404, 15, 394, FormWindowHeight - 60)
ResizeGadget(#Splitter_0, 10, 15, FormWindowWidth - 20, FormWindowHeight - 60)
ResizeGadget(#Btn_Quit, GadgetWidth(#Splitter_0) - 95, GadgetHeight(#Splitter_0) - -25, 100, 25)
EndProcedure
;XIncludeFile "Splitter.pbf"
OpenWindow_0()
For ID = #Tree_0 To #Editor_0
For a = 0 To 10
AddGadgetItem(ID, -1, "Elément normal "+Str(a), 0, 0) ; si vous souhaitez ajouter une image, utilisez
AddGadgetItem(ID, -1, "Noeud "+Str(a), 0, 0) ; ImageID(x) comme 4ème paramètre
AddGadgetItem(ID, -1, "Sous-élément " + Str(a) + "-1", 0, 1) ; Ceux-là sont au premier sous-niveau
AddGadgetItem(ID, -1, "Sous-élément " + Str(a) + "-2", 0, 1)
AddGadgetItem(ID, -1, "Sous-élément " + Str(a) + "-3", 0, 1)
AddGadgetItem(ID, -1, "Sous-élément " + Str(a) + "-4", 0, 1)
AddGadgetItem(ID, -1, "Fichier "+Str(a), 0, 0) ; sous-niveau 0 à nouveau
Next
Next
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case #Btn_Quit
Break
Case #Tree_0
Select EventType()
Case #PB_EventType_Change
texte$= GetGadgetText(#Tree_0)
;Debug texte$
For i=0 To CountGadgetItems(#Editor_0) - 1
If texte$=GetGadgetItemText(#Editor_0,i)
SetGadgetState(#Editor_0, i)
Break
EndIf
Next i
EndSelect
EndSelect
Case #PB_Event_SizeWindow
ResizeGadgetsWindow_0()
EndSelect
ForEver
Code : Tout sélectionner
CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
CompilerIf #PB_Compiler_Version < 500 Or (#PB_Compiler_Version >= 500 And Subsystem("Carbon"))
ImportC ""
GetControlProperty(ControlRef.L, PropertyCreator.L, PropertyTag.L, BufferSize.L, *ActualSize, *PropertyBuffer)
TXNSetSelection(TXNObject.L, StartOffset.L, EndOffset.L)
TXNShowSelection(TXNObject.L, ShowEnd.L)
EndImport
CompilerEndIf
CompilerEndIf
Procedure SelectEditorLine(EditorID.I, LineNumber.I)
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
Protected EndOfLine.GtkTextIter
Protected StartOfLine.GtkTextIter
Protected *TextBuffer.GtkTextBuffer
*TextBuffer = gtk_text_view_get_buffer_(GadgetID(EditorID))
gtk_text_buffer_get_iter_at_line_(*TextBuffer, @StartOfLine, LineNumber)
gtk_text_view_scroll_to_iter_(GadgetID(EditorID), StartOfLine, 0.0, #False, 0.0, 0.0)
EndOfLine = StartOfLine
gtk_text_iter_forward_to_line_end_(EndOfLine)
gtk_text_buffer_select_range_(*TextBuffer, StartOfLine, EndOfLine)
CompilerCase #PB_OS_MacOS
CompilerIf #PB_Compiler_Version < 470 Or (#PB_Compiler_Version >= 500 And Subsystem("Carbon"))
Protected EndOfLine.L
Protected StartOfLine.L
Protected TXNObject.L
If GetControlProperty(GadgetID(EditorID), $50555245, $54584F42, 4, 0, @TXNObject) = 0
StartOfLine = FindString(GetGadgetText(EditorID), GetGadgetItemText(EditorID, LineNumber)) - 1
EndOfLine = StartOfLine + Len(GetGadgetItemText(EditorID, LineNumber))
TXNSetSelection(TXNObject, StartOfLine, EndOfLine)
TXNShowSelection(TXNObject, #True)
EndIf
CompilerElse
Protected Range.NSRange
Range\location = FindString(GetGadgetText(EditorID), GetGadgetItemText(EditorID, LineNumber)) - 1
Range\length = Len(GetGadgetItemText(EditorID, LineNumber))
CocoaMessage(0, GadgetID(EditorID), "setSelectedRange:@", @Range)
CocoaMessage(0, GadgetID(EditorID), "scrollRangeToVisible:@", @Range)
CompilerEndIf
CompilerCase #PB_OS_Windows
Protected Selection.CHARRANGE
Protected StartOfLine.I
StartOfLine = SendMessage_(GadgetID(EditorID), #EM_LINEINDEX, LineNumber, 0)
Selection.CHARRANGE\cpMin = StartOfLine
Selection.CHARRANGE\cpMax = StartOfLine + Len(GetGadgetItemText(EditorID, LineNumber)) + 1
SendMessage_(GadgetID(EditorID), #EM_EXSETSEL, 0, @Selection)
CompilerEndSelect
EndProcedure
;
; This code is automatically generated by the FormDesigner.
; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled.
; Event procedures needs to be put in another source file.
;
Enumeration FormWindow
#Window_0
EndEnumeration
Enumeration FormGadget
#Tree_0
#Editor_0
#Splitter_0
#Btn_Quit
EndEnumeration
Declare ResizeGadgetsWindow_0()
Procedure OpenWindow_0(x = 0, y = 0, width = 600, height = 400)
OpenWindow(#Window_0, x, y, width, height, "", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
TreeGadget(#Tree_0, 10, 15, 177, 340)
EditorGadget(#Editor_0, 196, 15, 394, 340)
SplitterGadget(#Splitter_0, 10, 15, 580, 340, #Tree_0, #Editor_0, #PB_Splitter_Vertical)
SetGadgetState(#Splitter_0, 177)
ButtonGadget(#Btn_Quit, 485, 365, 100, 25, "Quitter")
EndProcedure
Procedure ResizeGadgetsWindow_0()
Protected FormWindowWidth, FormWindowHeight
FormWindowWidth = WindowWidth(#Window_0)
FormWindowHeight = WindowHeight(#Window_0)
ResizeGadget(#Tree_0, 10, 15, 177, FormWindowHeight - 60)
ResizeGadget(#Editor_0, FormWindowWidth - 404, 15, 394, FormWindowHeight - 60)
ResizeGadget(#Splitter_0, 10, 15, FormWindowWidth - 20, FormWindowHeight - 60)
ResizeGadget(#Btn_Quit, GadgetWidth(#Splitter_0) - 95, GadgetHeight(#Splitter_0) - -25, 100, 25)
EndProcedure
;XIncludeFile "Splitter.pbf"
OpenWindow_0()
For ID = #Tree_0 To #Editor_0
For a = 0 To 10
AddGadgetItem(ID, -1, "Elément normal "+Str(a), 0, 0) ; si vous souhaitez ajouter une image, utilisez
AddGadgetItem(ID, -1, "Noeud "+Str(a), 0, 0) ; ImageID(x) comme 4ème paramètre
AddGadgetItem(ID, -1, "Sous-élément " + Str(a) + "-1", 0, 1) ; Ceux-là sont au premier sous-niveau
AddGadgetItem(ID, -1, "Sous-élément " + Str(a) + "-2", 0, 1)
AddGadgetItem(ID, -1, "Sous-élément " + Str(a) + "-3", 0, 1)
AddGadgetItem(ID, -1, "Sous-élément " + Str(a) + "-4", 0, 1)
AddGadgetItem(ID, -1, "Fichier "+Str(a), 0, 0) ; sous-niveau 0 à nouveau
Next
Next
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case #Btn_Quit
Break
Case #Tree_0
Select EventType()
Case #PB_EventType_Change
texte$= GetGadgetText(#Tree_0)
;Debug texte$
For i=0 To CountGadgetItems(#Editor_0) - 1
If texte$=GetGadgetItemText(#Editor_0,i)
SelectEditorLine(#Editor_0, i)
Break
EndIf
Next i
EndSelect
EndSelect
Case #PB_Event_SizeWindow
ResizeGadgetsWindow_0()
EndSelect
ForEver
Re: Je voudrais marier un TreeGadget avec un EditorGadget
Merci beaucoup à vous deux, maintenant j'ai compris le principe du splitter et il n'est pas dit que je ne réutilise pas les codes.
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: Je voudrais marier un TreeGadget avec un EditorGadget
Je crois que ce que souhaite Micoute, c'est plus simplement un gestionnaire de notes ? (pas de signets dans la note)
Un truc comme TreePad ?
Splitter.pbf
Splitter.pb
Il ne reste plus qu'à mettre le contenu des EditorGadget dans une base de donnée, ou un fichier json ou des fichiers texte.
Par sécurité, on met un flag à chaque fois que l'utilisateur change le contenu de l'éditeur et on sauve la note au moment ou il change dans le TreeGadget.
(ou alors tout sauvegarder à la fin)
Un truc comme TreePad ?
Splitter.pbf
Code : Tout sélectionner
;
; This code is automatically generated by the FormDesigner.
; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled.
; Event procedures needs to be put in another source file.
;
Enumeration FormWindow
#Window_0
EndEnumeration
Enumeration FormGadget
#Tree_0
#Editor_0
#Splitter_0
#Btn_Quit
EndEnumeration
Declare ResizeGadgetsWindow_0()
Procedure OpenWindow_0(x = 0, y = 0, width = 600, height = 400)
OpenWindow(#Window_0, x, y, width, height, "", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
TreeGadget(#Tree_0, 10, 15, 177, 340)
EditorGadget(#Editor_0, 196, 15, 394, 340)
SplitterGadget(#Splitter_0, 10, 15, 580, 340, #Tree_0, #Editor_0, #PB_Splitter_Vertical)
SetGadgetState(#Splitter_0, 177)
ButtonGadget(#Btn_Quit, 490, 365, 100, 25, "Quitter")
EndProcedure
Procedure ResizeGadgetsWindow_0()
Protected FormWindowWidth, FormWindowHeight
FormWindowWidth = WindowWidth(#Window_0)
FormWindowHeight = WindowHeight(#Window_0)
ResizeGadget(#Tree_0, 10, 15, 177, FormWindowHeight - 60)
ResizeGadget(#Editor_0, FormWindowWidth - 404, 15, 394, FormWindowHeight - 60)
ResizeGadget(#Splitter_0, 10, 15, FormWindowWidth - 20, FormWindowHeight - 60)
ResizeGadget(#Btn_Quit, FormWindowWidth - 110, FormWindowHeight - 35, 100, 25)
EndProcedure
Code : Tout sélectionner
EnableExplicit
XIncludeFile "Splitter.pbf"
OpenWindow_0()
Define a.c
For a = 0 To 10
AddGadgetItem(#Tree_0, -1, "Elément normal "+Str(a), 0, 0)
AddGadgetItem(#Tree_0, -1, "Noeud "+Str(a), 0, 0)
AddGadgetItem(#Tree_0, -1, "Sous-élément 1", 0, 1)
AddGadgetItem(#Tree_0, -1, "Sous-élément 2", 0, 1)
AddGadgetItem(#Tree_0, -1, "Sous-élément 3", 0, 1)
AddGadgetItem(#Tree_0, -1, "Sous-élément 4", 0, 1)
AddGadgetItem(#Tree_0, -1, "Fichier "+ Str(a), 0, 0)
Next
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case #Btn_Quit
Break
Case #Tree_0
If EventType() = #PB_EventType_LeftClick
SetGadgetText(#Editor_0, "Note N° " +
GetGadgetState(#Tree_0) +
" - Titre : " +
GetGadgetItemText(#Tree_0, GetGadgetState(#Tree_0)))
EndIf
EndSelect
Case #PB_Event_SizeWindow
ResizeGadgetsWindow_0()
EndSelect
ForEver
Par sécurité, on met un flag à chaque fois que l'utilisateur change le contenu de l'éditeur et on sauve la note au moment ou il change dans le TreeGadget.
(ou alors tout sauvegarder à la fin)
Re: Je voudrais marier un TreeGadget avec un EditorGadget
Merci Marc56, oui c'est tout à fait ça et mes données seront cryptées dans un fichier hautement résistant à la rupture, pour qu'on puisse lire les données même si le fichier est corrompu jusqu'à 90%.
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: Je voudrais marier un TreeGadget avec un EditorGadget
Maintenant que j'ai construit mon système de construction de dossier et de notes, je souhaiterais cliquer sur le titre de la note pour entrer ses données dans l'éditeur, je n'ai pas fait de recherche, car je ne sais pas ce que je dois rechercher, alors comme d'habitude, je viens solliciter votre aide bienveillante et je vous en remercie à l'avance.
En gros, je ne sais pas quelle procédure je dois ajouter, ni comment créer plusieurs dossiers différents avec leurs notes propres.
Code : Tout sélectionner
Procedure Nouveau_Dossier()
Texte$ = InputRequester("Choisissez un nom pour le nouveau dossier", "", "")
AddGadgetItem(#Arbre, -1, Texte$, 0, 0)
EndProcedure
Procedure Nouvelle_Note()
Texte$ = InputRequester("Choisissez un nom pour la nouvelle note", "", "")
AddGadgetItem(#Arbre, -1, Texte$, 0, 1)
EndProcedure
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: Je voudrais créer un logiciel pour prendre des notes
Dans l'exemple que je t'ai donné, quand tu cliques avec le bouton gauche sur un élément du Tree, tu peux ensuite écrire dans l'éditeur.
Il ne te reste qu'à sauvegarder le contenu du gadget editeur, soit dans un fichier pour chacun, soit dans une base de données.
Pour donner un titre à la note, le mieux est à mon avis d'utiliser le bouton droit pour proposer des options.
(du plus simple: inputrequester pour renommer au plus élaboré: menu contextuel)

Il ne te reste qu'à sauvegarder le contenu du gadget editeur, soit dans un fichier pour chacun, soit dans une base de données.
Pour donner un titre à la note, le mieux est à mon avis d'utiliser le bouton droit pour proposer des options.
(du plus simple: inputrequester pour renommer au plus élaboré: menu contextuel)
Code : Tout sélectionner
Case #Tree_0
If EventType() = #PB_EventType_LeftClick
SetGadgetText(#Editor_0, "Note N° " +
GetGadgetState(#Tree_0) +
" - Titre : " +
GetGadgetItemText(#Tree_0, GetGadgetState(#Tree_0)))
ElseIf EventType() = #PB_EventType_RightClick
; InputRequester pour renommer
; ou menu contextuel pour permettre d'ajouter / supprimer / renommer un élément
EndIf
EndSelect

Re: Je voudrais créer un logiciel pour prendre des notes
Merci Marc56, je vais mettre en pratique tes bons enseignements !
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 !