FAQ PureBasicConsultez toutes les FAQ
Nombre d'auteurs : 7, nombre de questions : 68, dernière mise à jour : 3 janvier 2013 Ajouter une question
Bienvenue dans la F.A.Q. PureBasic !
Celle-ci va tenter de répondre aux questions les plus fréquemment posées sur le langage PureBasic et tous ses outils de programmation. Si elle n'a pas pour vocation de répondre à toutes les interrogations possibles, elle reste une bonne base de connaissances sur le PureBasic, et ne demande qu'à être enrichie par vos expériences personnelles.
Bien entendu, malgré toute l'attention qui a pu être portée à cette F.A.Q., des erreurs ont toujours pu s'y glisser. Prenez donc toutes les précautions qui s'imposent avant d'essayer un exemple.
Nous vous souhaitons une bonne lecture ! Et n'oubliez pas qu'en cas de problème, vous pourrez toujours poser votre question sur le forum PureBasic !
L'équipe PureBasic de Developpez.
- Comment annuler la dernière modification d'un StringGadget (undo) ?
- Comment centrer un texte dans un StringGadget ?
- Comment limiter le nombre de caractères pouvant être saisis dans un StringGadget ?
- Comment supprimer le popupmenu d'un StringGadget lorqu'on clique sur le bouton droit de la souris ?
- Comment modifier le caractère affiché lors de la saisie d'un mot de passe ?
- Comment placer le curseur à la fin d'un StringGadget ?
Pour cela, nous utilisons la fonction SendMessage() de l'API Windows pour envoyer un message au StringGadget lui demandant d'annuler sa dernière modification.
Code purebasic : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | If OpenWindow(0, 100, 200, 200, 200, "Annulation - undo") ; Crée la liste de gadgets StringGadget(0, 0, 0, 100, 20, "Texte initial") ButtonGadget(1, 100, 100, 100, 100, "Annuler") Repeat EventID = WaitWindowEvent() If EventID = #PB_Event_CloseWindow Quit = 1 EndIf If EventID = #PB_Event_Gadget GadgetID = EventGadget() If GadgetID = 1 SendMessage_(GadgetID(0), #EM_UNDO, 0, 0) EndIf EndIf Until Quit = 1 EndIf |
Ce code permet de centrer verticalement et horizontalement un texte dans un StringGadget. Pour Windows uniquement.
Code purebasic : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | ; ************************************************ ; Code: Verticaly and Horizontaly centered text ; in a multiline StringGadget ; Author: Sparkie ; Date: December 20, 2005 ; OS: Windows only ; ************************************************ ; ************************************************ ; Procedure: Center text in Multiline StringGadget ; ************************************************ Procedure StringGadgetVCenter(gadNum) ;--> Get line count of StringGadget lineCount = SendMessage_(GadgetID(gadNum), #EM_GETLINECOUNT, 0, 0) myText$ = GetGadgetText(gadNum) ;--> Get width and height of text on one line hdc = GetDC_(GadgetID(gadNum)) GetTextExtentPoint32_(hdc, myText$, Len(myText$), @textXY.SIZE) ReleaseDC_(GadgetID(gadNum), hdc) ;--> Set rect coordinates for StringGadget eRect.RECT eRect\left = 0 eRect\top = (GadgetHeight(gadNum) - textXY\cy*lineCount) / 2 eRect\right = GadgetWidth(gadNum) - (eRect\left * 2) eRect\bottom = eRect\top + textXY\cy*lineCount SendMessage_(GadgetID(gadNum), #EM_SETRECT, 0, eRect) EndProcedure ; ************************************************ ; Main Window ; ************************************************ If OpenWindow(0, 0, 0, 300, 200, "StringGadget Centered Text", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) ;--> #ES_CENTER will not work with a singleline StringGadget on Win95/NT4 StringGadget(0, 50, 10, 200, 80, "Vertical and Horizontal" + #CRLF$ + "Centered Text in" + #CRLF$ + "Multiline StringGadget", #ES_MULTILINE | #ES_CENTER) StringGadgetVCenter(0) Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow EndIf End |
Ce code permet de limiter le nombre de caractères pouvant être saisis dans un StringGadget. Pour Windows uniquement.
Code purebasic : | Sélectionner tout |
1 2 3 4 5 6 7 8 | NbCaractere = 4 If OpenWindow(0, 0, 0, 200, 50, "StringGadget ", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) StringGadget(0, 50, 10, 80, 20, "") SendMessage_(GadgetID(0),#EM_SETLIMITTEXT,NbCaractere,0) Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow EndIf End |
Code purebasic : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Global oldStringGadgetProc Procedure.i stringGadgetProc(hWnd, uMsg, wParam, lParam) Protected result Select uMsg Case #WM_CONTEXTMENU result = 0 Default result = CallWindowProc_(oldStringGadgetProc, hWnd, uMsg, wParam, lParam) EndSelect ProcedureReturn result EndProcedure If OpenWindow(0, 100, 200, 300, 100, "Basic subclassing demo", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) StringGadget(0, 60, 40, 180,20,"") oldStringGadgetProc = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @stringGadgetProc()) Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow EndIf |
Valable uniquement pour windows (API).
Code purebasic : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 | OpenWindow(0, 100, 100, 300, 100, "") StringGadget(0, 5, 5, 290, 20, "", #ES_PASSWORD) SendMessage_(GadgetID(0), #EM_SETPASSWORDCHAR, '#', 0) Repeat Event = WaitWindowEvent() Until Event = #PB_Event_CloseWindow End |
Solution pour Windows, Linux et Mac.
Code purebasic : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | CompilerIf #PB_Compiler_OS = #PB_OS_MacOS ImportC "" SetControlData(Control, ControlPartCode, TagName, BufferSize, *Buffer) EndImport #kControlEditTextPart = 5 #kControlEditTextSelectionTag = 'sele' Structure ControlEditTextSelectionRec selStart.W selEnd.W EndStructure CompilerEndIf OpenWindow(0, 100, 200, 400, 200, "", #PB_Window_MinimizeGadget) StringGadget(0, 50, 50, 200, 20, "example") Text$ = GetGadgetText(0) SetActiveGadget(0) CompilerSelect #PB_Compiler_OS CompilerCase #PB_OS_MacOS TextSelection.ControlEditTextSelectionRec TextSelection\selStart = Len(Text$) TextSelection\selEnd = Len(Text$) SetControlData(GadgetID(0), #kControlEditTextPart, #kControlEditTextSelectionTag, SizeOf(ControlEditTextSelectionRec), @TextSelection) CompilerCase #PB_OS_Linux gtk_editable_set_position_(GadgetID(0), -1) CompilerCase #PB_OS_Windows SendMessage_(GadgetID(0), #EM_SETSEL, Len(Text$), Len(Text$)) CompilerEndSelect Repeat EventID = WaitWindowEvent() Until EventID = #PB_Event_CloseWindow |
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.