El Control Workspace en Gambas

Este control implementa un espacio de trabajo con pestañas donde se pueden tener ventanas embebidas dentro de la ventana principal.
Para utilizarlo tenemos que añadir al proyecto el componente gb.form.mdi, por lo que nos vamos al menu Proyecto->Propiedades luego en la ventana que se abre seleccionamos la pestaña componentes y finalmente en la lista que se muestra seleccionamos gb.form.mdi

Luego aparecera en la Caja de Herramientas, en la pestaña Special el control Workspace.

Para trabajar con este control creamos un formulario principal llamado Principal, con un menu llamado Secundario con dos opciones Abrir y Salir. Al formulario le agregamos el control Workspace.

Tambien creamos otro formulario llamado Secundario que contiene un TextArea

Finalmente para abrir el formulario secundario desde el formulario principal y añadirlo en el workspace hacemos lo siguiente en el evento Click del menu Abrir

PUBLIC SUB menAbrir_Click()
	DIM sform AS Secundario
	sform = NEW Secundario
	Workspace1.Add(sform)
	Workspace1.ActiveWindow = sform
END

Con lo que tendriamos como resultado lo siguiente:

Un ultimo dato que me parece conveniente aportar es que al formulario principal debemos asignarle la propiedad:

Para que el Workspace se ajuste al tamaño de la pantalla al momento de redimensionar.

Bueno esto es todo por este post, saludos combativos 🙂

Anuncios

Pequeño editor con pestañas en Gambas

Despues de muuuuuucho tiempo vuelvo a publicar algo sobre mi querido Gambas en este mi humilde blog, voy a tratar de no abandonarlo mucho pero a veces se me hace complicado por las multiples cosas que tengo que realizar y tambien por la flojera ;-).
Bueno pues resulta que se me ocurrio hacer un pequeño editor de texto tipo el famosisimo gedit, con pestañitas y todo asi que puse manos a la obra, lo primero fue tratar de averiguar que control nos permite trabajar en Gambas con pestañas y bueno encontre el TabStrip, cuya documentacion mas detallada junto con todas sus propiedades, metodos y eventos las podemos encontrar aqui.

Las propiedades con las que he trabajado aqui y que son las mas importantes de este Contenedor son las siguientes:

Observamos que tenemos tres pestañas porque se ha especificado la propiedad Count=3 si queremos mas pestañas incrementaremos esta propiedad.

En este caso tenemos la propiedad Text= “Pestaña 3” con lo que establecemos el texto del encabezado de la pestaña actual en este caso la pestaña numero 3 y asi con las demas pestañas.

Ahora si vamos de una vez al editor de texto, tenemos el siguiente formulario en modo de diseño:

Hasta el momento lo unico que hace es abrir archivos de texto en las diferentes pestañas de igual manera a como lo hace el gedit, para esto he trabajado la creacion de cada nueva pestaña de la siguiente manera.

PUBLIC SUB nuevaHoja()
	DIM txtEditAux AS TextArea
	'tabDoc es el nombre del TabStrip
	'En este caso estamos incrementando la propiedad Count en 1,
	'cada vez que creamos o abrimos un nuevo documento de texto
	tabDoc.Count += 1
	'Incrementamos la variabla conTabs que cuenta el numero de pestañas
	conTabs += 1
	'Con la propiedad index establecemos el indice de la pestaña actual,
	'en este caso va a ser el numero de la ultima pestaña creada establecida en conTabs
	tabDoc.Index = conTabs
	'Cuando se va a crear un documento nuevo se mostrara el siguiente mensaje en el encabezado de la pantalla,
	'"Documento N no guardado" donde N es el numero de la pestaña abierta
	tabDoc.Text = "Documento " & Str(tabDoc.Index + 1) & " no guardado"
	'Con las lineas de codigo siguientes establecemos dentro de cada contenedor el Text Area
	'que pusimos en la primera pestaña en modo diseño
	txtEditAux = NEW TextArea(tabDoc)
	txtEditAux.X = txtEdit.X
	txtEditAux.Y = txtEdit.Y
	txtEditAux.Height = txtEdit.Height
	txtEditAux.Width = txtEdit.Width
	txtEditAux.Visible = TRUE
END

Para abrir un documento de texto ya existente he implementado el siguiente metodo, el cual tambien hace uso en parte del metodo anterior.

PUBLIC SUB menAbrir_Click()
	DIM arrCad AS NEW String[]
	DIM txtTemp AS TextArea
	DIM c AS String
	DIM ruta AS String
	'Uso Dialog para desplegar una ventana seleccionadora de documentos
	Dialog.Title = "Seleccione un archivo"
	'Con la propiedad Filter filtramos los tipos de documentos permitidos, en este caso archivo txt
	Dialog.Filter = ["*.txt", "Archivos de Texto"]
	'El metodo OpenFile retorna Falso si el usuario ha clickeado en OK o verdadero si cancelo la opcion
	IF NOT Dialog.OpenFile() THEN
		'Con Dialog.Path obtenemos la ruta del archivo seleccionado
		ruta = Dialog.Path
		'Con el metodo Load de la clase File cargamos el contenido del archivo como una cadena de texto
		'Con el metodo Split cortamos la cadena separandola por cada linea de texto del archivo
		arrCad = Split(File.Load(ruta), "\n")
		'La propiedad Children devuelve todos los controles del contenedor(pestaña) actual,
		'en este caso solo tenemos el Text Area, por lo que su indice es cero
		'y lo asignamos a la variable txtTemp
		txtTemp = tabDoc.Children[0]
	END IF
	'Si el area de texto actual no esta vacia abrimos otra pestaña con otra hoja lista.
	IF txtTemp.Text <> "" THEN
		nuevaHoja()
	END IF
	'Aqui obtenemos cada cadena de texto de las que fueron cargadas del archivo
	FOR EACH c IN arrCad
		'Establecemos como encabezado de la pestaña la ruta del archivo
		tabDoc.Text = ruta
		'Asignamos la hoja de texto actual a la variable txtTemp para manipular su contenido
		txtTemp = tabDoc.Children[0]
		'En este caso con el contenido del archivo
		txtTemp.Text &= c & "\n"
	NEXT

END

Finalmente aqui tenemos el pequeño programita en ejecucion:

Cualquier duda, sugerencia, aporte, critica murmuracion, lamento, etc 🙂 espero me la puedan hacer llegar a este humilde espacio, eso es todo por hoy ya me voy a dormir.
Saludos.