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 01-09-2011
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 18
Ledian_Fdez Va por buen camino
Post Cambiar caption a los botones de OpenDialog1

Hola amigos tengo un OpenDialog1 que lo utilizo en dependencia la acción a realizar tanto para guardar un archivo como para abrirlo, lo cierto es que no se como podría cambiarle el caption de los botones en dependencia al uso que le valla a dar.


Mil grasias de antemano,
Salu2
Responder Con Cita
  #2  
Antiguo 01-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Ledian_Fdez.

Código Delphi [-]
...
procedure TForm1.OpenDialog1Show(Sender: TObject);
begin
  if TOpenDialog(Sender).Tag = 1 then
    SetDlgItemText(GetParent(OpenDialog1.Handle), IDOK, PChar('&Abrirlo'))
  else
    SetDlgItemText(GetParent(OpenDialog1.Handle), IDOK, PChar ('&Guardarlo'));
end;

procedure TForm1.btnAbrirClick(Sender: TObject);
begin
  OpenDialog1.Tag:= 1;
  if OpenDialog1.Execute then
  ...
end;

procedure TForm1.btnGuardarClick(Sender: TObject);
begin
  OpenDialog1.Tag:= 2;
  if OpenDialog1.Execute then
  ...
end;
...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 01-09-2011 a las 19:07:14.
Responder Con Cita
  #3  
Antiguo 01-09-2011
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 18
Ledian_Fdez Va por buen camino
Post Como cambiar el Caption del boton y saber cual ha sido pulsado

Hola amigos estoy haciendo este procedimiento para Salvar y/o Restaurar la base de datos.

Tengo 2 interrogantes.

La 1ra: ¿Cómo sustituir el caption del boton Abrir por Guardar del OpendDialog?
La 2da: Como saber cuando me cierran el OpendDialog por el boton Cancelar.

Código Delphi [-]
type TAccion = (Salva, Restaura);

procedure GestionBD(Accion:TAccion);

{
.
.
.
}
procedure GestionBD(Accion:TAccion);
var
 OpenDialog: TOpenDialog;
 Query: TADOQuery;
 SQL, MSG: String;
begin
 try
   OpenDialog := TOpenDialog.Create(nil);
   OpenDialog.FileName := '';
   OpenDialog.DefaultExt := '.slv';
   OpenDialog.Filter := 'Fichero Salva(*.slv)|*.slv';
   OpenDialog.FilterIndex := 1;
   OpenDialog.Initialdir := ExtractFilePath(application.ExeName) ;

   Query := TADOQuery.Create(nil);
   Query.ConnectionString := 'Provider=SQLOLEDB.1;Workstation ID=LEDIAN;User ID=sa;Password=pass';
   Query.SQL.Clear;

   case Accion of
    Salva:    begin
               SQL := 'Backup database DB to disk = :File';
               OpenDialog.Title := 'Guardar Salva.';
               MSG := 'La Salva se realizó satisfactoriamente';
         // Aqui debe ir el código para sustituir el caption del boton Abrir por Guardar ¿Cómo hacerlo? no se.
              end;
    Restaura: begin
               SQL := 'Restore database DB from disk = :File';
               OpenDialog.Title := 'Selecionar Salva para la Restaura.';
               MSG := 'La Restaura se realizó satisfactoriamente';
              end;
   end;

   OpenDialog.Execute;

   if (not(FileExists(OpenDialog.FileName)) and (Accion = Restaura)) then
     begin
      Application.MessageBox('No se encuentra el archivo de Salva','Error al Restaurar', MB_ICONERROR);
      Abort;
     end;
    try
     Query.SQL.Add(SQL);
     Query.Parameters.ParamByName('File').Value := OpenDialog.FileName;
     Query.ExecSQL;
     Application.MessageBox(PChar(MSG),'Información', MB_ICONINFORMATION);
    except
     Application.MessageBox('No se pudo realizar la Operación.','Error', MB_ICONERROR);
    end;
 finally
  OpenDialog.Free;
  Query.Free;
 end;
end;

Mil grasias de antemano.

Última edición por Ledian_Fdez fecha: 01-09-2011 a las 19:16:43.
Responder Con Cita
  #4  
Antiguo 01-09-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Tu primera interrogante ecfisa ya magistralmente te la contestó. Con respecto a la segunda, la línea "OpenDialog.Execute;" devolverá False si el usuario presionó el botón "Cancelar" o simplemente cerró la ventana con el botón "X" en la parte superior derecha. Por ejemplo:

Código Delphi [-]
    { .. código anterior .. }
    if not OpenDialog.Execute then // el usuario canceló
        exit;

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #5  
Antiguo 01-09-2011
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 18
Ledian_Fdez Va por buen camino
Post

Muchas grasias Chris por tu ayuda, lo hice como me dijo y no hubo problema. En cuanto al codigo de ecfisa:


Código Delphi [-]
procedure TForm1.OpenDialog1Show(Sender: TObject);
begin
  if TOpenDialog(Sender).Tag = 1 then
    SetDlgItemText(GetParent(OpenDialog1.Handle), IDOK, PChar('&Abrirlo'))
  else
    SetDlgItemText(GetParent(OpenDialog1.Handle), IDOK, PChar ('&Guardarlo'));
