|
Página 1 de 2
|
Buscar Datos En Un Editor
Autor |
Mensaje |
edivaldo
Usuario
Registrado: Febrero 2014
Mensajes: 15
Edad: 41 Ubicación:
|
Buscar Datos En Un Editor
Buenos días a todos.
Busqué aquí en el foro acerca de la búsqueda de texto y encontré lo siguiente::
Buscar Datos En Un TextArea
Como Buscar Una Palabra (o Letra) En TextEdit
Sin embargo, este método de búsqueda no funciona en un Editor.
Me pregunto si hay una manera de hacer la búsqueda usando un Editor?
Hice una búsqueda utilizando un TextEdit, yo quiero cambiar a un Editor, pero no puedo. Si alguien puede ayudar se lo agradezco. Vea el archivo adjunto:
Descripción: |
Gambas3 |
Descargar |
Nombre del archivo: |
buscatexto.tar.gz |
Tamaño: |
5.34 KB |
Descargado: |
34 veces |
Descripción: |
Gambas3 |
Descargar |
Nombre del archivo: |
buscatexto.tar.gz |
Tamaño: |
5.34 KB |
Descargado: |
34 veces |
Descripción: |
Gambas3 |
Descargar |
Nombre del archivo: |
buscatexto.tar.gz |
Tamaño: |
5.34 KB |
Descargado: |
34 veces |
última edición por edivaldo el Viernes, 21 Febrero 2014, 15:57; editado 3 veces
|
#1 Viernes, 21 Febrero 2014, 15:54 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Buscar Datos En Un Editor
ehmmm.... quizas:
Editor1.ShowString(TextBox1.text)
|
#2 Viernes, 21 Febrero 2014, 16:43 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Buscar Datos En Un Editor
El código que has puesto de ejemplo del buscador dentro del textArea es mío por lo que me ha interesado el tema. Nunca he utilizado el control Editor, sí el textEdit, pero no el editor.
Una pequeña investigación muestra que un control editor es una colección de objetos Line que a su vez contienen un texto y otras características.
He sustituído el control text area por un control editor y en el evento click del botón de búsqueda he probado lo siguiente:
Me ha funcionado de maravilla a la primera. Supongo que no sería difícil el controlar que la línea sea visible, etc. etc. aunque ahora no tengo tiempo para dedicarme a eso.
Espero que este código te sirva de pista.
Suerte
última edición por shordi el Viernes, 21 Febrero 2014, 19:03; editado 1 vez
|
#3 Viernes, 21 Febrero 2014, 19:02 |
|
|
edivaldo
Usuario
Registrado: Febrero 2014
Mensajes: 15
Edad: 41 Ubicación:
|
Re: Buscar Datos En Un Editor
Hola a todos,
shordi, gracias por la respuesta. Yo estoy tratando de hacer lo que has dicho, pero no han tenido éxito. También traté de usar el NextFindWord y Select, pero pide a la Selección Top de la línea, la columna Inicio, fin de línea y final de la columna.
vuott, también gracias por la ayuda. Su punta funcionó. Sin embargo, toda la palabra buscada se seleccionan una vez.
¿Hay una manera de seleccionar uno a la vez?
Public Sub Button1_Click()
Editor1.ShowString(TextBox1.text)
End
última edición por edivaldo el Sabado, 22 Febrero 2014, 22:28; editado 2 veces
|
#4 Sabado, 22 Febrero 2014, 00:02 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Buscar Datos En Un Editor
¿Hay una manera de seleccionar uno a la vez?
Hola edivaldo,
...no te preocupe, no me olvidé, no me olvidé.
Perdone, Yo no soy muy experimentado ehmmm yo pensé que este código:
última edición por vuott el Domingo, 23 Febrero 2014, 01:19; editado 2 veces
|
#5 Domingo, 23 Febrero 2014, 01:15 |
|
|
edivaldo
Usuario
Registrado: Febrero 2014
Mensajes: 15
Edad: 41 Ubicación:
|
Re: Buscar Datos En Un Editor
Hola a todos,
vuott, lo siento por el retraso en la respuesta. Muchas gracias por el código. Me encontré con un pequeño error en el mismo. No sé mucho acerca de la programación, por lo que sólo ahora encontré el error.
Donde estaba escrito:
Cambiado a:
Ahora todo funciona perfecto.
Muchas gracias.
Aquí está el código:
última edición por edivaldo el Jueves, 27 Febrero 2014, 00:27; editado 2 veces
|
#6 Jueves, 27 Febrero 2014, 00:19 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Buscar Datos En Un Editor
Me encontré con un pequeño error en el mismo. No sé mucho acerca de la programación, por lo que sólo ahora encontré el error.
Donde estaba escrito:
Cambiado a:
Ahora todo funciona perfecto.
Sì, tienes razón : la línea es completamente irrelevante.
Bien.
|
#7 Jueves, 27 Febrero 2014, 01:43 |
|
|
edivaldo
Usuario
Registrado: Febrero 2014
Mensajes: 15
Edad: 41 Ubicación:
|
Re: Buscar Datos En Un Editor
He hecho algunas mejoras en la búsqueda
HBox1 - para el campo de búsqueda
ToolButtonBuscar - para permitir el HBox1
Button2 - para volver a la secuencia de búsqueda.
Recordando una vez más que es mi primer programa. Si alguien quiere reducir el código estoy agradecido.
Private $sPath As String
Private $bModify As Boolean
Private linha As Integer
Private edi$ As String
Private a As Integer
Private j As Integer
Private ediold$ As String
Private primeira1 As Integer
Private primeira2 As Integer
Private repete$ As String
Private aold As Integer
Private jold As Integer
Public Sub Form_KeyPress()
If Key.Control And If Key.Code = Key["F"] Then
ToolButtonBuscar.Value = True
Else If Key.Code = Key.Escape Then
ToolButtonBuscar.Value = False
Else If Key.Code = Key.F3 Then
Endif
End
Public Sub Button1_Click()
If CheckBox_CaseSensitive.Value Then
If String.InStr(edi$, UCase$(TextBox1.Text)) > 0 Then
jold = j
If primeira1 = 0 Then
Editor1.Select(j, String.InStr(edi$, UCase$(TextBox1.Text)) + a - 1, j, String.InStr(edi$, UCase$(TextBox1.Text)) + a + Len(UCase$(TextBox1.Text)) - 1)
primeira1 = 1
Else
aold = a
ediold$ = edi$
a += String.InStr(edi$, UCase$(TextBox1.Text))
edi$ = Right(UCase$(Editor1.Lines[j].Text), Editor1.Lines[j].Length - a)
If String.InStr(edi$, UCase$(TextBox1.Text)) > 0 Then
Editor1.Select(j, String.InStr(edi$, UCase$(TextBox1.Text)) + a - 1, j, String.InStr(edi$, UCase$(TextBox1.Text)) + a + Len(UCase$(TextBox1.Text)) - 1)
Else
quaerit()
Endif
Endif
Else
quaerit()
Endif
Else
If String.InStr(edi$, TextBox1.Text) > 0 Then
jold = j
If primeira1 = 0 Then
Editor1.Select(j, String.InStr(edi$, TextBox1.Text) + a - 1, j, String.InStr(edi$, TextBox1.Text) + a + Len(TextBox1.Text) - 1)
primeira1 = 1
Else
aold = a
ediold$ = edi$
a += String.InStr(edi$, TextBox1.Text)
edi$ = Right(Editor1.Lines[j].Text, Editor1.Lines[j].Length - a)
If String.InStr(edi$, TextBox1.Text) > 0 Then
Editor1.Select(j, String.InStr(edi$, TextBox1.Text) + a - 1, j, String.InStr(edi$, TextBox1.Text) + a + Len(TextBox1.Text) - 1)
Else
quaerit()
Endif
Endif
Else
quaerit()
Endif
Endif
End
Private Procedure quaerit()
If CheckBox_CaseSensitive.Value Then
If j < Editor1.Lines.Count - 1 Then
Inc j
a = 0
edi$ = UCase$(Editor1.Lines[j].Text)
primeira1 = 0
Button1_Click()
Else
j = jold
a = aold
edi$ = ediold$
Endif
Else
If j <Editor1> 0 Then
Dec j
a = 0
edi$ = UCase$(Editor1.Lines[j].Text)
primeira2 = 1
If String.InStr(edi$, UCase$(TextBox1.Text)) > 0 Then
Else
Goto InicioButton2
Endif
Endif
Endif
If String.InStr(edi$, UCase$(TextBox1.Text)) > 0 Then
jold = j
aold = a
ediold$ = edi$
If primeira2 = 1 Then 'Primeira vez nesta linha.
primeira2 = 0
Repete:
If String.InStr(edi$, UCase$(TextBox1.Text)) > 0 Then
aold = a
a += String.InStr(edi$, UCase$(TextBox1.Text))
ediold$ = edi$
edi$ = Right(UCase$(Editor1.Lines[j].Text), Editor1.Lines[j].Length - a)
Goto Repete
Endif
a = aold
edi$ = ediold$
If a <= 0 Then
a = 0
edi$ = Right(UCase$(Editor1.Lines[j].Text), Editor1.Lines[j].Length - a)
Editor1.Select(j, String.InStr(edi$, UCase$(TextBox1.Text)) + a - 1, j, String.InStr(edi$, UCase$(TextBox1.Text)) + a + Len(UCase$(TextBox1.Text)) - 1)
Else
Editor1.Select(j, String.InStr(edi$, UCase$(TextBox1.Text)) + a - 1, j, String.InStr(edi$, UCase$(TextBox1.Text)) + a + Len(UCase$(TextBox1.Text)) - 1)
Endif
Else
a = a - String.InStr(edi$, UCase$(TextBox1.Text))
edi$ = Right(UCase$(Editor1.Lines[j].Text), Editor1.Lines[j].Length - a)
If a <0> 0 Then
Dec j
a = 0
edi$ = UCase$(Editor1.Lines[j].Text)
primeira2 = 1
Goto InicioButton2
Else
j = jold
a = aold
edi$ = ediold$
Endif
Endif
Else
If edi$ = Editor1.Lines[j].Text Then
If j > 0 Then
Dec j
a = 0
edi$ = Editor1.Lines[j].Text
primeira2 = 1
If String.InStr(edi$, TextBox1.Text) > 0 Then
Else
Goto InicioButton2
Endif
Endif
Endif
If String.InStr(edi$, TextBox1.Text) > 0 Then
jold = j
aold = a
ediold$ = edi$
If primeira2 = 1 Then 'Primeira vez nesta linha.
primeira2 = 0
Repete_:
If String.InStr(edi$, TextBox1.Text) > 0 Then
aold = a
a += String.InStr(edi$, TextBox1.Text)
ediold$ = edi$
edi$ = Right(Editor1.Lines[j].Text, Editor1.Lines[j].Length - a)
Goto Repete_
Endif
a = aold
edi$ = ediold$
If a <= 0 Then
a = 0
edi$ = Right(Editor1.Lines[j].Text, Editor1.Lines[j].Length - a)
Editor1.Select(j, String.InStr(edi$, TextBox1.Text) + a - 1, j, String.InStr(edi$, TextBox1.Text) + a + Len(TextBox1.Text) - 1)
Else
Editor1.Select(j, String.InStr(edi$, TextBox1.Text) + a - 1, j, String.InStr(edi$, TextBox1.Text) + a + Len(TextBox1.Text) - 1)
Endif
Else
a = a - String.InStr(edi$, TextBox1.Text)
edi$ = Right(Editor1.Lines[j].Text, Editor1.Lines[j].Length - a)
If a <0> 0 Then
Dec j
a = 0
edi$ = Editor1.Lines[j].Text
primeira2 = 1
Goto InicioButton2
Else
j = jold
a = aold
edi$ = ediold$
Endif
Endif
Endif
End
Public Sub TextBox1_KeyPress()
If Key.Code = Key.Enter Or Key.Code = Key.Return Then
Button1_Click()
Endif
End
Private Sub DoFind(Optional bBackward As Boolean)
If CheckBox_CaseSensitive.Value Then 'Verifica se Case Sensitive está habilitado
Editor1.ShowString(Trim(TextBox1.Text), TextBox1.Text) 'Destaca no texto as palavras escritas no TextBox1 (Com Case Sensitive)
linha = 0
While linha <= Editor1.Lines.Count 'Enquanto a variável linha for menor ou igual ao total de linhas
If linha = Editor1.Lines.Count Or If TextBox1.Text = "" Then 'Se chegou ao fim da linha ou se não há texto na caixa de busca
If TextBox1.Text = "" Then 'Se não há texto na caixa de busca
HBox1.Background = Color.Default
Else
HBox1.Background = &DA683F
Endif
linha = Editor1.Lines.Count + 1 'Variável linha recebe o valor do número total de linhas + 1 para sair do While
'fim
Else
If String.InStr(UCase$(Editor1.Lines[linha].Text), UCase$(TextBox1.Text)) > 0 Then 'Procura se há o texto na linha
HBox1.Background = Color.Default
linha = Editor1.Lines.Count + 1 'Variável linha recebe o valor do número total de linhas + 1 para sair do While
'fim
Else
Inc linha
'Volta para testar a proxima linha
Endif
Endif
Wend
Else
Editor1.ShowString(Trim(TextBox1.Text)) 'Destaca no texto as palavras escritas no TextBox1 (sem Case Sensitive)
linha = 0
While linha <= Editor1.Lines.Count 'Enquanto a variável linha for menor ou igual ao total de linhas
If linha = Editor1.Lines.Count Or If TextBox1.Text = "" Then 'Se chegou ao fim da linha ou se não há texto
If TextBox1.Text = "" Then 'Se não há texto
HBox1.Background = Color.Default
Else
HBox1.Background = &DA683F
Endif
linha = Editor1.Lines.Count + 1 'Variável linha recebe o valor do número total de linhas + 1 para sair do While
'fim
Else
If String.InStr(Editor1.Lines[linha].Text, TextBox1.Text) > 0 Then 'Procura se há o texto na linha
HBox1.Background = Color.Default
linha = Editor1.Lines.Count + 1 'Variável linha recebe o valor do número total de linhas + 1 para sair do While
'fim
Else
Inc linha
'Volta para testar a proxima linha
Endif
Endif
Wend
Endif
End
Public Sub CheckBox_CaseSensitive_Click()
DoFind()
End
Sigue la fuente del programa comprimido:
Descripción: |
Buscar Datos En Un Editor Versão: 1.1 Compilado em: Gambas3 |
Descargar |
Nombre del archivo: |
Notepad_Com_Busca (1.1)-3.0.tar.gz |
Tamaño: |
16.63 KB |
Descargado: |
46 veces |
Descripción: |
Buscar Datos En Un Editor Versão: 1.1 Compilado em: Gambas3 |
Descargar |
Nombre del archivo: |
Notepad_Com_Busca (1.1)-3.0.tar.gz |
Tamaño: |
16.63 KB |
Descargado: |
46 veces |
Descripción: |
Buscar Datos En Un Editor Versão: 1.1 Compilado em: Gambas3 |
Descargar |
Nombre del archivo: |
Notepad_Com_Busca (1.1)-3.0.tar.gz |
Tamaño: |
16.63 KB |
Descargado: |
46 veces |
última edición por edivaldo el Viernes, 28 Marzo 2014, 01:34; editado 2 veces
|
#8 Viernes, 28 Marzo 2014, 01:25 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Buscar Datos En Un Editor
edivaldo:
Citar: Recordando una vez más que es mi primer programa, si alguien quiere reducir el código estoy agradecido.
Se puede mejorar tu codigo en algunos aspectos:
Lo primero que he visto es que usas mucho código "repetido", en vez de ponerlo tantas veces repetido, usa funciones, así tu código quedará mas legible, más corto, y más fácil modificar.
Leete esto Curso de Gambas: subrutina y funciones, seguro que te resulta útil.
Saludos
|
#9 Viernes, 28 Marzo 2014, 09:54 |
|
|
edivaldo
Usuario
Registrado: Febrero 2014
Mensajes: 15
Edad: 41 Ubicación:
|
Re: Buscar Datos En Un Editor
Ola jsbsan, muito bom o site que você me passou.
Depois de aprender um pouco sobre funções e subrotinas o código ficou menor.
Segue o código:
Private linha As Integer
Private edi$ As String
Private a As Integer
Private j As Integer
Private ediold$ As String
Private primeira1 As Integer
Private primeira2 As Integer
Private aold As Integer
Private jold As Integer
Public Sub Form_KeyPress()
If Key.Control And If Key.Code = Key["F"] Then
ToolButtonBuscar.Value = True
Else If Key.Code = Key.Escape Then
ToolButtonBuscar.Value = False
Else If Key.Code = Key.F3 Then
Endif
Public Sub Button1_Click()
If String.InStr(edi$, TextoProcurado(CheckBox_CaseSensitive.Value)) > 0 Then
jold = j
If primeira1 = 0 Then
SelecionaTexto()
primeira1 = 1
Else
ProcessaDados()
If String.InStr(edi$, TextoProcurado(CheckBox_CaseSensitive.Value)) > 0 Then
SelecionaTexto()
Else
quaerit()
Endif
Endif
Else
quaerit()
Endif
End
Private Procedure quaerit()
If j <Editor1> 0 Then
VoltaUmaLinha()
If String.InStr(edi$, TextoProcurado(CheckBox_CaseSensitive.Value)) > 0 Then
Else
Goto InicioButton2
Endif
Endif
Endif
If String.InStr(edi$, TextoProcurado(CheckBox_CaseSensitive.Value)) > 0 Then
jold = j
aold = a
ediold$ = edi$
If primeira2 = 1 Then 'Primeira vez nesta linha.
primeira2 = 0
While String.InStr(edi$, TextoProcurado(CheckBox_CaseSensitive.Value)) > 0
ProcessaDados()
Wend
a = aold
edi$ = ediold$
ProcessaDados2()
Else
a = a - String.InStr(edi$, TextoProcurado(CheckBox_CaseSensitive.Value))
edi$ = Right(TextosDaLinhaJ(CheckBox_CaseSensitive.Value), Editor1.Lines[j].Length - a)
ProcessaDados2()
Endif
Else
If j > 0 Then
VoltaUmaLinha()
Goto InicioButton2
Else
j = jold
a = aold
edi$ = ediold$
Endif
Endif
End
Private Procedure VoltaUmaLinha()
Dec j
a = 0
edi$ = TextosDaLinhaJ(CheckBox_CaseSensitive.Value)
primeira2 = 1
End
Private Procedure ProcessaDados2()
If a <= 0 Then
a = 0
edi$ = Right(TextosDaLinhaJ(CheckBox_CaseSensitive.Value), Editor1.Lines[j].Length - a)
SelecionaTexto()
Else
SelecionaTexto()
Endif
End
Public Sub TextBox1_KeyPress()
If Key.Code = Key.Enter Or Key.Code = Key.Return Then
Button1_Click()
Endif
End
Private Sub DoFind(Optional bBackward As Boolean)
Editor1.ShowString(TextBox1.Text, CheckBox_CaseSensitive.Value) 'Destaca no texto as palavras escritas no TextBox1
linha = j 'Salva valor de j
j = 0
While j <= Editor1.Lines.Count 'Enquanto a variável j for menor ou igual ao total de linhas
If j = Editor1.Lines.Count Or If TextoProcurado(CheckBox_CaseSensitive.Value) = "" Then 'Se chegou ao fim da linha ou se não há texto
If TextoProcurado(CheckBox_CaseSensitive.Value) = "" Then 'Se não há texto
HBox1.Background = Color.Default
Else
HBox1.Background = &DA683F
Endif
j = Editor1.Lines.Count + 1 'Variável j recebe o valor do número total de linhas + 1 para sair do While
'fim
Else
If String.InStr(TextosDaLinhaJ(CheckBox_CaseSensitive.Value), TextoProcurado(CheckBox_CaseSensitive.Value)) > 0 Then 'Procura se há o texto na linha
HBox1.Background = Color.Default
j = Editor1.Lines.Count + 1 'Variável j recebe o valor do número total de linhas + 1 para sair do While
'fim
Else
Inc j
'Volta para testar a proxima linha
Endif
Endif
Wend
j = linha 'Recupera valor de j
End
Public Sub CheckBox_CaseSensitive_Click()
DoFind()
End
Public Function TextoProcurado(TextoProcuradoCaseSensitive As Integer) As String 'Função para tratar o texto caso haja case sensitive
TextoProcuradoCaseSensitive = CheckBox_CaseSensitive.Value
If TextoProcuradoCaseSensitive = 0 Then
Return TextBox1.Text
Else
Return UCase$(TextBox1.Text)
Endif
End
Public Function TextosDaLinhaJ(TextosDaLinhaJCaseSensitive As Boolean) As String 'Função para tratar o texto caso haja case sensitive
TextosDaLinhaJCaseSensitive = CheckBox_CaseSensitive.Value
If TextosDaLinhaJCaseSensitive = 0 Then
Return Editor1.Lines[j].Text
Else
Return UCase$(Editor1.Lines[j].Text)
Endif
End
última edición por edivaldo el Viernes, 04 Abril 2014, 00:06; editado 3 veces
|
#10 Viernes, 04 Abril 2014, 00:02 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 2
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|