Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Detectar texto seleccionado en StringGrid (https://www.clubdelphi.com/foros/showthread.php?t=88063)

Isprago94 08-04-2015 13:55:58

Detectar texto seleccionado en StringGrid
 
Bueno, soy muy novato en esto, de hecho solo llevo dos semanas programando en Delphi.

Mi duda es simple:

Tengo una aplicación con un StringGrid construido a través de un ADOQuery. La cosa es que en el se muestran nombres y telefonos.
Funciona todo perfectamente, pero estoy intentando meter un filtro y no puedo.

El Código que tengo es este:

Código Delphi [-]
procedure TForm33.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
//Si la columna que vamos a editar es la 2, aplicamos filtro numerico.
if editingX=2 then
 if (not (Key in [#8, '0'..'9'])) OR (( length(StringGrid1.Cells[editingX,editingY]) = 10 )AND( not (Key in [#8]) ))  then begin
    // Ignoramos la tecla pulsada.
    Key := #0;
  end;
end;

Osea, en la columna de teléfonos solo puedo borrar o escribir números. Se ignora la tecla si no es un numero, o si la longitud del campo es la máxima y la tecla que se pulsa no es la de borrar.
Hasta ahora puedo:
-Escribir 10 numeros.
-Borrar los numeros en cualquier momento (Da igual la cantidad de números, 1 o 10).

Pero no puedo realizar lo siguiente:
-Reemplazar los numeros.

Es decir. Cuando selecciono la celda, automáticamente se selecciona todo el contenido (los diez números). Puedo borrarlos con la tecla borrar, pero si pulso otro número, al ya tener los 10 del total, no hace nada (ignora la pulsación). Mi intención es detectar la cantidad de caracteres seleccionados por el puntero del ratón al entrar en la celda.

Si la cantidad es 10, me permitirá que, al pulsar un número, se sobreescriban el resto, que es lo que no puedo hacer por ahora.

Un saludete.

ecfisa 08-04-2015 15:00:21

Hola Isprago94, bienvenido a Club Delphi :)

Como ya es costumbre con los que se inician en estos foros te invitamos a leer nuestra guía de estilo.

En referencia a tu consulta y por lo que interpreto de la situación que comentas, se solucionaría usando las teclas de desplazamiento de cursor derecha o izquierda (si me equivoqué en la apreciación por favor hacemelo saber).

Saludos :)

AgustinOrtu 08-04-2015 18:34:02

A ver si esto te orienta

Código Delphi [-]
type
  // para acceder a la parte protegida del TStringGrid
  THackedStringGrid = class(TStringGrid)

  end;

  TForm3 = class(TForm)
    StringGrid1: TStringGrid;
    ...

Código Delphi [-]
procedure TForm3.Button1Click(Sender: TObject);
begin
    with THackedStringGrid(StringGrid1) do
        if (InplaceEditor <> NIL) then
            ShowMessage(InplaceEditor.SelText);
end;



Saludos

Isprago94 21-04-2015 13:19:05

Perfect, con eso tengo para empezar, muchas gracias.


La franja horaria es GMT +2. Ahora son las 20:10:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi