Projet : Dictionnaire
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Projet : Dictionnaire
Salut,
je suis en train de coder un dictionnaire pour y mettre ce que j'apprends en Polonais (qui n'est pas une langue facile et en plus, je suis pas doué en langue)
Donc je me suis fait un dictionnaire.
Je vais donc mettre ici tous les bouts de code intéressant que j'ai utilisé.
Le programme fonctionne en UNICODE, pensez à l'activer pour pouvoir utiliser les codes
je suis en train de coder un dictionnaire pour y mettre ce que j'apprends en Polonais (qui n'est pas une langue facile et en plus, je suis pas doué en langue)
Donc je me suis fait un dictionnaire.
Je vais donc mettre ici tous les bouts de code intéressant que j'ai utilisé.
Le programme fonctionne en UNICODE, pensez à l'activer pour pouvoir utiliser les codes
Dernière modification par Le Soldat Inconnu le mar. 05/févr./2008 18:43, modifié 2 fois.
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Le tout premier, c'est de faire de l'édition sur les StringGadget ou les EditorGadget en fonction du curseur
Le but est de pouvoir écrire du texte dans une langue étrangère (Le polonais à des caractères spéciaux qui n'existe pas sur un clavier français)
Donc j'ai une table de bouton représentant chaque caractère, quand j'appui sur un bouton, j'ajoute le caractère.
Le but est de pouvoir écrire du texte dans une langue étrangère (Le polonais à des caractères spéciaux qui n'existe pas sur un clavier français)
Donc j'ai une table de bouton représentant chaque caractère, quand j'appui sur un bouton, j'ajoute le caractère.
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
; Modifier un texte dans un StringGadget ou un EditorGadget en partant de la position du curseur
Procedure EditText(Gadget, Type, Text_Start.s, Text_End.s = "")
; type = 0 : Insertion de texte sur le curseur
; type = 1 : insertion de texte autour de la sélection
Protected Debut_Position, Fin_position, Texte.s, Index.l
Select GadgetType(Gadget)
Case #PB_GadgetType_String
SendMessage_(GadgetID(Gadget), #EM_GETSEL, @Debut_Position, @Fin_position)
Texte = GetGadgetText(Gadget)
If Type = 0
Texte = Left(Texte, Debut_Position) + Text_Start + Text_End + Right(Texte, Len(Texte) - Fin_position)
Debut_Position + Len(Text_Start + Text_End)
Fin_position = Debut_Position
Else
Texte = Left(Texte, Debut_Position) + Text_Start + Mid(Texte, Debut_Position + 1, Fin_position - Debut_Position) + Text_End + Right(Texte, Len(Texte) - Fin_position)
Debut_Position + Len(Text_Start)
Fin_position + Len(Text_Start)
EndIf
SetGadgetText(Gadget, Texte)
SendMessage_(GadgetID(Gadget), #EM_SETSEL, Debut_Position, Fin_position)
SetActiveGadget(Gadget)
Case #PB_GadgetType_Editor
SendMessage_(GadgetID(Gadget), #EM_GETSEL, @Debut_Position, @Fin_position)
For Index = 0 To CountGadgetItems(Gadget) - 1
If Texte <> ""
Texte + Chr(10)
EndIf
Texte + GetGadgetItemText(Gadget, Index)
Next
If Type = 0
Texte = Left(Texte, Debut_Position) + Text_Start + Text_End + Right(Texte, Len(Texte) - Fin_position)
Debut_Position + Len(Text_Start + Text_End)
Fin_position = Debut_Position
Else
Texte = Left(Texte, Debut_Position) + Text_Start + Mid(Texte, Debut_Position + 1, Fin_position - Debut_Position) + Text_End + Right(Texte, Len(Texte) - Fin_position)
Debut_Position + Len(Text_Start)
Fin_position + Len(Text_Start)
EndIf
SetGadgetText(Gadget, Texte)
SendMessage_(GadgetID(Gadget), #EM_SETSEL, Debut_Position, Fin_position)
SetActiveGadget(Gadget)
EndSelect
EndProcedure
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, "Texte", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0 Or CreateGadgetList(WindowID(0)) = 0
End
EndIf
StringGadget(0, 0, 0, 300, 25, "")
EditorGadget(1, 0, 30, 300, 100)
ButtonGadget(2, 0, 150, 300, 25, "Insérer le texte 'Blabla' au l'endroit du curseur")
ButtonGadget(3, 0, 175, 300, 25, "Entourer le texte sélectionné par '<b>' et '</b>'")
Repeat
Event = WaitWindowEvent()
;{ Focus
; Mis comme çà car il y a des problèmes de détection de focus avec les EditorGadget, de cette manière, c'est du solide
Focus = GetActiveGadget()
If Focus <> -1 And (GadgetType(Focus) = #PB_GadgetType_String Or GadgetType(Focus) = #PB_GadgetType_Editor)
Gadget_TextFocus = Focus
EndIf
;}
Select Event
Case #PB_Event_Menu
Select EventMenu() ; Menus
EndSelect
Case #PB_Event_Gadget
Select EventGadget() ; Gadgets
Case 2
Debug "Insertion"
EditText(Gadget_TextFocus, 0, "Blabla")
Case 3
EditText(Gadget_TextFocus, 1, "<b>", "</b>")
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
End
-
- Messages : 1202
- Inscription : sam. 31/déc./2005 23:52
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Le code suivant permet d'enregistrer un "clavier"
En gros, il crée un fichier qui contient tous les caractères d'une langue.
Ce qui est intéressant dans ce code, c'est le principe d'affichage de la table de caractère unicode.
Dans une table de caractère, on a toujours des valeurs qui ne correspondent à aucun caractère. Comme le caractère 13 ou le 10.
Si on fait
Cela affiche un joli carré.
Dans la table de caractère unicode, il y a plein de valeurs qui ne correspondent à aucun caractère.
il a donc fallu nettoyer tout ça pour avoir qlqchose de plus lisible.
La méthode :
Je dessine un caractère qui n'existe pas sur une image (par exemple le caractère 13)
Ensuite, je dessine chaque caractère sur une autre image et je compare.
Si c'est identique, le caractère n'existe pas.
Si c'est différent, c'est bon.
Bien sur, je ne compare pas pixel par pixel. J'utilise ma librairie Effect.
Utilisation de programme :
Vous entrez le nom du clavier puis vous arrivez sur la fenêtre.
De la, vous avez à gauche la liste de caractère qui vont donner le clavier de la langue en cours
Au milieu, les fonctions d'éditions
A droite, une liste de caractère UNICODE. Pour insérer un caractère dans un StringGadget, faites un double clic dans la liste.
Je préviens, c'est du codé en vitesse
Vous avez besoin de la librairie Effect. Voir sur www.lsi-dev.com
Programme Unicode, pensez à l'activer.
En gros, il crée un fichier qui contient tous les caractères d'une langue.
Ce qui est intéressant dans ce code, c'est le principe d'affichage de la table de caractère unicode.
Dans une table de caractère, on a toujours des valeurs qui ne correspondent à aucun caractère. Comme le caractère 13 ou le 10.
Si on fait
Code : Tout sélectionner
Debug CHR(13)
Dans la table de caractère unicode, il y a plein de valeurs qui ne correspondent à aucun caractère.
il a donc fallu nettoyer tout ça pour avoir qlqchose de plus lisible.
La méthode :
Je dessine un caractère qui n'existe pas sur une image (par exemple le caractère 13)
Ensuite, je dessine chaque caractère sur une autre image et je compare.
Si c'est identique, le caractère n'existe pas.
Si c'est différent, c'est bon.
Bien sur, je ne compare pas pixel par pixel. J'utilise ma librairie Effect.
Utilisation de programme :
Vous entrez le nom du clavier puis vous arrivez sur la fenêtre.
De la, vous avez à gauche la liste de caractère qui vont donner le clavier de la langue en cours
Au milieu, les fonctions d'éditions
A droite, une liste de caractère UNICODE. Pour insérer un caractère dans un StringGadget, faites un double clic dans la liste.
Je préviens, c'est du codé en vitesse
Vous avez besoin de la librairie Effect. Voir sur www.lsi-dev.com
Programme Unicode, pensez à l'activer.
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
; Création des claviers
Procedure EditText(Gadget, Type, Text_Start.s, Text_End.s = "")
; type = 0 : Insertion de texte sur le curseur
; type = 1 : insertion de texte autour de la sélection
Protected Debut_Position, Fin_position, Texte.s, Index.l
If IsGadget(Gadget)
Select GadgetType(Gadget)
Case #PB_GadgetType_String
SendMessage_(GadgetID(Gadget), #EM_GETSEL, @Debut_Position, @Fin_position)
Texte = GetGadgetText(Gadget)
If Type = 0
Texte = Left(Texte, Debut_Position) + Text_Start + Text_End + Right(Texte, Len(Texte) - Fin_position)
Debut_Position + Len(Text_Start + Text_End)
Fin_position = Debut_Position
Else
Texte = Left(Texte, Debut_Position) + Text_Start + Mid(Texte, Debut_Position + 1, Fin_position - Debut_Position) + Text_End + Right(Texte, Len(Texte) - Fin_position)
Debut_Position + Len(Text_Start)
Fin_position + Len(Text_Start)
EndIf
SetGadgetText(Gadget, Texte)
SendMessage_(GadgetID(Gadget), #EM_SETSEL, Debut_Position, Fin_position)
SetActiveGadget(Gadget)
Case #PB_GadgetType_Editor
SendMessage_(GadgetID(Gadget), #EM_GETSEL, @Debut_Position, @Fin_position)
For Index = 0 To CountGadgetItems(Gadget) - 1
If Texte <> ""
Texte + Chr(10)
EndIf
Texte + GetGadgetItemText(Gadget, Index)
Next
If Type = 0
Texte = Left(Texte, Debut_Position) + Text_Start + Text_End + Right(Texte, Len(Texte) - Fin_position)
Debut_Position + Len(Text_Start + Text_End)
Fin_position = Debut_Position
Else
Texte = Left(Texte, Debut_Position) + Text_Start + Mid(Texte, Debut_Position + 1, Fin_position - Debut_Position) + Text_End + Right(Texte, Len(Texte) - Fin_position)
Debut_Position + Len(Text_Start)
Fin_position + Len(Text_Start)
EndIf
SetGadgetText(Gadget, Texte)
SendMessage_(GadgetID(Gadget), #EM_SETSEL, Debut_Position, Fin_position)
SetActiveGadget(Gadget)
EndSelect
EndIf
EndProcedure
Fichier.s = InputRequester("Keyboard", "Language name :", "FR")
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 500, 500, "Keyboard", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0 Or CreateGadgetList(WindowID(0)) = 0
End
EndIf
LoadFont(0, "Tahoma", 11, #PB_Font_HighQuality)
; ListIconGadget(0, 0, 0, 250, 500, "low case character", 220, #PB_ListIcon_CheckBoxes)
; SetGadgetFont(0, FontID(0))
; For n = 1 To 1023
; AddGadgetItem(0, -1, Chr(n) + " (" + Str(n) + ")")
; Next
; ListIconGadget(1, 250, 0, 250, 500, "choose up case character", 220, #PB_ListIcon_CheckBoxes)
; SetGadgetFont(1, FontID(0))
; For n = 1 To 1023
; AddGadgetItem(1, -1, Chr(n) + " (" + Str(n) + ")")
; Next
ListIconGadget(0, 0, 0, 240, 500, "low", 65, #PB_ListIcon_FullRowSelect | #PB_ListIcon_GridLines | #PB_ListIcon_AlwaysShowSelection)
SetGadgetFont(0, FontID(0))
AddGadgetColumn(0, 1, "up", 65)
AddGadgetColumn(0, 2, "simple", 65)
ListIconGadget(10, 360, 0, 130, 500, "char", 50, #PB_ListIcon_FullRowSelect | #PB_ListIcon_GridLines)
SetGadgetFont(10, FontID(0))
AddGadgetColumn(10, 1, "n", 50)
ButtonGadget(1, 240, 0, 120, 25, "Move up")
ButtonGadget(2, 240, 25, 120, 25, "Move down")
ButtonGadget(3, 240, 60, 120, 25, "Add")
TextGadget(#PB_Any, 240, 95, 120, 15, "Low charater (é) :")
StringGadget(5, 240, 110, 120, 25, "")
TextGadget(#PB_Any, 240, 135, 120, 15, "Up charater (E) :")
StringGadget(6, 240, 150, 120, 25, "")
TextGadget(#PB_Any, 240, 175, 120, 15, "Simple character (e) :")
StringGadget(7, 240, 190, 120, 25, "")
ButtonGadget(4, 240, 215, 120, 25, "Accept")
ButtonGadget(8, 240, 250, 120, 25, "Delete")
#Taille = 20
CreateImage(0, #Taille, #Taille)
Dim Image0(#Taille - 1, #Taille - 1)
StartDrawing(ImageOutput(0))
Box(0, 0, #Taille, #Taille, 0)
DrawingFont(FontID(0))
DrawText(0, 0, Chr(10), $FFFFFF, 0)
StopDrawing()
GetImageBits(ImageID(0), @Image0())
CreateImage(1, #Taille, #Taille)
Dim Image1(#Taille - 1, #Taille - 1)
For n = 32 To 4095
StartDrawing(ImageOutput(1))
Box(0, 0, #Taille, #Taille, 0)
DrawingFont(FontID(0))
DrawText(0, 0, Chr(n), $FFFFFF, 0)
StopDrawing()
GetImageBits(ImageID(1), @Image1())
If CompareMemory(@Image0(), @Image1(), #Taille * #Taille * 4) = 0
AddGadgetItem(10, -1, Chr(n) + Chr(10) + Str(n))
EndIf
Next
If ReadFile(0, Fichier + ".clv")
ReadStringFormat(0)
n = -1
Repeat
n + 1
Ligne.s = ReadString(0, #PB_Unicode)
AddGadgetItem(0, -1, StringField(Ligne, 1, Chr(9)))
SetGadgetItemText(0, n, StringField(Ligne, 2, Chr(9)), 1)
SetGadgetItemText(0, n, StringField(Ligne, 3, Chr(9)), 2)
Until Eof(0)
CloseFile(0)
EndIf
Repeat
Event = WaitWindowEvent()
;{ Focus
Focus = GetActiveGadget()
If Focus <> -1 And (GadgetType(Focus) = #PB_GadgetType_String Or GadgetType(Focus) = #PB_GadgetType_Editor)
Gadget_TextFocus = Focus
EndIf
;}
Select Event
Case #PB_Event_Menu
Select EventMenu() ; Menus
EndSelect
Case #PB_Event_Gadget
Select EventGadget() ; Gadgets
Case 10
Select EventType()
Case #PB_EventType_LeftDoubleClick
Position = GetGadgetState(10)
If Position >= 0
EditText(Gadget_TextFocus, 0, GetGadgetItemText(10, Position, 0))
EndIf
EndSelect
Case 0
Position = GetGadgetState(0)
If Position >= 0
SetGadgetText(5, GetGadgetItemText(0, Position, 0))
SetGadgetText(6, GetGadgetItemText(0, Position, 1))
SetGadgetText(7, GetGadgetItemText(0, Position, 2))
EndIf
Case 4
Position = GetGadgetState(0)
If Position >= 0
SetGadgetItemText(0, Position, GetGadgetText(5), 0)
SetGadgetItemText(0, Position, GetGadgetText(6), 1)
SetGadgetItemText(0, Position, GetGadgetText(7), 2)
EndIf
Case 3
Position = GetGadgetState(0) + 1
AddGadgetItem(0, Position, "")
SetGadgetState(0, Position)
SetActiveGadget(5)
Case 2
Position = GetGadgetState(0)
If Position >= 0 And Position < CountGadgetItems(0) - 1
Texte.s = GetGadgetItemText(0, Position, 0) + Chr(10) + GetGadgetItemText(0, Position, 1) + Chr(10) + GetGadgetItemText(0, Position, 2)
RemoveGadgetItem(0, Position)
AddGadgetItem(0, Position + 1, Texte)
SetGadgetState(0, Position + 1)
EndIf
Case 1
Position = GetGadgetState(0)
If Position >= 1
Texte.s = GetGadgetItemText(0, Position, 0) + Chr(10) + GetGadgetItemText(0, Position, 1) + Chr(10) + GetGadgetItemText(0, Position, 2)
RemoveGadgetItem(0, Position)
AddGadgetItem(0, Position - 1, Texte)
SetGadgetState(0, Position - 1)
EndIf
Case 8
Position = GetGadgetState(0)
If Position >= 0
RemoveGadgetItem(0, Position)
SetGadgetState(0, Position - 1)
EndIf
Case 5
Select EventType()
Case #PB_EventType_Change
If GetGadgetText(6) = ""
SetGadgetText(6, UCase(GetGadgetText(5)))
EndIf
If GetGadgetText(7) = ""
SetGadgetText(7, LCase(GetGadgetText(5)))
EndIf
EndSelect
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
If CreateFile(0, Fichier + ".clv")
WriteStringFormat(0, #PB_Unicode)
For n = 0 To CountGadgetItems(0) - 1
If GetGadgetItemText(0, n, 0) And GetGadgetItemText(0, n, 0) And GetGadgetItemText(0, n, 0)
Ligne = GetGadgetItemText(0, n, 0) + Chr(9) + GetGadgetItemText(0, n, 1) + Chr(9) + GetGadgetItemText(0, n, 2)
WriteStringN(0, Ligne, #PB_Unicode)
EndIf
Next
CloseFile(0)
EndIf
End
Dernière modification par Le Soldat Inconnu le mar. 05/févr./2008 23:05, modifié 3 fois.
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Question sur l'UNICODE :
C'est quoi ce truc ?
En gros, au lieu d'avoir 255 caractères maxi, tu as 65000 et des poussière caractères possible.
Cela me permet, sur un ordinateur Français, d'afficher des caractères étrangers dans mes textes.
Essaie de taper ą ou ł sur ton clavier. ou de le trouver dans une table ASCII.
Avec l'unicode, j'ai ces caractères. Et je peux les afficher
ą = caractère 261
ł = caractère 322
C'est quoi ce truc ?
En gros, au lieu d'avoir 255 caractères maxi, tu as 65000 et des poussière caractères possible.
Cela me permet, sur un ordinateur Français, d'afficher des caractères étrangers dans mes textes.
Essaie de taper ą ou ł sur ton clavier. ou de le trouver dans une table ASCII.
Avec l'unicode, j'ai ces caractères. Et je peux les afficher
ą = caractère 261
ł = caractère 322
-
- Messages : 1202
- Inscription : sam. 31/déc./2005 23:52
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Qui dit dictionnaire dis recherche de mot, ou d'expression.
Vous allez me dire, c'est facile, je prend la fonction FindString et zou ...
Oui mais ... (si si, il faut bien des 'mais' parfois)
Si on veut faire une recherche un peu plus poussée, comme cela est possible dans un moteur de recherche.
Dans le genre :
- Recherche avec un OU : Truc+Bidule
- Recherche avec un ET : Truc Bidule ; Truc&Bidule
- Recherche avec une expression : "Truc Bidule"
Le petit FindString, et bien il ne fait pas tout ça, le méchant !
Donc voici comment j'ai procédé pour faire une recherche multiple.
Et je peux rechercher des choses complexes du genre :
truc+machin&"bidule chose"
J'espère que c'est assez commenté. J'ai utilisé une joli astuce (le roi de la bidouille, mais bon, si ca permet de simplifier et de parvenir a ce que je veux, vais je m'en priver ? hein ?
)
Vous allez me dire, c'est facile, je prend la fonction FindString et zou ...
Oui mais ... (si si, il faut bien des 'mais' parfois)
Si on veut faire une recherche un peu plus poussée, comme cela est possible dans un moteur de recherche.
Dans le genre :
- Recherche avec un OU : Truc+Bidule
- Recherche avec un ET : Truc Bidule ; Truc&Bidule
- Recherche avec une expression : "Truc Bidule"
Le petit FindString, et bien il ne fait pas tout ça, le méchant !
Donc voici comment j'ai procédé pour faire une recherche multiple.
Et je peux rechercher des choses complexes du genre :
truc+machin&"bidule chose"
J'espère que c'est assez commenté. J'ai utilisé une joli astuce (le roi de la bidouille, mais bon, si ca permet de simplifier et de parvenir a ce que je veux, vais je m'en priver ? hein ?

Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
; Recherche multiple
; Vous pouvez faire des recherche de ce type
; Recherche avec un OU : Truc+Bidule
; Recherche avec un ET : Truc Bidule ; Truc&Bidule
; Recherche avec une expression : "Truc Bidule"
Procedure Recherche(Texte.s, Recherche.s)
Structure Mot_Info
Texte.s
Recherche.l
Operateur.s
EndStructure
Protected NewList Mot.Mot_Info()
If Trim(Recherche) = ""
ProcedureReturn 0 ; Si le champ de recherche est vide, on quitte
EndIf
; On passe tout en minuscule pour supprimer les problèmes de casse.
Texte = LCase(Texte)
Recherche = LCase(Recherche)
; Analyse du texte à rechercher
; On découpe le texte de recherche pour extraire chaque mot recherché ou chaque expression entre ""
AddElement(Mot()) ; On commence le premier mot de la recherche multiple
Guillement = 0 ; Au début, on n'est pas dans une expression (Texte entre "")
For Index = 1 To Len(Recherche) ; Pour chaque caractère du texte à recherche
Lettre.s = Mid(Recherche, Index, 1) ; On extrait le caractère
Select Lettre
Case " ", "&" ; Si on a une condition &
If Guillement = 0 ; On n'est pas dans une expression
Mot()\Operateur = "&" ; On indique qu'après ce mot, on a un &
AddElement(Mot()) ; on termine le mot en cours et on passe au mot suivant
Else
Mot()\Texte + Lettre ; Si on est dans une expression, on ajoute le caractère au mot en cours
EndIf
Case "+" ; Si on a une condition |
If Guillement = 0 ; On n'est pas dans une expression
Mot()\Operateur = "|" ; On indique qu'après ce mot, on a un |
AddElement(Mot()) ; on termine le mot en cours et on passe au mot suivant
Else
Mot()\Texte + Lettre ; Si on est dans une expression, on ajoute le caractère au mot en cours
EndIf
Case Chr(34) ; Si on a une expression
Mot()\Operateur = "&" ; L'opérateur est & (On veut l'expression et qlqchose : "Bla bla" truc )
AddElement(Mot()) ; on termine le mot en cours et on passe au mot suivant
Guillement = 1 ! Guillement ; on bascule guillement pour entrer dans une expression ou en sortir (de 0 vers 1 ou de 1 vers 0)
Default ; Tous les autres caractères sont ajoutés au mot en cours
Mot()\Texte + Lettre
EndSelect
Next
LastElement(Mot())
Mot()\Operateur = "" ; Pour le dernier mot, pas d'opérateur, il n'y a plus rien derrière
; On regarde si on trouve les mots de la recherche
ForEach Mot()
If Mot()\Texte = "" ; Si on recherche rien, on le trouve forcément, donc on enregistre 1 pour ce mot. Ce cas arrive, il est du au décodage de la recherche multiple ou à l'écriture de la recherche (par exemple 2 espaces à la suite)
Mot()\Recherche = 1
Else ; Sinon, on a du texte a cherché
If FindString(Texte, Mot()\Texte, 1) ; Si on le trouve, on enregistre 1 pour le mot
Mot()\Recherche = 1
Else
Mot()\Recherche = 0
EndIf
EndIf
Next
; On regroupe les résultats en fonction des opérateurs
Test.s = ""
ForEach Mot() ; on regroupe le résultat final, ca donne une expression du genre 1|0&1|1&1&0 ... sous forme de Texte, c'est une astuce de traitement
Test + Str(Mot()\Recherche) + Mot()\Operateur
Next
; On a l'équation sous forme de texte, et on calcul opérateur par opérateur, les & d'abord puis les |
While FindString(Test, "&", 1) ; Tant qu'il existe un opérateur &, on le calcul. on fait les & en premier car le & est prioritaire face au |
Test = ReplaceString(Test, "1&1", "1") ; 1&1 est remplacé par 1
Test = ReplaceString(Test, "1&0", "0") ; 1&0 est remplacé par 0
Test = ReplaceString(Test, "0&1", "0") ; 0&1 est remplacé par 0
Test = ReplaceString(Test, "0&0", "0") ; 0&0 est remplacé par 0
Wend
While FindString(Test, "|", 1) ; Tant qu'il existe un opérateur | (ou), on le calcul.
Test = ReplaceString(Test, "1|1", "1") ; 1|1 est remplacé par 1
Test = ReplaceString(Test, "1|0", "1") ; 1|0 est remplacé par 1
Test = ReplaceString(Test, "0|1", "1") ; 0|1 est remplacé par 1
Test = ReplaceString(Test, "0|0", "0") ; 0|0 est remplacé par 0
Wend
; Au final, il reste 1 ou 0
If Test = "1" ; Si on a trouvé
ProcedureReturn 1
Else ; Sinon
ProcedureReturn 0
EndIf
EndProcedure
;- Début du programme
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 320, 320, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0 Or CreateGadgetList(WindowID(0)) = 0
End
EndIf
EditorGadget(0, 10, 10, 300, 200) ; une zone de texte
SendMessage_(GadgetID(0), #EM_SETTARGETDEVICE, #Null, 0) ; pour activer le retour à la ligne
TextGadget(#PB_Any, 10, 220, 100, 25, "Recherche :")
StringGadget(1, 110, 220, 200, 25, "") ; le champ de recherche
ButtonGadget(2, 10, 255, 300, 25, "Rechercher") ; pour lancer la recherche
TextGadget(3, 10, 290, 300, 25, "") ; Pour donner le résultat
; On remplit le texte
Restore ExempleDeTexte
For n = 1 To 7
Read Texte.s
AddGadgetItem(0, -1, Texte)
Next
; on écrit un exemple de recherche
SetGadgetText(1, "Purebasic+compact rapide")
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Menu
Select EventMenu() ; Menus
EndSelect
Case #PB_Event_Gadget
Select EventGadget() ; Gadgets
Case 2
Texte.s = GetGadgetText(0)
Recherche.s = GetGadgetText(1)
Resultat = Recherche(Texte, Recherche)
If Resultat
SetGadgetText(3, "Le texte contient votre recherche")
Else
SetGadgetText(3, "Le texte ne contient pas votre recherche")
EndIf
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
End
DataSection
ExempleDeTexte:
Data.s "PureBasic est un langage de programmation basé sur les règles du langage BASIC. Ses caractéristiques majeures sont :"
Data.s ""
Data.s "- Portabilité: PureBasic fonctionne actuellement pleinement sous Windows, AmigaOS et Linux."
Data.s "- Rapidité: PureBasic est un véritable compilateur qui produit des exécutables compacts et optimisés."
Data.s "- Simplicité: PureBasic utilise la syntaxe du langage BASIC, très répandue et simple à apprendre."
Data.s ""
Data.s "PureBasic a été conçu aussi bien pour les débutants que pour les programmeurs expérimentés. Nous avons consacré beaucoup de temps et d'efforts pour vous proposer un langage rapide, fiable et convivial. Malgré sa syntaxe de base simple et rapidement assimilable, les possibilités de PureBasic sont infinies, grâce à de nombreuses caractéristiques évoluées comme, entre autres, les pointeurs, structures, procédures, listes dynamiques, etc. Le programmeur expérimenté n'aura aucune difficulté à accéder aux structures du système d'exploitation et aux API's."
EndDataSection
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Copier coller sans mise en forme :
Je trouve quelque cours de polonais sur internet. C'est super de trouver ca mais sur les copier coller d'une page internet vers un EditorGadget, et bien ça garde la mise en forme (Normal, un editorgadget supporte la mise en forme)
Quel bazar que ca fait ...
Donc voici un code qui permet de faire des copier coller sans garder la mise en forme.
Je trouve quelque cours de polonais sur internet. C'est super de trouver ca mais sur les copier coller d'une page internet vers un EditorGadget, et bien ça garde la mise en forme (Normal, un editorgadget supporte la mise en forme)
Quel bazar que ca fait ...

Donc voici un code qui permet de faire des copier coller sans garder la mise en forme.
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
; Coller sans mise en forme
Enumeration
#Menu_Coller
EndEnumeration
Global Gadget_TextFocus
Procedure EditText(Gadget, Type, Text_Start.s, Text_End.s = "")
; type = 0 : Insertion de texte sur le curseur
; type = 1 : insertion de texte autour de la sélection
Protected Debut_Position, Fin_position, Texte.s, Index.l
Select GadgetType(Gadget)
Case #PB_GadgetType_String
SendMessage_(GadgetID(Gadget), #EM_GETSEL, @Debut_Position, @Fin_position)
Texte = GetGadgetText(Gadget)
If Type = 0
Texte = Left(Texte, Debut_Position) + Text_Start + Text_End + Right(Texte, Len(Texte) - Fin_position)
Debut_Position + Len(Text_Start + Text_End)
Fin_position = Debut_Position
Else
Texte = Left(Texte, Debut_Position) + Text_Start + Mid(Texte, Debut_Position + 1, Fin_position - Debut_Position) + Text_End + Right(Texte, Len(Texte) - Fin_position)
Debut_Position + Len(Text_Start)
Fin_position + Len(Text_Start)
EndIf
SetGadgetText(Gadget, Texte)
SendMessage_(GadgetID(Gadget), #EM_SETSEL, Debut_Position, Fin_position)
SetActiveGadget(Gadget)
Case #PB_GadgetType_Editor
SendMessage_(GadgetID(Gadget), #EM_GETSEL, @Debut_Position, @Fin_position)
For Index = 0 To CountGadgetItems(Gadget) - 1
If Texte <> ""
Texte + Chr(10)
EndIf
Texte + GetGadgetItemText(Gadget, Index)
Next
If Type = 0
Texte = Left(Texte, Debut_Position) + Text_Start + Text_End + Right(Texte, Len(Texte) - Fin_position)
Debut_Position + Len(Text_Start + Text_End)
Fin_position = Debut_Position
Else
Texte = Left(Texte, Debut_Position) + Text_Start + Mid(Texte, Debut_Position + 1, Fin_position - Debut_Position) + Text_End + Right(Texte, Len(Texte) - Fin_position)
Debut_Position + Len(Text_Start)
Fin_position + Len(Text_Start)
EndIf
SetGadgetText(Gadget, Texte)
SendMessage_(GadgetID(Gadget), #EM_SETSEL, Debut_Position, Fin_position)
SetActiveGadget(Gadget)
EndSelect
EndProcedure
Procedure Coller()
Texte.s = GetClipboardText()
EditText(Gadget_TextFocus, 0, Texte)
EndProcedure
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, "Texte", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0 Or CreateGadgetList(WindowID(0)) = 0
End
EndIf
StringGadget(0, 0, 0, 300, 25, "")
EditorGadget(1, 0, 30, 300, 200)
AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_Shortcut_V, #Menu_Coller)
Repeat
Event = WaitWindowEvent()
;{ Focus
; Mis comme çà car il y a des problèmes de détection de focus avec les EditorGadget, de cette manière, c'est du solide
Focus = GetActiveGadget()
If Focus <> -1 And (GadgetType(Focus) = #PB_GadgetType_String Or GadgetType(Focus) = #PB_GadgetType_Editor)
Gadget_TextFocus = Focus
EndIf
;}
Select Event
Case #PB_Event_Menu
Select EventMenu() ; Menus
Case #Menu_Coller
Coller()
EndSelect
Case #PB_Event_Gadget
Select EventGadget() ; Gadgets
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
End
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
didier69 a écrit :Bonjour,
testant purebasic,
Ai-je oublié qqchose ?
pour info les commandes suivis de "_" sont des appels a l'Api !!La version de démonstration est limitée de la manière suivante:
- Impossible de créer une DLL
- Impossible d'utiliser les fonctions externe (API de l'OS)
- Pas de kit de développement pour ajouter des libraries à PureBasic
- Nombre maximum de lignes pour un programme: 800

en fait partieSendMessage_<-------()
-
- Messages : 1202
- Inscription : sam. 31/déc./2005 23:52