PARA LEOSOFT... Tres preguntitas de MarK

Hola Leosoft, nada más tres preguntitas:
1.- Como limitar a tres decimales el contenido que puedas introducir en un textbox.
2.-Me dieron un código para imprimir, pero solamente me imprime cuando salgo del programa. Aquí tienes el cogido para imprimir los resultados dentro del List1 que me dijeron:
Private Sub imprimir_Click()
Dim klk As Integer
For klk = 0 To list1.ListCount - 1
Printer.Print resultado
Next klk
End Sub
Le ves el error?
3.- Adaptación de la otra pregunta del otro dia...
Private Sub Command1_Click()
Label1.Caption = Val(Text1) + Val(Text2)
Label2.Caption = CDbl(Label2) + CDbl(Label1)
Label3.Caption = CDbl(Label3) + 1
ANOTACION = "Leosoft"
YY = "1220"
List1.AddItem ANOTACION & CDbl(Label1) & YY
End Sub
Private Sub List1_DblClick()
Dim cadena As String
cadena = ""
For X = Len(List1.text) To 0 Step -1
cadena = Mid(List1.text, X, 1) & cadena
If Mid(List1.text, X - 2, 2) = " " Then Exit For
Next
Label2 = CDbl(Label2) - CDbl(cadena)
List1.RemoveItem List1.ListIndex
End Sub
¿Podrías adaptar la parte que habría que modificar del código que me pasaste?
Un saludo y espero que puedas ayudarme otra vez. Perdona que sea tan pesado!
PD: Ya has visto la pregunta en el tablón para que te vuelva a puntuar lo que te mereces, ¿no? Lo siento mucho reenviamela para que te pueda dar la puntuación que te mereces. Gracias por toda tu atención y tu tiempo. Mark

1 respuesta