end;

No tengo el evento OnShow. lo puse en la linea que habia comentado en mi procedimiento y no hace nada. Sigue saliendo el boton con el texto de Abrir.

Código Delphi [-]
case Accion of
    Salva:    begin
               SQL := 'Backup database DB to disk = :File';
               OpenDialog.Title := 'Guardar Salva.';
               MSG := 'La Salva se realizó satisfactoriamente';
               SetDlgItemText(GetParent(OpenDialog.Handle), IDOK, PChar ('&Guardar'));
              end;

En espera de su respuesta,
Muchas grasias por su ayuda .

Última edición por Ledian_Fdez fecha: 01-09-2011 a las 19:50:30.
Responder Con Cita
  #6  
Antiguo 01-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Ledian_Fdez.
Cita:
No tengo el evento OnShow.
El evento pertenece al componente TOpenDialog, teniéndolo seleccionado, buscalo en la pestaña Events del Object Inspector.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 01-09-2011
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 18
Ledian_Fdez Va por buen camino
Post

Hola ecfisa

Cita:
El evento pertenece al componente TOpenDialog, teniéndolo seleccionado, buscalo en la pestaña Events del Object Inspector.
Es que yo no inserte el componente, yo lo cree de esta forma
Código Delphi [-]
OpenDialog := TOpenDialog.Create(nil);

No se como acceder a sus Eventos.

En espera de su ayuda ...

Última edición por Ledian_Fdez fecha: 01-09-2011 a las 20:20:30.
Responder Con Cita
  #8  
Antiguo 01-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Código Delphi [-]
...
type
  TForm1 = class(TForm)
    btAbrir: TButton;
    procedure btAbrirClick(Sender: TObject);
  private
    procedure OpenDialogShow(Sender: TObject);
  public
  end;
...
implementation

procedure TForm1.OpenDialogShow(Sender: TObject);
begin
  if TOpenDialog(Sender).Tag = 1 then
    SetDlgItemText(GetParent(TOpenDialog(Sender).Handle), IDOK, PChar('&Abrirlo'))
  else
    SetDlgItemText(GetParent(TOpenDialog(Sender).Handle), IDOK, PChar ('&Guardarlo'));
end;

procedure TForm1.btAbrirClick(Sender: TObject);
begin
  with TOpenDialog.Create(nil) do
  try
    OnShow:= OpenDialogShow;  // <- Aqui se asigna el evento
    Tag:= 1;
    if Execute then
    ...
  finally
    Free;
  end;
end;
...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 01-09-2011
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 18
Ledian_Fdez Va por buen camino
Me da el siguiente error:

[Error] Glabal.pas(71): Incompatible types: 'method pointer and regular procedure'
Responder Con Cita
  #10  
Antiguo 01-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Ledian_Fdez Ver Mensaje
Me da el siguiente error:

[Error] Glabal.pas(71): Incompatible types: 'method pointer and regular procedure'
Poné el código que estás utilizando y vemos donde estás cometiendo el error.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 01-09-2011
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 18
Ledian_Fdez Va por buen camino
Código Delphi [-]
procedure OpenDialogShow(Sender: TObject);
begin
  if TOpenDialog(Sender).Tag = 1 then
    SetDlgItemText(GetParent(TOpenDialog(Sender).Handle), IDOK, PChar('&Abrirlo'))
  else
    SetDlgItemText(GetParent(TOpenDialog(Sender).Handle), IDOK, PChar ('&Guardarlo'));
end;
//------------------------------------------------------------------------------

procedure GestionBD(Accion:TAccion);
var
 OpenDialog: TOpenDialog;
 Query: TADOQuery;
 SQL, MSG: String;
begin
 try
//   OpenDialog := TOpenDialog.Create(nil);
   with TOpenDialog.Create(nil) do
    begin
    OnShow:= OpenDialogShow;  // <- Aqui se asigna el evento
    Tag:= 1;
{...}

[Error] Glabal.pas(71): Incompatible types: 'method pointer and regular procedure'
Responder Con Cita
  #12  
Antiguo 01-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Fijate que el ejemplo que te puse más arriba dice:
Código Delphi [-]
type
  TForm1 = class(TForm)
    btAbrir: TButton;
    procedure btAbrirClick(Sender: TObject);
  private
    procedure OpenDialogShow(Sender: TObject);
  public
  end;
Donde se vé claramente que el procedimiento OpenDialogShow es un método de la clase TForm1.

En el código que pusiste, OpenDialogShow está declarado como un procedimiento regular y eso es lo que te marca el error.

La declaración de la cabecera del procedimiento debería ser:
Código Delphi [-]
procedure TNombre_de_tu_form.OpenDialogShow(Sender: TObject);

Te adjunto una muestra probada y funcionando para que puedas ver con tranquilidad como implementarlo.

Un saludo
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 12-09-2011 a las 20:53:08.
Responder Con Cita
  #13  
Antiguo 02-09-2011
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 18
Ledian_Fdez Va por buen camino
Post

