Centrer le text dans une ComboBoxGadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
omega
Messages : 623
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Centrer le text dans une ComboBoxGadget

Message par omega »

Bonsoir

Y a t-il un moyen de centrer le texte affiché dans une comboBoxGadget?

Merci
Win7 (x64) 64 bits Pb 5.72
Mesa
Messages : 1097
Inscription : mer. 14/sept./2011 16:59

Re: Centrer le text dans une ComboBoxGadget

Message par Mesa »

Si le gadget n'est jamais redimensionné:

Code : Tout sélectionner

Procedure _GetGadgetText(gad) 
	text$ = LTrim(GetGadgetText(gad)," ") 
	Debug text$ 
EndProcedure 

Procedure _AddGadgetItem(gad,Text$) 
	gadw = GadgetWidth(gad,#PB_Gadget_ActualSize); - GadgetWidth(gad,#PB_Gadget_RequiredSize) 
	StartDrawing(WindowOutput(0)) 
	DrawingFont(FontID(0)) 
	width = TextWidth(Text$) 
	width2 = TextWidth(" ") 
	StopDrawing() 
	trim = (gadw - width)/2/width2 
	text$ = Space(trim)+text$ 
	AddGadgetItem(gad, -1,text$) 
EndProcedure 

LoadFont(0,"Tahoma",14) 

If OpenWindow(0, 0, 0, 400, 400, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
	ComboBoxGadget(0, 10, 10, 250, 20)  
	SetGadgetFont(0,FontID(0)) 
	StartDrawing(WindowOutput(0)) 
	DrawingFont(FontID(0)) 
	height = TextHeight("Q")+10 
	StopDrawing()   
	ResizeGadget(0,#PB_Ignore,#PB_Ignore,#PB_Ignore,height) 
	_AddGadgetItem(0,"IdeasVacuum") 
	_AddGadgetItem(0,"ComboBox item #!") 
	_AddGadgetItem(0,"RASHAD") 
	SetGadgetState(0,1) 
	ButtonGadget(1,10,370,80,25,"Get Text") 
	Repeat 
		Select WaitWindowEvent() 
			Case #PB_Event_CloseWindow 
				Quit = 1 
				
			Case #PB_Event_Gadget 
				Select EventGadget() 
					Case 1 
						_GetGadgetText(0) 
				EndSelect 
		EndSelect 
	Until Quit = 1 
EndIf 
sinon

Code : Tout sélectionner

EnableExplicit 

Procedure WindowCallback(WindowHandle.I, Message.I, WParam.I, LParam.I) 
	Protected Brush.I 
	Protected DC.I 
	Protected *DrawItem.DRAWITEMSTRUCT 
	Protected ItemText.S 
	Protected Result.I 
	Protected Size.SIZE 
	Protected x.I 
	
	Result = #PB_ProcessPureBasicEvents 
	
	If Message = #WM_DRAWITEM 
		*DrawItem = LParam 
		
		If *DrawItem\CtlType = #ODT_COMBOBOX 
			SetBkMode_(*DrawItem\hDC, #TRANSPARENT) 
			
			If *DrawItem\ItemState & #ODS_FOCUS 
				Brush = CreateSolidBrush_($FF901E) 
				FillRect_(*DrawItem\hDC, *DrawItem\rcItem, Brush) 
				DeleteObject_(Brush) 
				SetTextColor_(*DrawItem\hDC, $FFFFFF) 
			Else 
				FillRect_(*DrawItem\hDC, *DrawItem\rcItem, 
				          GetStockObject_(#WHITE_BRUSH)) 
			EndIf 
			
			If *DrawItem\itemID <> -1 
				ItemText = Space(128) 
				SendMessage_(*DrawItem\hwndItem, #CB_GETLBTEXT, 
				             *DrawItem\itemID, @ItemText) 
				
				DC = GetDC_(WindowHandle) 
				SelectObject_(DC, GadgetID(WParam))      
				GetTextExtentPoint32_(DC, @ItemText, Len(ItemText), Size) 
				ReleaseDC_(GadgetID(WParam), DC) 
				
				x = *DrawItem\rcItem\left + 
				    (*DrawItem\rcItem\right - *DrawItem\rcItem\left - Size\cx) / 2 
				TextOut_(*DrawItem\hDC, x, *DrawItem\rcItem\top, ItemText, 
				         Len(ItemText)) 
			EndIf 
		EndIf 
	EndIf 
	
	ProcedureReturn Result 
EndProcedure 

Define i.I 

OpenWindow(0, 200, 100, 270, 130, "ComboBoxGadget demo") 
SetGadgetFont(#PB_Default, LoadFont(0, "Verdana", 10)) 
ComboBoxGadget(0, 10, 20, 120, 23) 
ComboBoxGadget(1, 140, 20, 120, 23, #CBS_OWNERDRAWFIXED | #CBS_HASSTRINGS) 
SetWindowCallback(@WindowCallback()) 

For i = 1 To 5 
	AddGadgetItem(0, -1, "Item " + Str(i)) 
	AddGadgetItem(1, -1, "Item " + Str(i)) 
Next 

SetGadgetState(0, 0) 
SetGadgetState(1, 0) 

Repeat 
Until WaitWindowEvent() = #PB_Event_CloseWindow
M.
Répondre