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.


SommaireGadgetsString 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 © 2018 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.

 
Responsable bénévole de la rubrique PureBasic : comtois -