Respuesta
1
Respuestas:
1.- Para limitar el ingreso de números a 3 decimales tendrías que utilizar un Masked Edit Control, no un textbox, eso te complicaría un poco, tendrías que cambiar varias lineas del programa, te puedo decir como, pero una forma fácil ahora para agregar a tu programa seria utilizar el Format para leer el textbox,
Label1.Caption = format(Val(Text1),"0.000") + format(Val(Text2),"0.000")
Con esto vos por más que ingreses un numero con más de 3 decimales, siempre te va a leer nada más que 3.
2.- Te falto la instrucción más importante:
Private Sub imprimir_Click()
Dim klk As Integer
For klk = 0 To list1.ListCount - 1
Printer.Print resultado
Next klk
Printer.EndDoc ' esto te envia a la impresora
End Sub
3.-La adaptacion seria:
recorda poner los 2 espacios antes y despues del resultado
List1.AddItem ANOTACION & " " &CDbl(Label1) & " " & YY
en esta tambien pone los 2 espacios
Private Sub List1_DblClick()
Dim cadena As String
Dim Paso As Boolean
Paso = False
cadena = ""
For X = Len(List1.Text) To 0 Step -1
If Paso = True Then cadena = Mid(List1.Text, X, 1) & cadena
If Mid(List1.Text, X - 2, 2) = " " Then
If Paso = False Then
Paso = True
X = X - 2
Else
Exit For
End If
End If
Next
Label2 = CDbl(Label2) - CDbl(cadena)
List1.RemoveItem List1.ListIndex
End Sub
Te cambio un poco la rutina del list, para que se vea un poco mejor, ya que tienes varias columnas de texto distintas por linea,
podes usar cualquiera, fíjate si esto te gusta más:
List1.AddItem ANOTACION & chr(9) &CDbl(Label1) & chr(9) & YY
Private Sub List1_DblClick()
Dim cadena As String
Dim Paso As Boolean
Paso = False
cadena = ""
For X = Len(List1.Text) To 0 Step -1
If Mid(List1.Text, X, 1) = Chr(9) Then
If Paso = False Then
Paso = True
Else
Exit For
End If
Else
If Paso = True Then cadena = Mid(List1.Text, X, 1) & cadena
End If
Next
Label2 = CDbl(Label2) - CDbl(cadena)
List1.RemoveItem List1.ListIndex
End Sub
Hola Leosoft, he probado el primer código que me enviaste y funciona perfectamente! Ahora he modificado alguna cosilla y como no entiendo lo que hace el código no lo se arreglar. T pido disculpas si le doy muchas vueltas alas cosas... Probaré tu segundo código a ver que tal. Por cierto, lo de solamente entrar tres decimales en un textbox lo hablamos otra vez y lo hacemos con "masked edit", ¿oK?
Lo de la impresora, FUNCIONA!
Aquí tienes el código que he modificado:
Label4=cdbl(Label1)*cdbl(text3.text) 'multiplicamos el resultado label1 por un numero que le entramos en el text3.text
hh=" Euros" 'por cierto sabes el CHR(?) De el símbolo "Euros"
List1.AddItem ANOTACION & " " & CDbl(Label1) & " " & "Kg " & CDbl(Label4) & hh.
Label5.caption=CDbl(Label5)+CDbl(Label4)
Te explico un poco: Los espacios pontelos como te convengan. El CDbl(Label5) muestra el sumatorio de los Label4, y por lo tanto tendría que actualizarse también igual que hace el Label2. Cada uno con el valor que le corresponde. Espero no pida lo impossible... Muchas gracias por tu atención y Muchísimas gracias por todo.
PD: ¿De dónde eres? ¿Dónde has aprendido tanto?
Private Sub Command1_Click()
Label1.Caption = Val(Text1) + Val(Text2)
Label2.Caption = CDbl(Label2) + CDbl(Label1)
Label3.Caption = CDbl(Label3) + 1
Label4=CDbl(Label1)*CDbl(text3)'multiplicamos el resultado label1 por un numero que le entramos en el text3.text
Label5.caption=CDbl(Label5)+CDbl(Label4)'sumarorio valores del Label4. Se deve acutalizar según el valor que le corresponde cuando lo borramos del List1_Dblclick()
ESPERO QUE ENTIENDAS LO QUE QUIERO DECIR. Un saludo. MarK
ANOTACION = "Leosoft"
YY = "1220"
hh=" Euros" 'por cierto sabes el CHR(?) de el símbolo "Euros"
List1.AddItem ANOTACION & " " & CDbl(Label1) & " " & "Kg " & CDbl(Label4) & hh
End Sub
Te sugiero un cabio antes de seguir: ¿Qué te parece utilizar un grid?, te van a quedar las cosas mejor ubicadas, si quieres con su crrespondiente titulo arriba, y hasta le podes incluir gráficos en la linea que quieras, si quieres cambiar te paso el código que me enviaste al formato Grid. Sino decime y te paso como hacerlo con el List, no es que sea complicado, sino que va a ser un código más fácil de interpretar, ello te va a ayudar a que cualquier cambio que se te ocurra lo puedas hacer fácilmente, yo te puedo ir indicando como utilizar el grid, es fácil y tu aplicación va a quedar más presentada.
Hola Leo, yo no sé mucho de esto. No sé que es un gird. Si me lo explicas un poco no tengo ningún problema a modificar lo que me digas, además, tienes razón, los códigos que me pasas, funcionan perfectamente, pero lo máximo que puedo entender yo es que juegas con el orden de los espacios para tratar las variables(supongo)... Un saludo. MarK.
Borra el List y en su lugar pone un control Microsoft FlexGrid Control, lo primero que tendrías que definir es su titulo y el espacio que le asignas a cada columna, es como en excel, para eso tienes que hacer así:
Yo lo llame Grid1
En sus propiedades antes de ejecutar cambiale estas cosas:
Cols=4
FixedCols=0
Luego en el evento Load del form pone:
Grid1.Col = 0
Grid1.Row = 0
Grid1.Text = "Anotacion"
Grid1.Col = 1
Grid1.Text = "Kg"
Grid1.Col = 2
Grid1.Text = "label4"
Grid1.Col = 3
Grid1.Text = "hh"
Fijate que los nombre de los titulos los podes cambiar
ahora en ves de list1. Additem vas a poner:
'esto le agrega una fila mas
Grid1.Rows = Grid1.Rows + 1
'con esto se para en la Grid1.Row = Grid1.Rows - 1
ultima fila
'aca se para en la primer Grid1.Col = 0
columna
'le esignas el valor a la Grid1.Text = Anotacion
celda
'asi hasta terminar las Grid1.Col = 1
columnas
Grid1.Text = label1
Grid1.Col = 2
Grid1.Text = label4
Grid1.Col = 3
Grid1.Text = "hh"
ahora en el Grid1_DblClick pone:
'nos paramos en la segunda columna, don esta el resultado del label1
Grid1.Col=1
'se lo restas facilmente al Label2= CDbl(Label2) - CDbl(Grid1.Text)
label2
'ahora en la columna 3 esta el valor del label4
Grid1.Col=2
'se lo restas al label5
Label5= CDbl(Label5) - CDbl(Grid1.Text)
'esto te borra la fila
For x = Grid1.Row To Grid1.Rows - 2
For xx = 0 To 3
Grid1.Col = xx
Grid1.Row = x + 1
texto = Grid1.Text
Grid1.Row = x
Grid1.Text = texto
Next
Next
Grid1.Rows = Grid1.Rows - 1
Fíjate que el Grid con sus propiedades Col y Row te vas moviendo entre filas(Row) y columnas(Col) como si fuera excel, y una ves que estas parado en la celda que quieres podes leer su valor o escribirle algo con la propiedad Grid1.Text
Empezá con esto, el grid es fácil de trabajar, podes cambiarle cualquier cosa a tu gusto.
Saludos. Leo
Hola Leo, perdona por tardar tanto en contestarte, he estado muy liado en el trabajo. He probado tu código y me encuentro con un problema: me agrega filas cada vez que ejecuto el botón Command1, pero el resultado solamente me sale representado en la primera fila todas las veces. Espero indicaciones tuyas. Un saludo de tu alumno mArK.
Fíjate que estén bien estas lineas: creo que te las envíe medias mezcladas con la explicación.
Grid1.Rows = Grid1.Rows + 1
Grid1.Row = Grid1.Rows - 1
Grid1.Col = 0
Grid1.Text = Anotacion
Grid1.Col = 1
Grid1.Text = label1
Grid1.Col = 2
Grid1.Text = label4
Grid1.Col = 3
Grid1.Text = "hh"
Creo que también se quedó a medias algo del Grid1_DblClick. Me agrega bien, pero cuando quiero borrar no me lo hace. Un saludo. Mark.
Grid1_DblClick()
Grid1.Col=1
Label2= CDbl(Label2) - CDbl(Grid1.Text)
Grid1.Col=2
Label5= CDbl(Label5) - CDbl(Grid1.Text)
For x = Grid1.Row To Grid1.Rows - 2
For xx = 0 To 3
Grid1.Col = xx
Grid1.Row = x + 1
texto = Grid1.Text
Grid1.Row = x
Grid1.Text = texto
Next
Next
Grid1.Rows = Grid1.Rows - 1
End Sub
Hola Leo, he de reconocer que eres un CRACK, tu encierto a la hora de solucionar problemas es alucinante! Me has sorprendido nuevamente! Solamente una cosilla: ¿Cuándo el texto que debe introducir en el Grid1 no cabe (porque es de mayor número de caracteres) que debo arreglar para que se autoajuste o dar unas medidas mayores para que se vea bien? ¿Y para modificar la apariencia para que no se vea ningún marco 3D? Un saludo. Muchas mucíssimas GRACIAS. Mark
Cambia en las propiedades del control lo siguiente:
Appearance = 0
GridLines = 1
GridLineaFixed = 1
si queres que tampoco se vean las lineas divisorias cambia esto:
GridColor = 'ponele blanco
GridColorFixed = 'ponele gris
Para ajustar el tamaño de las columnas haces esto desde código, en el load de form, donde definís los títulos pone:
Grid1.ColWidth(0) = 1000
Grid1.ColWidth(1) = 1000
Grid1.ColWidth(2) = 1000
Fíjate que cambia el tamaño de las columnas, vos repetí esto con todas las columnas y pone el tamaño que quieras.
Hola Leo, perdona por contestarte tan tarde. Cosas del trabajo...
He estado probando tus códigos y buah!...
Son PERFECTOS! He estado probando y todo funciona perfectamente pero me empieza a escribir por la tercera fila, te explico mejor: en la primera fila hay los títulos, en la segunda se queda en blanco, y en la tercera empieza a escribir... Como lo hago para arreglarlo, he probado dentro de propiedades pero me obliga a poner 2 fila(sale un mensaje de error cuando quieres cambiar el parámetro Rows a 1). Otra cosa, imaginate que solamente quiero trabajar con tres columnas(eliminamos hh, ¿la cuarta columna) que tengo que modificar? ¿He intentado modificar los "For x" pero no me aclaro...?
Espero una ayudita. Un saludo de tu alumno MarK.
Hola Leo, sabes como justificar el texto del Grid1 de modo que quede centrado, ¿a la derecha o a la izquierda?
Otra cosa, he cambiado el color de las líneas tal y como me dijiste pero yo quisiera que no se vieran las líneas verticales pero que salgan las líneas horizontales para que queden separadas las filas. ¿Sabes si es possible?
Un saludo. MarK
Para sacar la columna hh solo pone en tiempo de diseño Grid1. Cols = 3
Y borras el código que dice
Grid1.Col = 3
Grid1.Text = "hh"
Luego en los For por reemplaza el 3 por el 2.
Es raro que te empiece a escribir el la linea 3, fíjate de poner de entrada, en tiempo de diseño, solo una fila, su propiedad Grid1. Rows=1.
Lamentablemente este objeto no te edmite lo de cambiar el color solo de la linea horizontal o vertical, es una sola variable, y lo de justificar el texto es un poco complicado, se podría hacer con una función que te acomode el texto o con API, pero hacelo andar bien así, luego probamos a cambiar eso.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas