Página 1 de 1

Hacer un FORM o GUI dentro de uno ya existente.

Publicado: 02 Ago 2012, 11:13
por joana
Hola,

Estoy interesada en saber como puedo poner un GUI dentro de un window de un programa.

Quiero que ese GUI pertenezca a la window del programa y no a una window diferente.

Imaginaros que en la window del programa aparece un botón que pone "Aceptar" otro que sale "Cancelar", me gustaría poner otro que pusiera "+".

¿Hay alguna forma?

Gracias! :smt043

Re: Hacer un FORM o GUI dentro de uno ya existente.

Publicado: 03 Ago 2012, 01:45
por Chefito
Pues si te refieres a poder meter varias ventanas en una misma ventana, te recomiendo que mires este ejemplo: http://www.emesn.com/autoitforum/viewto ... &hilit=mdi

Si quieres meter un botón nuevo en una ventana ya creada mira la función _GUICtrlButton_Create de la udf guibutton.au3. Mirala en la ayuda.

Saludos.

Re: Hacer un FORM o GUI dentro de uno ya existente.

Publicado: 20 Ago 2012, 12:08
por joana
Muchas gracias. :smt023

Es lo que buscaba. :smt003

¿Me podéis decir la diferencia entre _GUICtrlButton_Create y GUICtrlCreateButton?

Gracias!

Re: Hacer un FORM o GUI dentro de uno ya existente.

Publicado: 20 Ago 2012, 12:59
por Chefito
joana escribió:¿Me podéis decir la diferencia entre _GUICtrlButton_Create y GUICtrlCreateButton?
Pues a groso modo, es que guictrlcreatebutton es una función nativa de AutoIt, y se utiliza para crear botones solamente en sus ventanas (guicreate).

_guictrlbutton_create no es nativa. Es una función realizada por una persona experta. En este caso pertenece a un grupo de funciones que han sido testeadas y comprobadas, y finalmente viendo su utilidad, integradas en el grupo de udfs de AutoIt. Este grupo de funciones tienen un tema en común. En este caso es todo lo relacionado con botones gráficos de windows.
Si te vas al directorio de instalación de autoit, en la carpeta include (en mi caso, en w7, el camino completo sería C:\Program Files (x86)\AutoIt3\Include), verás todas las udfs definidas. Puedes abrirlas y ver sus códigos. A veces te pueden dar una pista para hacer otras cosas que necesitas y no están implementadas. Pero estos grupos de funciones son bastantes completos y suele estar todo lo que necesitas, sin tener que complicarte más la vida :smt002 . El código de estas funciones es bastante complicado y avanzado, ya que suele tirar directamente de la api de windows. NO SE DEBEN TOCAR!!!!.

El código de esta función (lo que se ejecuta cuando la utilizas):

Código: Seleccionar todo

