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 19-09-2013
Juanfish Juanfish is offline
Registrado
NULL
 
Registrado: sep 2013
Posts: 4
Poder: 0
Juanfish Va por buen camino
Directorio errado al trabajar con componente TSaveDialog

Buenos días a todos, desde hace algún tiempo empeze a tener problemas con un componente TsaveDialog, el error solo me esta ocurriendo con mis usuarios con equipo windows 7. Estoy trabajando en Delphi7

La aplicacion que invoca el componente lo que hace antes de llamar al execute del SaveDialog es declararle en que carpeta por defecto guarda los archivos (ejemplo c:trabajosx\archivos) pero el tema esta que esta aplicacion funciona en dos ambientes distintos en la cual el usuario puede trabajar en una misma maquina, por lo tanto dependediendo del ambiente donde este trabajando los archivos se guardarian en una ruta u otra.

El tema en cuestion es que si un usuario empieza a trabajar en un ambiente "X" para guardar los archivos en la ruta "X", luego al salirse de la aplicacion para levantar el ambiente "Y" y guardar los archivos en "Y", windows realmente le muestra por defecto la ruta "X" donde guardo los archivos, a pesar de que antes de invocarlo le pase la variable con la nueva ruta donde tiene que guardar.

No se que clase de error me origine esto....Lo que tambien e logrado detectar es que hay veces que cuando se cambian de ambiente nisiquiera al guardar los archivos les dice la ruta anterior sino que les muestra "Mis Documentos"; logre entender que Windows muestra "Mis Documentos" por defecto cuando no logra resolver la ruta del initialDir del componente TSaveDialog.

Atento a sus comentarios y dudas.
Saludos
Responder Con Cita
  #2  
Antiguo 19-09-2013
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
Juanfish,

Cita:
Empezado por Juanfish
...el tema esta que esta aplicación funciona en dos ambientes distintos en la cual el usuario puede trabajar en una misma maquina, por lo tanto dependiendo del ambiente donde este trabajando los archivos se guardarían en una ruta u otra...
¡Bienvenido al Club Delphi!

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

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, FileCtrl;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  F1 : TStringList;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  SaveDialog : TSaveDialog;

begin

  SaveDialog := TSaveDialog.Create(self);
  SaveDialog.Title := 'Save your text or word file';
  SaveDialog.InitialDir := 'C:\RutaDefinida-1';
  SaveDialog.Filter := 'Text file|*.txt';
  SaveDialog.FileName := 'TestFile-1';
  SaveDialog.DefaultExt := 'txt';
  SaveDialog.FilterIndex := 1;

  if SaveDialog.Execute then
  begin
     F1.SaveToFile(SaveDialog.FileName);
     ShowMessage('File : ' + SaveDialog.FileName)
  end
  else
     ShowMessage('Save file was cancelled');

  SaveDialog.Free;

end;

procedure TForm1.Button2Click(Sender: TObject);
var
  SaveDialog : TSaveDialog;

begin

  SaveDialog := TSaveDialog.Create(self);
  SaveDialog.Title := 'Save your text or word file';
  SaveDialog.InitialDir := 'C:\RutaDefinida-2';
  SaveDialog.Filter := 'Text file|*.txt';
  SaveDialog.FileName := 'TestFile-2';
  SaveDialog.DefaultExt := 'txt';
  SaveDialog.FilterIndex := 1;

  if SaveDialog.Execute then
  begin
     F1.SaveToFile(SaveDialog.FileName);
     ShowMessage('File : ' + SaveDialog.FileName)
  end
  else
     ShowMessage('Save file was cancelled');

  SaveDialog.Free;

end;

procedure TForm1.FormCreate(Sender: TObject);
var
   i : Integer;
begin
   F1 := TStringList.Create;
   for i := 1 to 10 do
      F1.Add('Line-' + IntToStr(i));
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   F1.Free;
end;

