Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Duda con dbmemo (https://www.clubdelphi.com/foros/showthread.php?t=12798)

acrophet 28-07-2004 11:12:35

Duda con dbmemo
 
Hola a todos.
Tengo una pequeña duda con un dbmemo. Necesito que al entrar a editar el dbmemo me aparezca siempre la fecha en la linea. Esto lo he conseguido haciendo un dbmemo.lines.add(DateToStr(date)). Lo que me hace es que me crea una linea con la fecha, correcto, el cursor aparece en la siguiente linea, pero cuando me pongo en esa linea y empiezo a escribir algo, se me borra la fecha que habia introducido automaticamente.
Como deberia hacerlo para que me saliese la fecha y pudiera editar sin cargarmela???

Un saludo y gracias.

ruina 28-07-2004 12:46:35

lo suyo seria cambiarlo en el campo, no en el control dataware. Un buen sitio para hacer esto puede ser OnStateChange del datasource:
Código Delphi [-]
procedure TForm1.DataSource1StateChange(Sender: TObject);
begin
      IF ClientDataSet1.State IN [DSinsert,dsedit] then
        ClientDataSet1.fieldbyname('Texto').AsString := ClientDataSet1.fieldbyname('Texto').asstring + #13#10 + datetostr(now)
end;

acrophet 28-07-2004 13:00:52

Yo creo que como lo intento hacer, no esta del todo mal. Lo unico que pasa es lo que os he comentado. Pero sucede una cosa curiosa, si entro en el dbmemo, pues me inserta la linea con la hora, cuando me pongo en esa linea y tecleo algo me la borra. Pero lo bueno es que si luego salgo, vuelvo a entrar y a teclear algo en esa linea, ya no me lo borra :confused:
Alguien tiene algo de informacion sobre el dbmemo y su uso a la hora de añadir texto a pelo??

Muchas gracias.

ruina 28-07-2004 19:26:59

Cita:

Yo creo que como lo intento hacer, no esta del todo mal.
En realidad no. Al igual que no te metes a cambiar el text de un dbedit no deberias cambiar directamente un dbmemo, sino el valor del campo que representa.

Lo que ocurre es lo siguiente:
-insertas una linea en el dbmemo
-entras en el control
-escribes algo
-el control pone en modo de edicion el dataset asociado
-al ponerse en modo de edicion se asignan a los controles dataware los valores en los campos, en consecuencia obtienes el valor anterior a la inserción de la linea.

la segunda vez no te ocurre porque el dataset ya esta en modo de edición.

insisto en que la forma correcta es cambiar el valor del campo. de todas formas para evitar ese comportamiento extraño solo tienes que poner Dataset.edit antes del dbmemo.lines.add

acrophet 29-07-2004 13:35:29

Muchas gracias Ruina, ahora ya funciona tal y como yo queria (aunque puede que no sea la manera mas ortodoxa...).
En fin, mil gracias por la ayuda prestada!

ruina 29-07-2004 16:25:03

es un placer ^_^ para eso estamos.

acrophet 30-07-2004 11:51:04

Hola de nuevo, por ultimo, siguiendo con el tema este y si no es mucho abusar, me gustaria a ver si me puedes decir como puedo hacer para cuando me posicione en el memo, esté en modo sobreescribir. Digo esto porque cuando me meto, todo lo que escribo me va desplazando el texto que yo he metido automaticamente...

Un saludo y muchas gracias por todo!

ruina 30-07-2004 14:12:20

mira a ver usando el evento onEnter del control y posicionando el cursor al final (no se si es esa la idea) :
Código Delphi [-]
procedure TForm1.DBMemo1Enter(Sender: TObject);
var hoy:string;
begin
    hoy:=datetostr(now)+' ';
    ClientDataSet1.Edit;
    if (DBMemo1.Lines.Count>0) and
       (DBMemo1.Lines[DBMemo1.Lines.Count-1]<>hoy) then
    begin
            DBMemo1.Lines.Add(hoy);
            DBMemo1.SelStart:=length(DBMemo1.Lines.Text);
    end;
end;

acrophet 02-08-2004 16:06:34

Gracias por responder Ruina. Pero no es por ahi por donde yo voy. Te explico:

Yo introduzco automaticamente la fecha, vale. Pero luego lo que yo quiero es escribir en la linea donde he metido la fecha, pero sin que esta se vaya desplazando. Escribir al principio de la linea
Código:

Aqui meto el texto escribiendo                                    02/08/04 (esta es la fecha que meto automaticamente
Pues lo que quiero es que lo que voy escribiendo no me corra la fecha, sino que vaya sobreescibiendo hasta llegar a la fecha, y si lo que hay que escribir es mas largo, pues de momento, mala suerte ;)

Un saludo.


La franja horaria es GMT +2. Ahora son las 15:17:32.

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