|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - Brroz
1
« en: Lunes 3 de Julio de 2006, 08:40 »
Babas = X.Cyclop cada vez que las pia.
Sin acritud...
2
« en: Sábado 7 de Mayo de 2005, 10:13 »
hola jose1464
En este mismo foro, hay bastantes temas sobre estas cosas... utiliza el buscador.
Suerte.
3
« en: Sábado 7 de Mayo de 2005, 10:11 »
Hola Jamaicol. Para lo primero mira tu post anterior (no se qué de un notepad) Para lo segundo algo así podría valer: Dim sTexto As String, varTexto As Variant sTexto = Replace(Text1.Text, vbCrLf, " ") & " " varTexto = Split(sTexto, " ") MsgBox UBound(varTexto) & " palabras"
Chao.
4
« en: Sábado 7 de Mayo de 2005, 10:01 »
Hola. Prueba con algo de este estilo: Dim rs1 As Recordset, varNuevoNumero as Variant Set rs1 = cnx1.Execute("SELECT Max(NumFra) From TablaCabeceraFacturas") varNuevoNumero = rs1.Fields(0).Value varNuevoNumero = IIf(Not IsNull(varNuevoNumero), varNuevoNumero + 1, 1)
Chao.
5
« en: Sábado 7 de Mayo de 2005, 09:56 »
Hola Jamaicol. Prueba con algo así: Option Explicit Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal Hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Function CuentaLineas(ByVal Hwnd As Long) As Long Const EM_GETLINECOUNT = &HBA CuentaLineas = SendMessage(Hwnd, EM_GETLINECOUNT, 0&, 0&) End Function Private Function LargoLinea(ByVal Hwnd As Long, ByVal Linea As Long) As Long Const EM_LINEINDEX = &HBB Const EM_LINELENGTH = &HC1 Dim l1 As Long l1 = SendMessage(Hwnd, EM_LINEINDEX, Linea, 0&) If l1 > -1 Then LargoLinea = SendMessage(Hwnd, EM_LINELENGTH, l1, 0&) Else LargoLinea = 0 End If End Function Private Sub Text1_Click() debug.print RowCol End Sub Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer) debug.print RowCol End Sub Private Function RowCol() As String Dim lRow As Long, lLen As Long Dim lStart As Long, lPos As Long lStart = Text1.SelStart lPos = InStr(1, Text1.Text, vbCrLf) While lPos < Text1.SelStart And lPos > 0 lStart = lStart - 2 lPos = InStr(lPos + 1, Text1.Text, vbCrLf) Wend lPos = 0 Do lLen = LargoLinea(Text1.Hwnd, lRow) lRow = lRow + 1 If lStart > lLen Then lStart = lStart - lLen Else If Text1.SelStart > 2 Then If Mid(Text1.Text, Text1.SelStart - 1, 2) = vbCrLf Then lStart = 0 lRow = lRow + 1 End If End If If lStart = lLen And Text1.SelStart < Len(Text1.Text) - 1 Then If Mid(Text1.Text, Text1.SelStart + 1, 2) <> vbCrLf Then lStart = 0 lRow = lRow + 1 End If End If lStart = lStart + 1 Exit Do End If Loop RowCol = "Fila " & lRow & " , columna " & lStart End Function
Está sin optimizar y el caso de los comienzos y finales de las líneas está tratado un poco chafalleiramente... Fíjate en este caso en el que no funciona bien: En una línea que no termina en retorno de carro + nueva línea, si te mueves al final de línea con el cursor o escribiendo no hay problema, ya que el propio control pasará a la línea siguiente, pero si vas al final con la tecla <Fin> o haciendo click con el ratón, el cursor no salta a la siguiente línea, pero la funcion sí... Haber si tu lo arreglas, porque yo un sábado que tengo que currar no estoy para gran cosa... Suerte.
6
« en: Jueves 5 de Mayo de 2005, 10:23 »
Hola.
Para saber en qué posición del textbox se encuentra el cursor utiliza la propiedad SelStart del textbox en el evento click del mismo.
Ten en cuenta que algunas de las líneas acabarán con dos carácteres adicionales (Cr + Lf), serán aquellas en las que el usuario ha pulsado intro para saltar a una nueva línea. Las líneas que se inicien nuevas porque el texto ha llegado al extremo del textbox no incluyen estos caracteres...
Si no se te da y tengo tiempo (que cada vez menos) más adelante te echo un cable...
Suerte.
7
« en: Jueves 5 de Mayo de 2005, 09:40 »
Hola. Por ejemplo, puedes construir la sentencia sql en el form y luego asignársela mismamente a un command de un dataenvironment... 'suponiendo que estés usando un dataenvironment DataEnvironment1.Commands(1).CommandText = _ "SELECT * FROM Tabla WHERE Campo=" & Val(Text1.Text)
Chao.
8
« en: Jueves 5 de Mayo de 2005, 09:25 »
Hola Jamaicol. Puedes usar la funcion del api SendMessage tal que así: Option Explicit Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal Hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Sub Command1_Click() MsgBox "El TextBox 'text1' tiene " _ & CuentaLineas(Text1.Hwnd) & " línea(s)." _ & "El lago de la línea 3 es " _ & LargoLinea(Text1.Hwnd, 2) & "." ' fíjate que el indice para el número de línea comienza en 0. End Sub Private Function CuentaLineas(ByVal Hwnd As Long) As Long Const EM_GETLINECOUNT = &HBA CuentaLineas = SendMessage(Hwnd, EM_GETLINECOUNT, 0&, 0&) End Function Private Function LargoLinea(ByVal Hwnd As Long, ByVal Linea As Long) As Long Const EM_LINEINDEX = &HBB Const EM_LINELENGTH = &HC1 Dim l1 As Long l1 = SendMessage(Hwnd, EM_LINEINDEX, Linea, 0&) LargoLinea = SendMessage(Hwnd, EM_LINELENGTH, l1, 0&) End Function
Respecto a lo que dices del ratón... no sé a qué te refieres. Chao.
9
« en: Miércoles 4 de Mayo de 2005, 16:38 »
Hola ErickCerPa. ¿Dónde almacenas el valor para la propiedad?¿Cuál es el valor por defecto para una variable booleana recién creada? La cosa en tu usercontrol debería ir má o menos así: Option Explicit Private bValidar As Boolean Public Property Let Validar(Byval V As Boolean) bValidar = V End Property Public Property Get Validar() As Boolean Validar = bValidar End Property Private Sub UserControl_Initialize() bValidar = True End Sub
Chao.
10
« en: Miércoles 4 de Mayo de 2005, 16:25 »
Hola. Seguro que mediante funciones del api no hay problemas, pero he aquí una forma simpática de deshacer: Text1.SetFocus SendKeys "^Z"
Suerte.
11
« en: Miércoles 4 de Mayo de 2005, 16:19 »
Hola radical & co. No sé si he comprendido muy bien (si no, házmelo saber), pero creo que esto debería de servirte: Private Sub Command2_Click() Dim lRows As Long, lCols As Long lRows = Int(Shape1.Height / Shape2(0).Height) lCols = Int(Shape1.Width / Shape2(0).Width) Dim lRow As Long, lCol As Long, lIdx As Long Dim iFrom As Integer Shape2(0).Move Shape1.Left, Shape1.Top For lRow = 1 To lRows If lRow > 1 Then iFrom = 1 Else iFrom = 2 End If For lCol = iFrom To lCols lIdx = lIdx + 1 Load Shape2(lIdx) Shape2(lIdx).Move Shape1.Left + Shape2(0).Width * (lCol - 1), Shape1.Top + Shape2(0).Height * (lRow - 1) Shape2(lIdx).Visible = True Next lCol Next lRow End Sub
Por otro lado, ignoro qué es lo que pretendes hacer, pero piensa en la posibilidad de dibujar rectángulos mediante el método Line, así te ahorrarías cargar el form con tantos controles. Suerte.
12
« en: Miércoles 4 de Mayo de 2005, 15:54 »
13
« en: Miércoles 4 de Mayo de 2005, 15:49 »
Hola vqt.
Cuando usas un grupo de proyectos puedes modificar, ejecutar, depurar todos los proyectos del grupo como si estuviesen compilados. Debes establecer un proyecto inicial (que es el que se ejecutará cuando pulses F5). Para utilizar objetos de otros proyectos debes añadir las correspondientes referencias a los proyectos. Cuando entres en las referencias verás que aparecen los otros proyectos que forman parte del grupo (los proyectos que sean componentes activeX, claro). Como me estoy liando un poco, te lo explico con un ejemplo:
Imagina que quieres crear una aplicación con un ejecutable y una dll activeX con clases que le proporcionan distintas funcionalidades. Para realizar esto, tendrías que crear un proyecto dll actX, compilarlo, crear el proyecto del ejecutable y añadir la referencia a la dll compilada anterior. Para ahorrarte el tener que desarrollar los dos proyectos por separado, creas un grupo de proyectos al que añades los dos, la dll y el exe. Estableces el exe como proyecto inicial y vas a las referencias del exe y le añades una referencia al proyecto dll activex. Y ya está, podrás desarrollar los proyectos de forma paralela, depurando lo quieras y todo eso.
Por supuesto a la hora de compilar los proyectos, el exe debe tener la referencia a la dll compilada.
Chao.
14
« en: Miércoles 4 de Mayo de 2005, 15:36 »
Hola Andy.
Desde luego que no tengo ni idea de qué es lo que ocurre... pero si te ocurre desde hace un par de días, será porque algo se habrá hecho hace un par de días. Lo primero de todo, averigua qué es lo que ha cambiado, y a partir de ahí, tendrás más datos para sacar algo en limpio, porque con los que das...
Por otro lado, aunque en inglés, el texto del mensaje es bastante claro: El proceso que origina el mensaje ha usado una clase intentando acceder a un método o propiedad que no existe o está fuera de su alcance (scope).
Suerte.
15
« en: Miércoles 4 de Mayo de 2005, 15:32 »
hola laux.
No uso datareport, pero si no me equivoco (y si no, por favor me corrijan) puedes establecer el origen de datos de un datareport mediante un control data o un dataenvironment. Pues vale, tampoco uso ninguno de estos, pero seguro que puedes establecer la correspondiente sentencia SQL que previamente habrás construido en una variable estableciendo la cláusula WHERE con todos los parámetros que desees.
Suerte.
17
« en: Miércoles 4 de Mayo de 2005, 15:17 »
Hola AndresMS. Esa declaración no funcionaría... Sin examinar en detalle el código, veo que intentas añadir en tiempo de ejecución controles de los que quieres controlar sus eventos... Puedes seguir dos caminos: 1- Añade en tiempo de ejecución un control del tipo que desees y da valor a su propiedad 'Index' con el fin de crear una matriz de controles. Para añadir nuevos controles a la matriz, utiliza el método Load. 'En tiempo de diseño, se ha añadido MiControl(0) Public Sub AddControl . . . Dim iIdx as Integer iIdx = MiControl.UBound + 1 Load MiControl(iIdx) MiControl(iIdx).Move Left, Top, width, height MiControl(iIdx).Visible = True . . . End Sub Private Sub MiControl_MiEvento(Index As Integer) . . . MsgBox "MiControl índice " & Index & " produjo un evento" . . . End Sub
2- Declara 'withevents' una variable de tipo VbControlExtender. Luego añade los controles mediante el método Add de la colección Controls asígnando a cada una de las variables 'control extender' que declaraste. Private withEvents MiControl As VBControlExtender Public Sub AddControl . . . Set MiControl = Me.Controls.Add("Biblioteca.Clase", "MiControl") MiControl.Move Left,Top,with,Height . . . End Sub Private Sub MiControl_MiEvento() . . . MsgBox "MiControl produjo un evento" . . . End Sub
Suerte.
18
« en: Miércoles 4 de Mayo de 2005, 14:51 »
Hola Mydr.
Puedes utilizar un control 'Masked Edit Control' que viene a ser como un cuadro de texto que permite definir máscaras de entrada para los datos.
Chao.
19
« en: Jueves 31 de Marzo de 2005, 14:47 »
Hola grandzam
Sobre lo de que puedan cambiar el número de elementos y dimensiones de la matriz: deberás dimensionar las matrices de forma dinámica. Cuando declares la matriz no indiques ni dimensiones ni elementos, esto lo harás más adelante cuando lo necesites y conozcas los límites que tendrá la matriz mediante ReDim. Si deseas redimensionar la matriz y conservar los valores que contenía deberás usar Redim junto con la palabra clave Preserve.
Sobre el tema de pasar los datos a un grid. La forma de hacer esto variará según el grid que utilices... tendrás que ser más explícito.
Suerte.
20
« en: Jueves 31 de Marzo de 2005, 14:41 »
Hola rodolforpv. Supongo que lo que tienes que refrescar son los recordsets. DataEnvironment1.rsCommand2.Requery
Chao.
21
« en: Jueves 31 de Marzo de 2005, 12:55 »
Hola cangri. Si estás usando como navegador un control webbrowser, podrías usar su método ExecWB para guardar la página. Algo así: WebBrowser1.ExecWB OLECMDID_SAVEAS, OLECMDEXECOPT_DONTPROMPTUSER, "C:\borrar\Archivo.txt" & C-h-r-(-0-)
Tienes que eliminar los guiones ( -) del carácter nulo, es que no fui capaz de postearlo de otra forma, a ver si Sergio nos arregla el tema... Luego puedes buscar en el archivo en el que guardaste la página la correspondiente etiqueta y hacer lo que quieras con los links. Suerte.
22
« en: Jueves 31 de Marzo de 2005, 12:20 »
En cualquier sitio que escriba el tal texto, salta el error. La verdad, es que parándose a pensarlo puede sonar peligroso para el servidor... Impresionante... el código famoso era: WebBrowser1.ExecWB OLECMDID_SAVEAS, OLECMDEXECOPT_DONTPROMPTUSER, "C:\borrar\Archivo.txt"
Lo que provocaba el error era un carácter nulo concatenado as la cadena del tercer parámetro (no lo escribo porque ya hasta miedo me da). Lo curioso es que estoy seguro de haber escrito semejante secuencia de letras en más de una ocasión (C-h-r-(-0-) elimínense los guiones). Chao y gracias.
23
« en: Jueves 31 de Marzo de 2005, 11:57 »
La respuesta no incluía imágenes ni adjuntos ni ná... pero acabo de intentar postear el mismo texto aquí mismo y me ha salido el mismo error... Intento postearlo con una pequeña modificación: ----------------------------------------------------------------------------- Hola cangri. Si estás usando como navegador un control webbrowser, podrías usar su método ExecWB para guardar la página. Algo así: Aquí iría una línea de código que pienso yo podría ser la culpable... cosa que confirmaré si soy capaz de de postear esto
Luego puedes buscar en el archivo en el que guardaste la página la correspondiente etiqueta y hacer lo que quieras con los links. Suerte. ------------------------------------------------------------------------------------------- Lo único un poco raro podría ser una línea de código que incluía. Tal vez el problema esté en esa línea. Voy a intentar enviarte el texto en un privado (si me deja) para que lo veas...
24
« en: Jueves 31 de Marzo de 2005, 11:42 »
En principio sólo con el tema de cangri: Respondí un par de temas antes sin problema y uno más después (aparte de este, claro).
Acabo de reintentarlo y sigue ocurriendo lo mismo...
Chau
25
« en: Jueves 31 de Marzo de 2005, 11:02 »
Hola roxiii.
Efectivamente, problemas de seguridad siempre puede haber. Creo que este es un tema muy extenso y complejo que se me escapa en gran parte, pero ahí van algunas ideas:
Cuida el alcance de todos los métodos y propiedades (Private/Friend/Public). Ojo con las clases instanciables como 'GlobalMultiuse'. Podría ser preferible proporcionar la interface mediante alguna clase PublicNotCreatable encapsulada en una propiedad Get de tipo object, de forma que sólo setearas el objeto según cierta condición previa (por ejemplo comprobar una clave). Cuanto más robusta sea la interfaz que proporcionas, más segura será la aplicación. Más allá de estas cosas yo no me suelo preocupar mucho más (el entorno en el que se suelen ejecutar mis aplicaciones me lo permite), pero lo que sí tengo claro es que seguro, seguro, lo que se dice seguro, no hay nada.
Suerte.
|
|
|