Localizar um TEXTO dentro de um MEMOEDIT - Por favor, ajudem
Moderador: Moderadores
-
fabianocbrito
- Usuário Nível 1

- Mensagens: 11
- Registrado em: 06 Nov 2007 23:30
- Localização: Alfenas
Localizar um TEXTO dentro de um MEMOEDIT - Por favor, ajudem
Prezados colegas,
preciso de uma função para localizar um texto (fornecido através de uma variavel) dentro de um memoedit, em um campo MEMO do DBF. Só preciso localizar o texto e posicionar nele.
Tenho visto alguns exemplos aqui no forum utilizando as funcoes CHARODD() e SCREENSTR() da CT.LIB mas estas funcoes pelo que entendi tratam de caracteres da TELA naquele momento. Não consegui adaptar para funcionar dentro de um campo MEMO já gravado no DBF usando uma função de controle do MEMOEDIT(). Por exemplo, quero pressionar uma tecla de função qualquer (ex: F3) e, na função de controle do MEMOEDIT, fazer ela pesquizar na variavel MEMO. Se localizar o texto, posicionar nele dentro do campo memo.
Agradeço desde já a atenção dispensada.
preciso de uma função para localizar um texto (fornecido através de uma variavel) dentro de um memoedit, em um campo MEMO do DBF. Só preciso localizar o texto e posicionar nele.
Tenho visto alguns exemplos aqui no forum utilizando as funcoes CHARODD() e SCREENSTR() da CT.LIB mas estas funcoes pelo que entendi tratam de caracteres da TELA naquele momento. Não consegui adaptar para funcionar dentro de um campo MEMO já gravado no DBF usando uma função de controle do MEMOEDIT(). Por exemplo, quero pressionar uma tecla de função qualquer (ex: F3) e, na função de controle do MEMOEDIT, fazer ela pesquizar na variavel MEMO. Se localizar o texto, posicionar nele dentro do campo memo.
Agradeço desde já a atenção dispensada.
Pelo pouco que lembro do MemoEdit (nunca usei), ele não permite o reposicionamento do cursor on-the-fly. Alguém me corrija se eu estiver errado.
A busca de uma palavra no texto em si é relativamente fácil com as funções de strings que o Clipper oferece. Mas saber qual a linha e coluna da sub-string dentro do texto formatado pelo MemoEdit, me parece ser um recurso inexistente. Pelo menos eu nunca vi nada igual.
A busca de uma palavra no texto em si é relativamente fácil com as funções de strings que o Clipper oferece. Mas saber qual a linha e coluna da sub-string dentro do texto formatado pelo MemoEdit, me parece ser um recurso inexistente. Pelo menos eu nunca vi nada igual.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Partindo do principio de que, vc pode jogar o conteudo deste campo memo dentro de uma variável, ou talvez nem precise, tente assim:
Código: Selecionar todos
if at(alltrim(argumento),campomemo) > 0Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
Não é só isso, Junior. Note que o colega quer posicionar o cursor dentro do MemoEdit, exatamente onde se encontra a plavra desejada. Se o problema fosse só pesquisa até seria fácil. Mas,... Acho que não dá.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
-
MARCELOG
- Usuário Nível 4

- Mensagens: 546
- Registrado em: 15 Mar 2005 16:54
- Localização: Divinópolis/MG
Caro Fabiano, vamos pensar um pouco.
Você pode atribuir o contéudo do memo a uma variável e tratá-lo como tal.
Assim, a função at() vai apresentar a posição da ocorrência da string na variável.
Então, se vc formatar a variável, com ajuda de memoline(), dá prá ter a linha e coluna da ocorrência.
Suponhamos que, numa formatação da variável memo com 80 colunas, at() retorne 136 e memoline() retorne 5.
Então a ocorrência da string está na linha 2 (entre 81 e 160), na coluna 56.
Mas por quê?
cMemo := ... memo...
nPosicao := at(cMemo,'x') // ocorrência da string
nLinhas := memoline(cMemo,80) // nº de linhas se apresentado c/ 80 colunas
nLin := int(nPosicao/80) + 1
if nPosicao <= 80
nCol := nPosicao
else
nCol := nPosicao-(nLinhas*80)
endif
Então em nBufferRow e nBufferCol indique a posição no memoedit uai.
Acho que vai funcionar.
Espero ter ajudado.
MarceloG
Você pode atribuir o contéudo do memo a uma variável e tratá-lo como tal.
Assim, a função at() vai apresentar a posição da ocorrência da string na variável.
Então, se vc formatar a variável, com ajuda de memoline(), dá prá ter a linha e coluna da ocorrência.
Suponhamos que, numa formatação da variável memo com 80 colunas, at() retorne 136 e memoline() retorne 5.
Então a ocorrência da string está na linha 2 (entre 81 e 160), na coluna 56.
Mas por quê?
cMemo := ... memo...
nPosicao := at(cMemo,'x') // ocorrência da string
nLinhas := memoline(cMemo,80) // nº de linhas se apresentado c/ 80 colunas
nLin := int(nPosicao/80) + 1
if nPosicao <= 80
nCol := nPosicao
else
nCol := nPosicao-(nLinhas*80)
endif
Então em nBufferRow e nBufferCol indique a posição no memoedit uai.
Acho que vai funcionar.
Espero ter ajudado.
MarceloG
Água mole em pedra dura tanto bate que até espirra!
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Se o desejo do nosso colega é só localizar a expressão dentro da variavel, faz sentido. Agora, o que será que ele quer dizer com posicionar ? Posicionar para que ? Me desculpe a curiosidade.Só preciso localizar o texto e posicionar nele.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
Provavelmente ele quer ter o que se tem no Word, por exemplo. Nele você pesquisa e o caret (já não é cursor mais) é posicionado na palavra, que aparece em destaque. Faz sentido e ficaria legal. Se der.Agora, o que será que ele quer dizer com posicionar ? Posicionar para que ? Me desculpe a curiosidade.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
-
fabianocbrito
- Usuário Nível 1

