Hola a todos:
Los molestaré con una pequeña pregunta:
Tengo un formulario. Dentro del formulario tengo un frame. Dentro del frame tengo unos cuantos shapes y unos cuantos textbox.
Ya sé como crear un objeto a partir de un arreglo. Ahora me pregunto:
¿Cómo le hago para crear objetos dentro de otro?
Si creo un frame, un shape y un textbox, éstos se crean por separado. ¿Cómo puedo crear un shape y un textbox dentro de un frame recién creado?
Muchas gracias por su atención. Espero sus respuestas.
mmmm
No se si te he entendido bien, si no es asi me corriges. :rolleyes:
Seleccionas el obejto que quieres meter, lo cortas, haces click en el frame y lo pegas...
PD : Apenas te veo en el msn. :silbar:
DoEvents¡! :P
Ah, bueno, me refería a hacer eso mismo pero mediante código.
Es que quiero que, mediante un command1, el usuario pueda crear los objetos que quiera en tiempo de ejecución.
Saludos y muchas gracias.
P.D: Sí, casi no me conecto. De hecho mi correo electrónico lo reviso una vez cada dos semanas. ¡Soy un desastre!
En realidad no es "objeto dentro de otro objeto" sino objeto dentro de un contenedor, no puedes meter un textbox dentro de un commandbutton (bueno, tal vez se pueda, pero no es lo comun que se busca)
Puedes meter algun control dentro de un frame, PictureBox o similar. Usando(set) la propiedad Container de los controles :)
Muy bien, raul338:
He probado como me lo dijiste y me ha funcionado. Muchas gracias a ti y a PsYkE1 por contestar.
.
Un textBox dentro de un CommandButton, tambien se pueden meter los programas Ajenos dentro del Form solo obteniendo el Hwnd del mismo.!¡.
Con scaleMode = Pixeles
Option Explicit
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function Putfocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
Private Sub cmdCommand1_Click()
Me.ScaleMode = 3 ' // Pixeles
SetParent txtText1.hwnd, cmdCommand1.hwnd
With txtText1
.Top = ((cmdCommand1.Height * 15) - .Height) \ 2
.Left = ((cmdCommand1.Width * 15) - .Width) \ 2
Putfocus (.hwnd)
End With
End Sub
sin ScaleMode Pixel
Option Explicit
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function Putfocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
Private Sub cmdCommand1_Click()
SetParent txtText1.hwnd, cmdCommand1.hwnd
With txtText1
.Top = (cmdCommand1.Height - .Height) \ 2
.Left = (cmdCommand1.Width - .Width) \ 2
Putfocus (.hwnd)
End With
End Sub
Dulces Lunas!¡.
BlackZeroX:
Eso sí que estuvo buenísimo. Ahora me despertaste otra duda:
¿Por qué en modo pixel multiplicas por 15?
Espero no molestarte. Saludos.
son equivalencias
1 pixel = 15 Twip
Aplicando una regla de 3 se convierten esos Twip a pixeles o viceversa (en este caso estory convirtiendo de Pixeles a Twip ya que el .Height del textbox esta en Twip... aun que pude dividir estos entre 15 y no multiplicar el .height del commandButton).
1 P = 15 T
cmdCommand1.Height P --> T ( ya que esta en Pixeles .height)
Si no estuviese en pixeles se invierte
1 P = 15 T
X P --> cmdCommand1.Height P T ( ya que esta en Twip .height)
Embos casos se Obvia el uno y se pasa a hacer la poperacion Final
es decir
el el 1er caso
cmdCommand1.Height Pixeles * 15 Twip \ 1Pixel
obviando la divicion
cmdCommand1.Height Pixeles * 15 Twip
en el caso dos
cmdCommand1.Height P Twip * 1 Pixel \ 15 Twip
obviando la multiplicacion
cmdCommand1.Height P Twip \ 15 Twip
y como por defecto en pixeles tanto como en Twip no hay puntos desimales y pues usamos \ para devolver el entero de la divión y no / ya que devuelve el entero con fracción
Dulces Lunas!¡.