Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-12-2012
dvd2000 dvd2000 is offline
Miembro
 
Registrado: nov 2006
Posts: 14
Poder: 0
dvd2000 Va por buen camino
Dbgrid en Delphi 3

Hola a todos.
Tengo una aplicación hecha, hace muchisimos años, en Delphi 3. Estoy actualizando el programa, metiendo codigo nuevo, y me gustaría hacer lo siguiente, y después de dar muchas vueltas, no lo he conseguido, a ver si sois tan amables de echarme un cable.

Tengo una base de datos en paradox, y conectada a un DBGrid, uno de los campos es un comentario, y lo que quiero hacer es mientras el usuario teclea el comentario, saber en todo momento cuantos caracteres tiene ese comentario, por si llega a un límite determinado pues abrir otra ventana para que pueda escribir un comentario mayor.

Lo he intentado consultando sobre el registro pero hasta que el usuario no grabe el registro no sabré la nueva longitud, y ya es tarde, debo saberlo antes de que grabe.

Espero que me hayáis entendido. Y gracias anticipada.
Responder Con Cita
  #2  
Antiguo 06-12-2012
dvd2000 dvd2000 is offline
Miembro
 
Registrado: nov 2006
Posts: 14
Poder: 0
dvd2000 Va por buen camino
La cuestión es como accedo directamente a lo que se teclea para contar el nº de caracteres, y si llega por ejemplo a 20, pues abro una ventana.

En fin, espero que alguien me oriente como hacerlo.

Saludos.
Responder Con Cita
  #3  
Antiguo 06-12-2012
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Lo que se teclea se teclea en algún sitio, es decir, en algún componente tipo "TDbMemo" o algo así. Ahora bien, creo que sería a este componente al que tendrías que "preguntar" por el texto que contenga en un momento dado. El propio componente contará con eventos como "OnKeyPress" que podrán echarte una mano. El caso es que no quiero asegurarlo del todo, porque, lo mío no son las bases de datos y ni los componentes "TDb*", o sea, que, estoy suponiendo que funcionan de forma parecida a los "normales", en lo que toca a acceder a sus propiedades, eventos, etc.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 06-12-2012
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
dvd2000,

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, StdCtrls, DBCtrls, DB, ADODB, Mask;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    DBGrid1: TDBGrid;
    Memo1: TMemo;
    DBMemo1: TDBMemo;
    ADOConnection1: TADOConnection;
    ADOTable1: TADOTable;
    DataSource1: TDataSource;
    DBEdit1: TDBEdit;
    procedure DBMemo1KeyPress(Sender: TObject; var Key: Char);
    procedure DBGrid1KeyPress(Sender: TObject; var Key: Char);
    procedure DBEdit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Memo1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
   MaxLongComment = 30;

var
  Form1: TForm1;
  CountChar : Integer;

implementation

{$R *.dfm}

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
   if (Length(Edit1.Text) >= MaxLongComment) and (Key <> #8) then
   begin
      Key := #0;
      ShowMessage('Máxima longitud alcanzada');
   end
end;

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
   if (Length(Memo1.Text) >= MaxLongComment) and (Key <> #8) then
   begin
      Key := #0;
      ShowMessage('Máxima longitud alcanzada');
   end
end;

procedure TForm1.DBEdit1KeyPress(Sender: TObject; var Key: Char);
begin
   if (Length(DBEdit1.Text) >= MaxLongComment) and (Key <> #8) then
   begin
      Key := #0;
      ShowMessage('Máxima longitud alcanzada');
   end
end;

procedure TForm1.DBMemo1KeyPress(Sender: TObject; var Key: Char);
begin
   if (Length(DBMemo1.Text) >= MaxLongComment) and (Key <> #8) then
   begin
      Key := #0;
      ShowMessage('Máxima longitud alcanzada');
   end
end;

procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
   if DBGrid1.Fields[DBGrid1.SelectedIndex]=(DBGrid1.DataSource.DataSet.FieldByName('Author')) then
   begin
      if DBGrid1.Controls[0] is TInPlaceEdit then
      with DBGrid1.Controls[0] as TInPlaceEdit do
      begin
         if (GetTextLen >= MaxLongComment) and (Key <> #8) then
         begin
            Key := #0;
            ShowMessage('Máxima longitud alcanzada');
         end;
      end;
   end;
end;

end.
El código anterior muestra ejemplos de como controlar la longitud de un texto en un control de entrada.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 06-12-2012 a las 20:00:42.
Responder Con Cita
  #5  
Antiguo 06-12-2012
dvd2000 dvd2000 is offline
Miembro
 
Registrado: nov 2006
Posts: 14
Poder: 0
dvd2000 Va por buen camino
Gracias por los aporte.

He probado los siguiente, según indicaciones de nlsgarcia, pero en tiempo de ejecución me sale siguiente error: Access violation at address 040E915 in module prueba.exe. Read of Address 00000008.

procedure TFprincipal.DBDatosKeyPress(Sender: TObject; var Key: Char);
begin
if DBdatos.Fields[DBDatos.SelectedIndex]=
(DBDatos.DataSource.DataSet.FieldByName('Proveedor')) then
begin
if DBDatos.Controls[0] is TInPlaceEdit then
with DBDatos.Controls[0] as TInPlaceEdit do
begin
if (GetTextLen >= 10) and (Key <> #8) then
begin
Key := #0;
ShowMessage('Máxima longitud alcanzada');
end;
end;
end;
end;



No sé donde puede estar el error.

Gracias por vuestro interes.
Responder Con Cita
  #6  
Antiguo 06-12-2012
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
dvd2000,

Cita:
Empezado por nlsgarcia
El código anterior muestra ejemplos de como controlar la longitud de un texto en un control de entrada.
Cita:
Empezado por dvd2000
En tiempo de ejecución me sale siguiente error: Access violation at address 040E915 in module prueba.exe. Read of Address 00000008.
El ejemplo implementado en Delphi 7 esta en el link: http://terawiki.clubdelphi.com/Delph...Input_Text.rar

La aplicación incluye la BD para que lo pruebes con facilidad.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 06-12-2012 a las 21:51:45.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Delphi for PHP y DBgrid dante148 Internet 1 04-10-2011 22:56:15
DbGrid en Delphi 7 drakkon Varios 3 27-12-2007 04:42:08
Delphi for php- dbgrid omarifr PHP 2 12-10-2007 17:02:54
DBGrid en delphi 5 ibbeth SQL 1 03-01-2006 02:38:05
Delphi + MySQL (DBGrid) gringo Conexión con bases de datos 5 23-10-2004 04:44:31


La franja horaria es GMT +2. Ahora son las 23:24:34.


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