- Mensagens: 11
- Registrado em: 06 Nov 2007 23:30
- Localização: Alfenas
Caro colegas, muito obrigado pela atenção:
Respondendo a questão do "PORQUE POSICIONAR":
Preciso posicionar na palavra ou texto pesquisado porque o operador do sistema precisará substituir um texto por outro, mais ou menos como funciona o localizar no Windows (CTRL+F no bloco de notas por ex), para assim, o memoedit continuando a estar em modo de edição, o operador apagar a palavra que procurou e trocar por outra. É um sistema de LAUDOS pré-digitados, q o operador escolhe o LAUDO e o insere no CAMPO MEMO do RESULTADO. Daí, no laudo pré digitado, ele quer colocar algum caracter coringa, por ex "@", para ele procurar este caracter "@" no texto já dentro do MEMOEDIT e substituir pelo valor do resultado apurado nos exames dele.
É isto.
Espero que tenha sanado a dúvida e que sirva para novas discussões sobre o assunto!
Obrigadíssimo!
Respondendo a questão do "PORQUE POSICIONAR":
Preciso posicionar na palavra ou texto pesquisado porque o operador do sistema precisará substituir um texto por outro, mais ou menos como funciona o localizar no Windows (CTRL+F no bloco de notas por ex), para assim, o memoedit continuando a estar em modo de edição, o operador apagar a palavra que procurou e trocar por outra. É um sistema de LAUDOS pré-digitados, q o operador escolhe o LAUDO e o insere no CAMPO MEMO do RESULTADO. Daí, no laudo pré digitado, ele quer colocar algum caracter coringa, por ex "@", para ele procurar este caracter "@" no texto já dentro do MEMOEDIT e substituir pelo valor do resultado apurado nos exames dele.
É isto.
Espero que tenha sanado a dúvida e que sirva para novas discussões sobre o assunto!
Obrigadíssimo!
Deve ser mais ou menos como o meu antigo (e já falecido) sistema de contabilidade. Quando o sujeito ia fazer um lançamento contábil, havia um campo de histórico configurável. Eu nunca quis usar memo pra isso. Então eu deixava incluir um histórico padrão com algumas "tags" no meio. Ao incluir o lançamento, ao invés do sujeito fazer o que você faria no memo, eu abria um campo GET para cada tag que o texto continha. Funcionava redondinho e o sujeito não precisava procurar coisa alguma. Era só preencher esses campos. Deixo essa idéia pra você.
Aliás, agora lembrando: eu também tinha um sistema de laboratório de análises em que haviam os tais laudos também. O esquema era parecido com esse que descrevi, embora mais arcaico.
Aliás, agora lembrando: eu também tinha um sistema de laboratório de análises em que haviam os tais laudos também. O esquema era parecido com esse que descrevi, embora mais arcaico.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Fabiano, você ja testou o meu exemplo ?. Compile e veja se é isso que +/- você quer:
https://pctoledo.org/forum/viewtopic.php?t=5521
Depois é só adaptar para a tecla F3 para que o usuáro digite a string numa janela e procurar-la no MEMOEDIT.
Este método que utilizei, baseia-se no posicionamento inicial nTextBufferRow e nTextBufferColumn que o MEMOEDIT possue como 10º 3 11º parâmetro. Porque o MEMOEDIT não possue um método interno de posicionamento do cursor como o colega Maligno já falou. Então a jogada está em abrir, fechar e re-abrir o MEMOEDIT conforme a posição da string localizada, isto é feito em looping.
https://pctoledo.org/forum/viewtopic.php?t=5521
Depois é só adaptar para a tecla F3 para que o usuáro digite a string numa janela e procurar-la no MEMOEDIT.
Este método que utilizei, baseia-se no posicionamento inicial nTextBufferRow e nTextBufferColumn que o MEMOEDIT possue como 10º 3 11º parâmetro. Porque o MEMOEDIT não possue um método interno de posicionamento do cursor como o colega Maligno já falou. Então a jogada está em abrir, fechar e re-abrir o MEMOEDIT conforme a posição da string localizada, isto é feito em looping.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
-
fabianocbrito
- Usuário Nível 1

- Mensagens: 11
- Registrado em: 06 Nov 2007 23:30
- Localização: Alfenas
Obrigado pessoal, pela atenção.
Pablo César,
estou testando o seu exemplo. é mais ou menos o que preciso sim. Muito obrigado.
Estou estudando também um exemplo que é oferecido com o CLIPPER, junto com seus fontes (\CLIPPER\SOURCE\PE\PE.PRG) . Trata-se do editor PE.EXE desenvolvido totalmente em CLIPPER e que é baseado fundamentalmente na função MEMOEDIT. Ele tem uma pesquisa implementada que vale a pena dar uma olhada: (ALT+S=SEARCH) e (ALT+A=SEARCH AGAIN).
Fica aí uma dica para quem quizer uma referencia.
Obrigado!
Pablo César,
estou testando o seu exemplo. é mais ou menos o que preciso sim. Muito obrigado.
Estou estudando também um exemplo que é oferecido com o CLIPPER, junto com seus fontes (\CLIPPER\SOURCE\PE\PE.PRG) . Trata-se do editor PE.EXE desenvolvido totalmente em CLIPPER e que é baseado fundamentalmente na função MEMOEDIT. Ele tem uma pesquisa implementada que vale a pena dar uma olhada: (ALT+S=SEARCH) e (ALT+A=SEARCH AGAIN).
Fica aí uma dica para quem quizer uma referencia.
Obrigado!

