¿Alguien puede darme algún código simple que me daría la posibilidad de buscar una cadena simple en un memorándum y lo han puesto de manifiesto en la nota después de ser encontrado?Búsqueda a través de una nota en Delphi?
Respuesta
function TForm1.FindText(const aPatternToFind: String):Boolean;
var
p: Integer;
begin
p := pos(aPatternToFind, Memo1.Text);
Result := (p > 0);
if Result then
begin
Memo1.SelStart := p;
Memo1.SelLength := Length(aPatternToFind);
Memo1.SetFocus; // necessary so highlight is visible
end;
end;
Esto NO busca entre líneas si WordWrap es verdadero.
Esta búsqueda permite la envoltura documento, la caja (en) búsqueda sensible y búsqueda de la posición del cursor.
type
TSearchOption = (soIgnoreCase, soFromStart, soWrap);
TSearchOptions = set of TSearchOption;
function SearchText(
Control: TCustomEdit;
Search: string;
SearchOptions: TSearchOptions): Boolean;
var
Text: string;
Index: Integer;
begin
if soIgnoreCase in SearchOptions then
begin
Search := UpperCase(Search);
Text := UpperCase(Control.Text);
end
else
Text := Control.Text;
Index := 0;
if not (soFromStart in SearchOptions) then
Index := PosEx(Search, Text,
Control.SelStart + Control.SelLength + 1);
if (Index = 0) and
((soFromStart in SearchOptions) or
(soWrap in SearchOptions)) then
Index := PosEx(Search, Text, 1);
Result := Index > 0;
if Result then
begin
Control.SelStart := Index - 1;
Control.SelLength := Length(Search);
end;
end;
Puede establecer HideSelection = False en la nota para mostrar la selección incluso si la nota no está enfocada.
uso como esto:
SearchText(Memo1, Edit1.Text, []);
permite la búsqueda ediciones también.
El uso de UpperCase podría no darle los resultados deseados, p. en francés, los caracteres en mayúscula no pueden no tener acento, mientras que los caracteres en minúscula puede tener uno (que es diferente del francés canadiense Creo que, en mayúsculas también pueden ser acentuados). Entonces, en este caso, usar LowerCase daría mejores resultados. – dummzeuch
Bueno, la letra acentuada y la letra sin acentos son dos letras diferentes, ¿verdad? Una palabra francesa, cuando se convierte a UpperCase se mostrará como PRIVE, en minúsculas sería privé. Por otro lado, la letra mayúscula É tampoco se convierte en é, por lo que no veo cómo afectará eso a los resultados de búsqueda. Aunque debo admitir que estoy probando esto en Delphi 7. Si Unicode o el posible uso de las opciones de localización en sus rendimientos Delphi en mejores resultados cuando se utiliza minúsculas, por favor. – GolezTrol
GolezTrol: ¡gracias por el consejo de HideSelection! – RobertFrank
- 1. Iterar a través de elementos en una enumeración en Delphi
- 2. ¿Cómo puedo reemplazar cadenas en una nota (FastReport)?
- 3. ¿Abrir cualquier archivo en una nota?
- 4. búsqueda de archivos delphi multiprocesamiento
- 5. Reproduzca una sola nota con DirectMusic
- 6. Administrar IIS a través del código Delphi
- 7. Cómo generar una nota de guitarra
- 8. Bucle a través de la enumeración irregular en Delphi
- 9. establecimiento a través de los genéricos en Delphi
- 10. Iterar a través de propiedades indexadas en Delphi 2010
- 11. Haga una búsqueda y reemplazo en todos los archivos en una carpeta a través de python?
- 12. Agregando una UITabBar y tabbaritems a la UITabBar a través del código (NOTA: no quiero implementar TabBarController)
- 13. Búsqueda de texto completo de PostgreSQL frente a NHibernate. Búsqueda a través de Lucene.Net
- 14. Búsqueda rápida a través de una lista ordenada de cadenas en C++
- 15. ggplot2 nota al pie
- 16. ¿Cómo puedo desactivar un servicio a través de Delphi?
- 17. Enviando SMS a través de Gmail usando Delphi
- 18. Delphi - Búsqueda inversa 'que incluye esta unidad'
- 19. Propiedad de búsqueda en el gráfico de objetos a través de una cadena
- 20. análisis de JSON y búsqueda a través de él
- 21. Vim búsqueda a través de todas las memorias intermedias existentes
- 22. ¿Por qué una búsqueda en Google a través de la API de Google devuelve resultados diferentes a una búsqueda en la página web?
- 23. Búsqueda dependiente del argumento a través de la base de una clase de plantilla
- 24. ¿Salida JSON para consulta de búsqueda de Google Play a través de una llamada API?
- 25. ¿Cómo ejecutas una aplicación Twisted a través de Python (en lugar de a través de Twisted)?
- 26. ¿Existe una función eficiente de búsqueda de palabras completas en Delphi?
- 27. Transmitir una aplicación Delphi 2006 unicode a Delphi 2009
- 28. optimizar la búsqueda a través de una gran matriz js string?
- 29. Búsqueda de texto completo con Firebird y Delphi
- 30. Error en Delphi 2009? -> * .res no se encuentran en la ruta de búsqueda del proyecto (funciona en Delphi 2006)
búsqueda en '' TStrings.Text' en lugar de TStrings.Strings' es muy caro. 2 × N en el hecho. –
@ user205376 - ¿Por qué dices eso? TStrings.Text es una cadena única en la que creo que pos() sería rápido. Buscando, como sugiere, TStrings.Strings involucraría subíndices para acceder a cada cadena. Eso, IMO, opinión, sería más lento y no proporcionaría ninguna funcionalidad adicional que el pos() no. (Y, requeriría algún código complicado para resaltar el patrón encontrado) ¿Por qué crees que no? – RobertFrank
Un poco tarde para el juego, pero para lo anterior, depende de la implementación. Después de todo, TStrings es abstracto. Memo.Lines.Text (= TMemoStrings.Text) obtiene el texto de la nota mediante una única llamada a la API, mientras que una cadena de tiendas TStringList independiente y TStringList.Text las combina en una sola cadena en cada solicitud (que a menudo es aún más rápido que llamar la API, por cierto). La respuesta utiliza Memo1.Text, que creo que pasa por alto cualquier descendiente de TStrings y llama directamente a alguna api de GetText en el manejador de la nota. – GolezTrol