; #FUNCTION# ====================================================================================================================
; Name...........: _GUICtrlButton_Create
; Description ...: Creates a Button control
; Syntax.........: _GUICtrlButton_Create($hWnd, $sText, $iX, $iY, $iWidth, $iHeight[, $iStyle = -1[, $iExStyle = -1]])
; Parameters ....: $hWnd                       - Handle to parent or owner window
;                  $sText                      - Text to add to Button
;                  $iX                         - Horizontal position of the control
;                  $iY                         - Vertical position of the control
;                  $iWidth                     - Control width
;                  $iHeight                    - Control height
;                  $iStyle                     - Control style:
;                  |  $BS_AUTO3STATE      - Creates a three-state check box in which the state cycles through selected, unavailable, and cleared each time the user selects the check box.
;                  |  $BS_AUTOCHECKBOX    - Creates a check box in which the check state switches between selected and cleared each time the user selects the check box.
;                  |  $BS_AUTORADIOBUTTON - Same as a radio button, except that when the user selects it, the button automatically highlights itself and removes the selection from any other radio buttons with the same style in the same group.
;                  |  $BS_FLAT            - Specifies that the button is two-dimensional; it does not use the default shading to create a 3-D image.
;                  |  $BS_GROUPBOX        - Creates a rectangle in which other buttons can be grouped. Any text associated with this style is displayed in the rectangle’s upper-left corner.
;                  |  $BS_PUSHLIKE        - Makes a button (such as a check box, three-state check box, or radio button) look and act like a push button. The button looks raised when it isn't pushed or checked, and sunken when it is pushed or checked.
;                  -
;                  |  $BS_DEFPUSHBUTTON   - Creates a push button with a heavy black border. If the button is in a dialog box, the user can select the button by pressing the ENTER key, even when the button does not have the input focus. This style is useful for enabling the user to quickly select the most likely option, or default.
;                  -
;                  |  $BS_BOTTOM          - Places the text at the bottom of the button rectangle.
;                  |  $BS_CENTER          - Centers the text horizontally in the button rectangle.
;                  |  $BS_LEFT            - Left-aligns the text in the button rectangle on the right side of the check box.
;                  |  $BS_MULTILINE       - Wraps the button text to multiple lines if the text string is too long to fit on a single line in the button rectangle.
;                  |  $BS_RIGHT           - Right-aligns text in the button rectangle on the right side of the check box.
;                  |  $BS_RIGHTBUTTON     - Positions a check box square on the right side of the button rectangle.
;                  |  $BS_TOP             - Places text at the top of the button rectangle.
;                  |  $BS_VCENTER         - Vertically centers text in the button rectangle.
;                  -
;                  |  $BS_ICON            - Specifies that the button displays an icon.
;                  |  $BS_BITMAP          - Specifies that the button displays a bitmap.
;                  -
;                  |  $BS_NOTIFY          - Enables a button to send BN_KILLFOCUS and BN_SETFOCUS notification messages to its parent window. Note that buttons send the BN_CLICKED notification message regardless of whether it has this style. To get BN_DBLCLK notification messages, the button must have the BS_RADIOBUTTON or BS_OWNERDRAW style.
;                  -
;                  |  Vista Sytles:
;                  |    $BS_SPLITBUTTON    - Creates a split button. A split button has a drop down arrow
;                  |    $BS_DEFSPLITBUTTON - Creates a split button that behaves like a $BS_PUSHBUTTON style button, but also has a distinctive appearance.
;                  |    $BS_COMMANDLINK    - Creates a command link button
;                  |    $BS_DEFCOMMANDLINK - Creates a command link button that behaves like a $BS_PUSHBUTTON style button.
;                  -
;                  |Default: ( -1) : none
;                  |Forced : $WS_CHILD, $WS_TABSTOP, $WS_VISIBLE, $BS_NOTIFY
;                  -
;                  $iExStyle    - Control extended style. These correspond to the standard $WS_EX_ constants.
; Return values .: Success      - Handle to the Button control
;                  Failure      - 0
; Author ........: Gary Frost
; Modified.......:
; Remarks .......: Above constants require ButtonConstants.au3
;+
;                  This function is for Advanced users and for learning how the control works.
; Related .......: _GUICtrlButton_Destroy
; Link ..........:
; Example .......: Yes
; ===============================================================================================================================
Func _GUICtrlButton_Create($hWnd, $sText, $iX, $iY, $iWidth, $iHeight, $iStyle = -1, $iExStyle = -1)
	If Not IsHWnd($hWnd) Then
		; Invalid Window handle for _GUICtrlButton_Create 1st parameter
		Return SetError(1, 0, 0)
	EndIf
	If Not IsString($sText) Then
		; 2nd parameter not a string for _GUICtrlButton_Create
		Return SetError(2, 0, 0)
	EndIf

	Local $iForcedStyle = BitOR($__BUTTONCONSTANT_WS_TABSTOP, $__UDFGUICONSTANT_WS_VISIBLE, $__UDFGUICONSTANT_WS_CHILD, $BS_NOTIFY)

	If $iStyle = -1 Then
		$iStyle = $iForcedStyle
	Else
		$iStyle = BitOR($iStyle, $iForcedStyle)
	EndIf
	If $iExStyle = -1 Then $iExStyle = 0
	Local $nCtrlID = __UDF_GetNextGlobalID($hWnd)
	If @error Then Return SetError(@error, @extended, 0)
	Local $hButton = _WinAPI_CreateWindowEx($iExStyle, $__BUTTONCONSTANT_ClassName, $sText, $iStyle, $iX, $iY, $iWidth, $iHeight, $hWnd, $nCtrlID)
	_SendMessage($hButton, $__BUTTONCONSTANT_WM_SETFONT, _WinAPI_GetStockObject($__BUTTONCONSTANT_DEFAULT_GUI_FONT), True)
	Return $hButton
EndFunc   ;==>_GUICtrlButton_Create
Y la gran diferencia que a tí seguramente te interesa, es que puedes trabajar con estas funciones en casi cualquier ventana nativa de windows, no solo en las creadas en autoit por tí. Por ejemplo, gracias a esta udf puedes en cualquier ventana, cambiar el texto de los botones, tamaño, color, cliquearlos, ocultarlos, crear nuevos en cualquier posición, control de eventos, etc etc etc y muchos etcs :smt005 .
También tiene cosas que puede que no puedas hacer o que sea muy complicado de hacer con las funciones nativas de autoit. Pues mira estas funciones, que seguramente aquí encontrarás la solución :smt002 .

Esto se extiende a casi cualquier udf. Hay muchísimas no oficiales que te pueden ser de mucha utilidad en algunos temas. Todo sería cuestión de buscar en el foro o en el foro de habla inglesa.

Saludos.

Re: Hacer un FORM o GUI dentro de uno ya existente.

Publicado: 21 Ago 2012, 07:25
por joana
Gracias. La explicación me sirve! xD Voy entendiendo Autoit!