Es que estoy implementado ese procedimiento en una Unit Global, no es un formulario, es una Unit donde tengo almacenado varias funciones y procedimiento generales, para luego usuarlas en cualquier proyecto.

Código Delphi [-]
unit Global;

interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, Menus, ExtCtrls, DB, ADODB, DateUtils;

type TAccion = (Salva, Restaura);

procedure GestionBD(Accion:TAccion);
procedure OpenDialogShow(Sender: TObject);

Luego agrego la unit al Uses de donde lo valla usar y llamo al procedimiento y/o funciones.

Código Delphi [-]
GestionBD(Salva);

Dentro de GestionBD es donde creo el OpenDialog, le cambio sus propiedades y es donde quisiera cambiarle en dependencia de la Accion el texto del boton:

Si es Salva, cambiar el texto del boton a guardar.
Si es Restaura, cambiar el texto del boton a abrir.

No se si me hice entender.

Salu2
Ledian.
Responder Con Cita
  #14  
Antiguo 02-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Creo que la cosa pasa por implementar tus rutinas como métodos de una clase.

Basándome en el código que pusiste, sería algo como:
Código Delphi [-]
unit uRutGlobal;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, Menus, ExtCtrls, DateUtils;

type
  TAccion = (Salva, Restaura);
  TRutinasGlobales = class(TObject)
  private
    procedure OpenDialogShow(Sender: TObject);
    ...
  public
    ...
    procedure GestionDB(Accion: TAccion);
  end;

var
  RutGlob: TRutinasGlobales;

implementation

procedure TRutinasGlobales.OpenDialogShow(Sender: TObject);
begin
  if TOpenDialog(Sender).Tag = 1 then
    SetDlgItemText(GetParent(TOpenDialog(Sender).Handle), IDOK, PChar('&Abrirlo'))
  else
    SetDlgItemText(GetParent(TOpenDialog(Sender).Handle), IDOK, PChar ('&Guardarlo'));
end;

procedure TRutinasGlobales.GestionDB(Accion: TAccion);
begin
  with TOpenDialog.Create(nil) do
  try
    OnShow:= OpenDialogShow;
    Tag:= Integer(Accion);
    if Execute then

  finally
    Free;
  end;
end;
...

Y como ejemplo de llamada:
Código Delphi [-]
....
uses uRutGlobal;

procedure TForm1.Button1Click(Sender: TObject);
begin
  RutGlob.GestionDB(Salva);
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #15  
Antiguo 02-09-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
También podría hacerlo como lo hace pero llamando a la función desde el evento OnShow:

Código Delphi [-]
procedure OpenDialogShow(var Sender: TObject);
begin
  if TOpenDialog(Sender).Tag = 1 then
    SetDlgItemText(GetParent(TOpenDialog(Sender).Handle), IDOK, PChar('&Abrirlo'))
  else
    SetDlgItemText(GetParent(TOpenDialog(Sender).Handle), IDOK, PChar ('&Guardarlo'));
end;


procedure TForm1.OpenDialog1Show(Sender: TObject);
begin
  OpenDialogShow(Sender);
end;


Y mantiene su filosofía de unidades de código...

Saludos.
Responder Con Cita
  #16  
Antiguo 02-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
También podría hacerlo como lo hace pero llamando a la función desde el evento OnShow
Si, esa también es una opción válida.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 02-09-2011 a las 15:04:09.
Responder Con Cita
  #17  
Antiguo 03-09-2011
Avatar de ariefez
ariefez ariefez is offline
Miembro
 
Registrado: sep 2005
Ubicación: Perú - Lima
Posts: 63
Poder: 19
ariefez Va por buen camino
También puedes implementar una rutina de clase

Código Delphi [-]
...

  // Rutinas de la unidad global

  Rutinas = class

  public

    class procedure OpenDialogShow(var Sender: TObject);

  end;

...


class procedure Rutinas.OpenDialogShow(Sender: TObject);
begin
  if TOpenDialog(Sender).Tag = 1 then
    SetDlgItemText(GetParent(TOpenDialog(Sender).Handle), IDOK, PChar('&Abrirlo'))
  else
    SetDlgItemText(GetParent(TOpenDialog(Sender).Handle), IDOK, PChar ('&Guardarlo'));
end;

// Asigna el evento al componente TOpenDialog

...

  with TOpenDialog.Create(nil) do
  try
    OnShow:= Rutinas.OpenDialogShow;
    Tag:= Integer(Accion);
    if Execute then
      ...
  finally
    Free;
  end;

...
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
Cambiar el color al caption de la form mefixxto OOP 5 09-04-2009 18:28:41
Cambiar Caption de Cualquier Objeto rjtostado Varios 3 15-10-2008 18:01:31
Cambiar caption componentes capo979 Varios 2 22-07-2008 09:04:23
Cambiar Caption Caral Varios 13 08-02-2008 14:22:13
Cambiar Caption Ayuda...!!! alexis19 Varios 3 26-01-2008 14:25:42


La franja horaria es GMT +2. Ahora son las 14:52:44.


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