IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

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.

Sommaire →Gadgets →String Gadget (6)
précédent sommaire suivant
 

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

Mis à jour le 14 février 2008 Progi1984

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

Mis à jour le 30 juillet 2009

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

Mis à jour le 8 novembre 2009

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

Mis à jour le 5 juin 2010

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

Mis à jour le 31 octobre 2010

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

Mis à jour le 9 décembre 2010

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 ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les 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 © 2026 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.