end.
El código anterior en Delphi 7 utiliza el componente TSaveDialog, funcionando según lo esperado en Windows 7 Professional x32 y x64.

Pregunto:

1- ¿Puedes explicar con más detalle el tema relacionado a los ambientes?.

2- ¿Hay algo en el cambio de ambiente que pueda afectar la selección del directorio asignado en el componente TSaveDialog?.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 19-09-2013 a las 21:38:59.
Responder Con Cita
  #3  
Antiguo 20-09-2013
Juanfish Juanfish is offline
Registrado
NULL
 
Registrado: sep 2013
Posts: 4
Poder: 0
Juanfish Va por buen camino
Gracias nslgarcia por tu comentario, cuando me refiero a los ambientes quiero decir que son dos instacias de base de datos separadas, la misma aplicacion dependiendo del registro que se corra levanta una instancia o la otra; por ser asi tengo parametrizado en base de datos una columna de una tabla donde se le coloca en donde va a guardar los archivos para la instancia que se este trabajando.

El problema no esta ahi, ni en declararle al SaveDialog el initialdir, fileExtension o filename; el detalle esta en el execute que no levanta la ruta que se le esta poniendo por defecto y solo me ocurre en windows 7 (tengo usuarios con equipos windows xp y 7).

Momentaneamente lo que hice para resolver es que a stringlist.savetofile() no le paso el Savedialog.filename sino la propia variable de la base de dato que yo le asigno al savedialog.initialdir. En conclusion el savedialog esta de adorno porque siempre se va a guardar segun la ruta que tenga parametrizada en la tabla de mi DB.

De todas formas muchisimas gracias por el aporte, como tal no puedo hacer pruebas bien sobre la aplicacion porque no tengo delphi7 certificado en windows 7 asi que solo compilo en xp y pruebo en otra maquina (te podras imaginar lo fastidioso del asunto). Igual es un tema que tengo que revisar para ver que es lo que ocurre en realidad.

Saludos.
Responder Con Cita
  #4  
Antiguo 21-09-2013
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
Juanfish,

Cita:
Empezado por Juanfish
...lo que hice para resolver es que a stringlist.savetofile() no le paso el Savedialog.filename sino la propia variable de la base de dato que yo le asigno al savedialog.initialdir...


Cita:
Empezado por Juanfish
...el detalle esta en el execute que no levanta la ruta que se le esta poniendo por defecto...como tal no puedo hacer pruebas bien sobre la aplicación porque no tengo Delphi7 certificado en Windows 7 asi que solo compilo en XP y pruebo en otra maquina...
Te comento:

1- Compile el código del Msg #2 en Delphi 7 sobre Windows XP Professional x32 y funciono correctamente en Windows 7 Professional x32, x64 y Windows XP Professional x32.

2- Compile el código del Msg #2 en Delphi 7 sobre Windows 7 Professional x32 y funciono correctamente en Windows 7 Professional x32, x64 y Windows XP Professional x32.

3- Compile el código del Msg #2 en Delphi 7 sobre Windows 7 Professional x64 y funciono correctamente en Windows 7 Professional x32, x64 y Windows XP Professional x32.


Pregunto: ¿El código del Msg #2, funciona en la máquina en cuestión con Windows 7 según lo esperado o también falla?.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 21-09-2013 a las 00:41:41.
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
evitar conflicto entre TSaveDialog y LoadFromFile lmpadron C++ Builder 0 25-01-2013 19:15:33
Saber cómo se ha salido de un TSaveDialog adebonis Varios 2 24-10-2005 14:15:45
Topendialog and Tsavedialog!!! kage_01 Conexión con bases de datos 0 19-10-2005 17:22:53
Que componente uso para trabajar EXEL? marceloalegre Varios 7 17-08-2005 13:32:34
mejor componente para trabajar con firebird. KayserSoze Conexión con bases de datos 4 27-01-2004 17:57:08


La franja horaria es GMT +2. Ahora son las 16:45:39.


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