Cita:
hola ecfisa!!!
Ante todo gracias por la explicacion que me diste en el hilo.
ahora bien, necesito si podes explicarme para que sirve la variable BM de tipo TBookMarkStr, tambien como hacer para que no lo
tire todo hacia la derecha,y por ultimo para que tambien exporte el nombre de las columnas del DBGrid. con eso no te molesto mas.
te vuelvo a repetir, muchisimas gracias por la explicacion anterior.
saludos.
|
Hola ezequiel913.
Tal como me solicitaste por correo privado intentaré explicarte los tres puntos que consultas.
1) Marcas de posición
Empecemos por
TBookmark de tipo
Pointer, que puede almacenar la posición de un registro de un
TDataSet y por lo tanto regresar a él despues de realizar algún desplazamiento en el DataSet. Es decir que nos permite 'marcar' un punto del DataSet para luego retornar a él.
Su uso va aparejado de tres métodos:
GetBookmark,
GotoBookmark y
FreeBookmark.
GetBookmark nos permite obtener la posición del registro actual del DataSet.
GotoBookmark nos posiciona en el registro previamente guardado en Bookmark
FreeBookmrk libera el recurso utilizado.
Ejemplo:
Código Delphi
[-]
...
var
BM: TBookmark;
begin
BM:= DataSet.GetBookmark; try
while not DataSet.Eof do DataSet.Next;
finally
DataSet.GotoBookmark(BM); DataSet.FreeBookmark; end;
end;
Pero existe el tipo
TBookmarkStr con igual finalidad y resultado.
TBookmarkStr es de tipo string (no Pointer) y usándolo, el ejemplo anterior quedaría:
Código Delphi
[-]
...
var
BM: TBookmarkStr;
begin
BM:= DataSet.Bookmark; while not DataSet.Eof do DataSet.Next;
DataSet.Bookmark:= BM; end;
Como verás este es más simple de usar.
2) Texto a la derecha o izquierda.
Simplificando es sólo una manipulación de cadenas de caracteres. Por ejemplo si quiero ajustar un string a una longitud de 30 caracteres y este tiene 12,
le faltan 18 para completar los 30. Entonces:
Completar 30 caracteres con contenido a la izquierda:
Código Delphi
[-]
var
st: string;
begin
st:= 'TBookmarkStr';
st:= StringOfChar(' ',30-Length(st)) + st;
Completar 30 caracteres con contenido a la derecha:
Código Delphi
[-]
var
st: string;
begin
st:= 'TBookmarkStr';
st:= st + StringOfChar(' ',30-Length(st));
Centrar contenido en 30 caracteres:
Código Delphi
[-]
var
st: string;
begin
st:= 'TBookmarkStr';
st:= StringOfChar('.',(30-Length(st)) div 2)
+st+
StringOfChar('.',(30-Length(st)) div 2);
...
end;
3)Para exportar el título de las columnas agregamos: (texto en negrita)
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
var
BM: TBookMarkStr;
i: Integer;
s: string;
ArchTexto: TextFile;
begin
AssignFile(ArchTexto,'C:\A_LA_DERECHA.TXT');
Rewrite(ArchTexto);
BM:= DBGrid1.DataSource.DataSet.Bookmark;
DBGrid1.DataSource.DataSet.DisableControls;
s:= '';
for i:= 0 to DBGRid1.Columns.Count -1 do
s:= s + StringOfChar(' ', DBGrid1.Fields[i].DisplayWidth-
Length(DBGrid1.Columns[i].Title.Caption)) +
DBGrid1.Columns[i].Title.Caption;
Writeln(ArchTexto, s);
Writeln(ArchTexto);
DBGrid1.DataSource.DataSet.First;
for i:= 0 to DBGrid1.Column
while not DBGrid1.DataSource.DataSet.Eof do
begin
s:= '';
for i:= 0 to DBGrid1.FieldCount - 1 do
begin
s:= s + StringOfChar(' ', DBGrid1.Fields[i].DisplayWidth -
Length(DBGrid1.Fields[i].AsString)) +
DBGrid1.Fields[i].AsString;
end;
Writeln(ArchTexto, s);
DBGrid1.DataSource.DataSet.Next;
end;
CloseFile(ArchTexto);
DBGrid1.DataSource.DataSet.Bookmark:= BM;
DBGrid1.DataSource.DataSet.EnableControls;
end;
Saludos.